Anda di halaman 1dari 10

Lenguaje de programacion

18/04/2012

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

1.1 MODULARIDAD
La modularidad es la posibilidad de subdividir una
aplicacin en piezas mas pequeas (denominadas
mdulos), cada una de las cuales debe ser tan
independiente como sea posible, considerando la aplicacin
como un todo, as como de las otras piezas de las cuales es
una parte.

CAP. 1.
MODULARIDAD. TIPOS
ABSTRACTOS DE DATOS

En esencia las abstracciones se implementan en mdulos,


conocidos en la terminologa de Booch como objetos, que
se agrupan en una sola entidad:
Un conjunto de datos

Un conjunto de operaciones que actan sobre los datos


M. Sc. Ing. Lucas Coaquira Cano

Para obtener mdulos con las caractersticas anteriores deben seguirse


las siguientes reglas:

1.1.1 La estructura de un modulo


Un modulo se caracteriza fundamentalmente por su interfaz y por su
implementacin.

Seccin
privada

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

Interfaz

M. Sc. Ing. Lucas Coaquira Cano

Unidades modulares
El lenguaje debe proporcionar estructuras modulares con las cuales se
puedan describir las diferentes unidades.

Primitivas de acceso
Descripcin de propiedades de los datos
Atributos

Algoritmos

Representacin

Parmetros actuales

Interfaces adecuados

En la estructuracin de un programa en unidades es beneficioso que


existan pocos interfaces y que estos sean pequeos.

Figura 1.1. Estructura de un modulo


Pocos
interfaces

1.1.2 Reglas de modularizacion


Un mtodo de diseo debe ayudar al programador a resolver un
problema, dividiendo el problema en subproblemas mas pequeos, que
se puedan resolver independientemente unos de otros. Tambin debe
ser fcil conectar los diferentes mdulos a los restantes
M. Sc. Ing. Lucas Coaquira Cano

Muchos
interfaces

Figura 1.2. Interfaces adecuados (pocos muchos)


M. Sc. Ing. Lucas Coaquira Cano

Lenguaje de programacion

18/04/2012

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

Parte
visible

Interfaces
grandes

Interfaces explcitos
El interfaz o parte visible externamente de un modulo se debe declarar y
describir explcitamente; el programa debe especificar cuales son los
datos y procedimientos que un modulo trata y cuales deben permanecer
ocultos del exterior.

Parte
visible
Interfaces
pequeos

Ocultacin de la informacin
Todos los mdulos deben seguir el principio de ocultacin de la
informacin.

Figura 1.3. Interfaces adecuados (grandes pequeos)


M. Sc. Ing. Lucas Coaquira Cano

LENGUAJE DE PROGRAMACION

M. Sc. Ing. Lucas Coaquira Cano

LENGUAJE DE PROGRAMACION

1.2 DISEO DE MODULOS

Tabla 1.2 Clasificacin de cohesin de mdulos

1.2.1 Acoplamiento de mdulos


El acoplamiento es una medida de interdependencia entre mdulos, es decir, el
modo en que un modulo esta afectado por la estructura interna de otro modulo.

1.2.2 Cohesin de mdulos


La cohesin describe la naturaleza de las interacciones dentro de un mdulo
software. Es decir un mdulo cohesivo solo hace (idealmente) una cosa (o
realizar una sola funcin relacionada con el problema).
Tabla 1.1 Clasificacin del acoplamiento de mdulos

Tipo de cohesin

Grado de cohesin

Por coincidencia
Lgica
Por procedimientos
Por comunicaciones
Secuencial
Funcional
Informacional

Bajo

Alto

Grado de mantenimiento
Bajo

Alto

Idealmente, se busca mdulos altamente cohesivos y dbilmente acoplados.

Tipo de acoplamiento

Grado de acoplamiento

Grado de mantenibilidad

Por contenido
Comn
De control
Por sellado (estampado)
Datos
Sin acoplamiento

Alto (fuerte)

Bajo

1.3 TIPOS DE DATOS


Un tipo de dato es un conjunto de valores y un conjunto de
operaciones definidas por esos valores.

Bajo (dbil)
M. Sc. Ing. Lucas Coaquira Cano

Representacin + Operaciones

Alto
7

M. Sc. Ing. Lucas Coaquira Cano

Lenguaje de programacion

18/04/2012

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

La abstraccin como proceso natural mental


Los tipos de datos que se construyen en un compilador de
este modo se conocen como tipos de datos fundamentales
(predefinidos) y, por ejemplo, en C y C++ son entre otros,
int, char y float.

Las persona comprenden mejor el mundo construyendo modelos mentales

Abstraccin
Propiedad que permite representar las caractersticas mas esenciales de un
objeto, sin preocuparse de las restantes caractersticas (no esenciales).

1.4 ABSTRACCION EN LENGUAJES DE


PROGRAMACION
Los lenguajes de programacin (LP) son las herramientas
mediante las cuales los diseadores de lenguajes pueden
implementar los modelos abstractos.
La abstraccin ofrecida por los LP se puede dividir en dos categoras:
Abstraccin de control y Abstraccin de datos.
M. Sc. Ing. Lucas Coaquira Cano

1.4.1 Abstracciones de control

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

M. Sc. Ing. Lucas Coaquira Cano

10

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

Los primeros lenguajes de programacin de alto nivel introdujeron las


estructuras de control: sentencias de bifurcacin (if) y bucles (for, while,
do-loop, etc.).

La implementacin de un tipo abstracto de dato consta de:


1. La representacin: eleccin de las estructuras de datos.
2. Las operaciones: eleccin de los algoritmos.

Abstraccin procedimental (por procedimientos)

Utilizacin de procedimientos o funciones


Otros mecanismos de abstraccin de control

1.5 TIPO ABSTRACTO DE DATO (TAD)

Tales como manejo de excepciones, corrutinas, unidades concurrentes,


plantillas (Genericidad). Estas construcciones son soportadas por LP
basados y orientados a objetos: C++, Java, Ada, etc.

Un tipo definido por el programador se denomina tipo abstracto de


dato, TAD (Abstract Data Type).

1.4.2 Abstraccin de datos


La modularizacion de un programa utiliza la nocin de tipo abstracto de
dato (TAD) siempre que sea posible. Si el TAD soporta los tipos que
desee el usuario y el conjunto de operaciones sobre cada tipo, se
obtiene un nuevo tipo de dato denominado objeto.

Es la tcnica de programacin que permite inventar o definir nuevos


tipos de datos (tipos de datos definidos por el usuario) adecuados a la
aplicacin que se desea realizar.
Los nuevos tipos de datos definidos por el usuario se llaman tipos
M. Sc. Ing. Lucas Coaquira Cano
abstractos de datos.

11

M. Sc. Ing. Lucas Coaquira Cano

12

Lenguaje de programacion

18/04/2012

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

Un TAD se compone de estructuras de datos y los procedimientos o


funciones que manipulan esas estructuras de datos.

1.5.1 Ventajas de los tipos abstractos de datos


1. Permite una mejor conceptualizacion y modelado del mundo real.

TAD = Representacin (datos) + Operaciones (funciones y procedimientos)

2. Mejora la robustez del sistema.


3. Mejora el rendimiento.

La estructura de un tipo abstracto de dato (clase), desde un punto de


vista global, se compone del interfaz publico y de la implementacion.
Mtodo 1
Mtodo 3

4. Separa la implementacin de la especificacin.


5. Permite la extensibilidad del sistema.

Mtodo 2
Mtodo 4

Interfaz pblico

Figura. Estructura de un TAD

La abstraccin define el dominio y estructura de los datos, junto con una


coleccin o conjunto de operaciones que acceden a los datos.

Representacin:
Estructuras de datos
(variables de instancia)

La idea fundamental de la abstraccin de datos conduce a la separacin


de la especificacin de una estructura de datos (lo que hace) de la
implementacin (como lo hace). Esta idea se representa en el tipo
abstracto de dato.

Implementacin de mtodos:
Cdigo del mtodo 1
Cdigo del mtodo 2
Cdigo del mtodo 3
Cdigo del mtodo 4
M. Sc. Ing. Lucas Coaquira Cano
Implementacin
privada

13

Una descripcin de un TAD incluye una cabecera con el nombre del TAD, una
descripcin del tipo de datos y una lista de operaciones

TAD Nombre_TAD es
Datos
Describir la estructura de los datos.
Operaciones
Constructor
Valores iniciales: Datos utilizados para iniciar objeto
Proceso
: Iniciar el objeto
Operacin
Entrada
: Datos del cliente
Precondiciones
: Estado necesario del sistema antes
de ejecutar la accin

Operacin2
...
Operacin3
...
Fin TAD Nombre_TAD

: Acciones ejecutadas con los datos


: Estado del sistema despus de
ejecutar la operacin.
...
...

M. Sc. Ing. Lucas Coaquira Cano

M. Sc. Ing. Lucas Coaquira Cano

14

Ejemplo de TAD
Describir el TAD Circulo (conjunto de puntos equidistante de un punto llamado
centro). Incluye operaciones de calcular la longitud de la circunferencia y el rea
del crculo.

Formato de un TAD

Salida
Postcondiciones

1.5.2 Abstraccin de datos y TAD

15

TAD Circulo es
Datos
Numero real no negativo que especifica radio de circulo
Operaciones
Constructor
Valores iniciales: El radio del crculo
Proceso
: Asigna valor inicial al circulo
Area
Entrada
: Ninguna
Precondiciones
: Ninguna
Proceso
: Calculo del rea del circulo
Salida
: Devuelve el rea
Postcondiciones
: Ninguna
Circunferencia
Entrada
: Ninguna
Precondiciones
: Ninguna
Proceso
: Calcular la circunferencia
Salida
: Devuelve la circunferencia
Postcondiciones M. Sc. :Ing. Lucas
Ninguna
Coaquira Cano
16
Fin TAD Circulo

Lenguaje de programacion

18/04/2012

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

1.3 IMPLEMENTACION DE TIPOS ABSTRACTOS DE


DATOS EN C

Ejemplo: Z = 3 + 17i = (3, 17) es un numero complejo

TAD Nmeros complejos. Ejemplo TAD complejo

(1o) Si: Z = a + bi es un numero complejo

Definiciones:
Z = a bi es el complejo conjugado

NUMEROS COMPLEJOS

Z* = - a bi es el complejo opuesto

Son aquellos elementos del sistema los cuales se representan mediante:


Z = a + bi

(2o) Igualdad de nmeros complejos

Z = (a, b)

si: a + bi = m + ni a = m y b = n

El conjunto cumple con todos los axiomas de R con excepcin de la relacin de


orden.

(3o) Nulidad de nmeros complejos


si: a + bi = 0 a = 0 y b = 0

Donde:
a : Es la componente real

Potencias de i

b : Es la componente imaginaria

i1 i
1 i i 1
2

i : Es la unidad imaginaria establecida por:

i 2 1
i 3 i

Z : Es la variable compleja

i4 1

a + bi : Es el numero complejo
M. Sc. Ing. Lucas Coaquira Cano

17

(a, b) : Es el numero o par complejo

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

18

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

Algebra de los nmeros complejos:

1.4 IMPLEMENTACION DE TIPOS ABSTRACTOS DE


DATOS EN C++

Se realizan mediante los axiomas del conjunto R


Ejemplo:
Adicin:

(2+15i) + (3+8i) = (2+3) + (15+8)i = 5 + 23i

Sustraccin:

(5+7i) (9+2i) = (5 9) + (7 2)i = -4 + 5i

Multiplicacin:

(4+3i) (2+11i) = 8 + 44i + 6i + 33i = 8 + 50i 33 = -25 + 50i

Divisin:

m Lucas
En general : i 4 k 1, i 4 k 1 i 1M.
; Sc.
i 4 kIng.
i m Coaquira Cano

En C++ la herramienta de abstraccin de datos que permite la creacion de


nuevos tipos se denomina clase (class). Una clase es un tipo de dato que
incluye datos y operaciones que manipulan esos datos. La clase es la entidad
principal de los lenguajes de programacin orientados a objetos.

2
2

2
17 11i
4 5i 4 5i 3 i 12 4i 15i 5i

10 10
9 i2
3 i 3 i 3 i

Ejemplo: Clase complejo

Para dividir expresiones complejas, se expresa el cociente en forma de fraccin


y se racionaliza el denominador de esta fraccin, multiplicando ambos trminos
de la fraccin por la conjugada del denominador.
Si

Z = a + bi es un numero complejo
Z = a bi es el complejo conjugado

M. Sc. Ing. Lucas Coaquira Cano

19

M. Sc. Ing. Lucas Coaquira Cano

20

Lenguaje de programacion

18/04/2012

//Archivo: complejo.h
class complejo{
private:
float r, i;
public:
complejo nuevo_complejo(float x, float y);
float real(complejo c);
float imag(complejo c);
complejo sumar(complejo a, complejo b);
};

M. Sc. Ing. Lucas Coaquira Cano

21

//archivo: complejo.cpp
#include "complejo.h"
complejo complejo::nuevo_complejo(float x, float y)
{
complejo c;
c.r = x;
c.i = y;
return c;
}
float complejo::real(complejo c)
{
return c.r;
}
float complejo::imag(complejo c)
{
return c.i;
}
M. Sc. Ing. Lucas Coaquira Cano

22

//Archivo: Prueba.cpp
#include <iostream>
#include "complejo.h
using namespace std;
void main()
{
complejo x, y, z;

complejo complejo::sumar(complejo a, complejo b)


{
complejo c;
c.r = a.r + b.r;
c.i = a.i + b.i;

x = x.nuevo_complejo(4, 6);
y = y.nuevo_complejo(3, 5);

return c;

cout << "x= << ( << x.real(x) <<, << x.imag(x) << ) <<
endl;
cout << y= << ( << y.real(y) <<, << y.imag(y) << ) <<
endl;

z = z.sumar(x, y);
cout << "x+y= << ( << z.real(z) <<, << z.imag(z) << )
<< endl;
}
M. Sc. Ing. Lucas Coaquira Cano

23

M. Sc. Ing. Lucas Coaquira Cano

24

Lenguaje de programacion

18/04/2012

/*Tipo Abstracto de Datos en C*/


/*archivo: complejo.h*/
#ifndef COMPLEJO
#define COMPLEJO
typedef struct{
float r, i;
}complejo;
complejo nuevo_complejo(float x, float y);
float real(complejo c);
float imag(complejo c);
complejo sumar(complejo a, complejo b);
#endif
M. Sc. Ing. Lucas Coaquira Cano

25

complejo sumar(complejo a, complejo b)


{
complejo c;
c.r = a.r + b.r;
c.i = a.i + b.i;
return c;
}

26

complejo multiplicar(complejo a, complejo b)


{
complejo c;
c.r = a.r * b.r - a.i * b.i;
c.i = a.r * b.i + a.i * b.r;
return c;

complejo restar(complejo a, complejo b)


{
complejo c;
c.r = a.r - b.r;
c.i = a.i - b.i;
return c;
}

}
complejo dividir(complejo a, complejo b)
{
complejo c;
float denom = b.r * b.r + b.i * b.i;
c.r = (a.r * b.r + a.i * b.i)/denom;
c.i = (a.i * b.r - a.r * b.i)/denom;

int igual(complejo a, complejo b)


{
return (a.r == b.r && a.i == b.i);
}
M. Sc. Ing. Lucas Coaquira Cano

/*archivo: complejo.c*/
#include "complejo.h"
complejo nuevo_complejo(float x, float y)
{
complejo c;
c.r = x;
c.i = y;
return c;
}
float real(complejo c)
{
return c.r;
}
float imag(complejo c)
{
return c.i;
}
M. Sc. Ing. Lucas Coaquira Cano

return c;
}
27

M. Sc. Ing. Lucas Coaquira Cano

28

Lenguaje de programacion

18/04/2012

/*archivo: prueba.c*/
#include <cstdio>
#include "complejo.h"
void main()
{
complejo x, y, z;

1.5 IMPLEMENTACION DE TIPOS ABSTRACTOS DE


DATOS EN JAVA
//Archivo Complejo.java
public class Complejo{
private double r, i;
Complejo(double x, double y)
{
r = x;
i = y;
}

x = nuevo_complejo(2, 3);
y = nuevo_complejo(4, 5);
printf("x = (%f, %f)\n", real(x), imag(x));
printf("y = (%f, %f)\n", real(y), imag(y));

public double real() {


return r;
}

z = sumar(x, y);
printf("(x + y) = (%f, %f)\n", real(z), imag(z));
}
M. Sc. Ing. Lucas Coaquira Cano

29

public static Complejo suma(Complejo x, Complejo y)


{
Complejo temp = new Complejo(0, 0);
temp.r = x.r + y.r;
temp.i = x.i + y.i;
return temp;
}

M. Sc. Ing. Lucas Coaquira Cano

30

//Archivo: Prueba.java
public class Prueba {
public static void main(String args[])
{
Complejo a = new Complejo(40,56);
Complejo b = new Complejo(10,12);
Complejo c = new Complejo(0, 0);
c = Complejo.suma(a, b);
System.out.println("a + b = (" + c.real() + " ," + c.imag() + ")");
}
}

M. Sc. Ing. Lucas Coaquira Cano

public double imag(){


return i;
}

31

M. Sc. Ing. Lucas Coaquira Cano

32

Lenguaje de programacion

18/04/2012

#ifndef COMPLEJO2
#define COMPLEJO2
class complejo{
private:
float r, i;
public:
complejo nuevo_complejo(float x, float y);
float real(complejo c);
float imag(complejo c);
complejo sumar(complejo a, complejo b);
complejo restar(complejo a, complejo b);
complejo multiplicar(complejo a, complejo b);
complejo dividir(complejo a, complejo b);
};
#endif
M. Sc. Ing. Lucas Coaquira Cano

33

//archivo: complejo2.cpp
#include "complejo2.h"
complejo complejo::nuevo_complejo(float x, float y)
{
complejo c;
c.r = x;
c.i = y;
return c;
}
float complejo::real(complejo c)
{
return c.r;
}
float complejo::imag(complejo c)
{
return c.i;
M. Sc. Ing. Lucas Coaquira Cano
}

complejo complejo::sumar(complejo a, complejo b)


{
complejo c;
c.r = a.r + b.r;
c.i = a.i + b.i;
return c;
}

complejo complejo::multiplicar(complejo a, complejo b)


{
complejo c;
c.r = a.r * b.r - a.i * b.i;
c.i = a.r * b.i + a.i * b.r;
return c;
}

complejo complejo::restar(complejo a, complejo b)


{
complejo c;
c.r = a.r - b.r;
c.i = a.i - b.i;
return c;
}

complejo complejo::dividir(complejo a, complejo b)


{
complejo c;
float denom = b.r * b.r + b.i * b.i;
c.r = (a.r * b.r + a.i * b.i) / denom;
c.i = (a.i * b.r - a.r * b.i) / denom;
return c;
M. Sc. Ing. Lucas Coaquira Cano
}

M. Sc. Ing. Lucas Coaquira Cano

35

34

36

Lenguaje de programacion

18/04/2012

#include "complejo2.h"
#include <iostream>
using namespace std;
void main()
{
complejo x, y, z;
float a, b, c, d;
cout << "Ingrese el primer numero complejo: ";
cin >> a >> b;
cout << "Ingrese el segundo numero complejo: ";
cin >> c >> d;
x = x.nuevo_complejo(a, b);
y = y.nuevo_complejo(c, d);
cout << "x= " << "(" << x.real(x) <<"," << x.imag(x) << ")" << endl;
cout << "y= " << "(" << y.real(y) <<"," << y.imag(y) << ")" << endl;
z = z.dividir(z.restar(z.dividir(x, y), x);
cout << "(x/y + x)/x = " << "(" << z.real(z) <<"," << z.imag(z) << ")" <<
endl;

M. Sc. Ing. Lucas Coaquira Cano

37

10

Anda mungkin juga menyukai