18/04/2012
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
Seccin
privada
Interfaz
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
Muchos
interfaces
Lenguaje de programacion
18/04/2012
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.
LENGUAJE DE PROGRAMACION
LENGUAJE DE PROGRAMACION
Tipo de cohesin
Grado de cohesin
Por coincidencia
Lgica
Por procedimientos
Por comunicaciones
Secuencial
Funcional
Informacional
Bajo
Alto
Grado de mantenimiento
Bajo
Alto
Tipo de acoplamiento
Grado de acoplamiento
Grado de mantenibilidad
Por contenido
Comn
De control
Por sellado (estampado)
Datos
Sin acoplamiento
Alto (fuerte)
Bajo
Bajo (dbil)
M. Sc. Ing. Lucas Coaquira Cano
Representacin + Operaciones
Alto
7
Lenguaje de programacion
18/04/2012
Abstraccin
Propiedad que permite representar las caractersticas mas esenciales de un
objeto, sin preocuparse de las restantes caractersticas (no esenciales).
10
11
12
Lenguaje de programacion
18/04/2012
Mtodo 2
Mtodo 4
Interfaz pblico
Representacin:
Estructuras de datos
(variables de instancia)
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
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
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
Definiciones:
Z = a bi es el complejo conjugado
NUMEROS COMPLEJOS
Z* = - a bi es el complejo opuesto
Z = (a, b)
si: a + bi = m + ni a = m y b = n
Donde:
a : Es la componente real
Potencias de i
b : Es la componente imaginaria
i1 i
1 i i 1
2
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
18
Sustraccin:
Multiplicacin:
Divisin:
m Lucas
En general : i 4 k 1, i 4 k 1 i 1M.
; Sc.
i 4 kIng.
i m Coaquira Cano
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
Z = a + bi es un numero complejo
Z = a bi es el complejo conjugado
19
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);
};
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;
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
24
Lenguaje de programacion
18/04/2012
25
26
}
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;
/*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
28
Lenguaje de programacion
18/04/2012
/*archivo: prueba.c*/
#include <cstdio>
#include "complejo.h"
void main()
{
complejo x, y, z;
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));
z = sumar(x, y);
printf("(x + y) = (%f, %f)\n", real(z), imag(z));
}
M. Sc. Ing. Lucas Coaquira Cano
29
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() + ")");
}
}
31
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
}
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;
37
10