Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Qu es mal diseo?
Rigidez: dificultad para introducir
cambios.
Fragilidad: efecto cascada.
Inmovilidad: reusabilidad dificultosa.
Agenda
Conceptos de Orientacin a Objetos
Principios de Diseo O-O
Orientacin a Objetos
Revisin de conceptos
Qu significa Orientado a
Objetos?
Un modelo es orientado a objetos cuando
est compuesto por un conjunto de
objetos que cooperan entre si envindose
mensajes. Dichos objetos pertenecen a
clases, las cuales pueden relacionarse
entre si por medio de la herencia.
Qu es un Objeto?
Un Objeto representa un tem o entidad
individual (ya sea conceptual o real) con
un rol bien definido en el dominio del
problema.
Procesos industriales
Redes de Computadoras
Objetos
Artculos, Facturas,
Ventas, Compras, Clientes,
Contratos, Crditos, etc.
Orden de Fabricacin,
Productos y piezas,
Mtodos, Mquinas, etc.
Nodos, Enlaces,
Protocolos, Dispositivos,
Usuarios, Permisos, etc.
Caracterizacin de un Objeto
Estado
Comportamiento
Identidad
Conjunto de instancias
Una Clase es un conjunto de objetos que
comparten caractersticas y
comportamientos comunes
Universidad Nacional Mayor de San Marcos
E.A.P. de Ingeniera de Software
Clase
Especificacin abstracta
Responsabilidades y Colaboraciones
Relaciones de uso
Relaciones estructurales
Agregacin o Composicin de Objetos
Mensajes
La nica forma de acceder a un objeto
es envindole un Mensaje.
Acceder
obtener informacin del objeto
solicitar la realizacin de una accin
Encapsulamiento
Encapsular significa
esconder todos los
detalles de
implementacin de
un objeto,
revelando
solamente aquello
que es necesario
conocer para hacer
uso del mismo.
Enviando mensajes
Objeto
Emisor
Mensaje
Objeto
Receptor
Mtodo
Emisor y Receptor
(cliente y servidor)
Selector y
Parmetros
Mtodo
Agrupando mtodos
Contratos
Protocolo
Contratos
Un contrato (o interfaz) define un
Contratos (cont.)
Un contrato es un conjunto cohesivo de
mtodos
Una clase puede implementar muchos
contratos
El mismo contrato puede ser implementado
por diferentes clases
Los contratos pueden especificarse
independientemente de las clases que los
implementan
Universidad Nacional Mayor de San Marcos
E.A.P. de Ingeniera de Software
Ejemplo
public interface Ordenable
{
public int comparar(Ordenable o);
}
class ClaseA implements Ordenable
{
// ... Otras declaraciones ...
public int comparar(Ordenable o)
{
// compara
}
}
class Sorter
{
// ... Otras declaraciones ...
public void shell_sort(Sortable[] a) {....}
public void quick_sort(Sortable[] a) {....}
public void bubble_sort(Sortable[] a)
}
Protocolo
El protocolo de una clase est formado
Polimorfismo
Desde el punto de vista del receptor:
Es la capacidad de diferentes objetos de
responder de diferente manera ante el mismo
mensaje.
Herencia
Permite definir nuevas clases en base a
clases ya existentes
La subclase extiende la superclase,
redefiniendo y/o agregando
propiedades.
Principio de Apertura y
Clausura
Las clases debieran estar abiertas para
Ejemplo
Figura
tipo
x
y
Circulo
radio
dibujarCirculo
Rectangulo
largo
ancho
dibujarrectangulo
class Figura
{
public:
TipoFigura tipo;
int
x, y;
};
};
Figura
x
y
dibujar
Circulo
radio
dibujar
Rectangulo
largo
ancho
dibujar
class Figura
{
public:
int x, y;
virtual void Dibujar() = 0;
};
};
usa
ClaseServidora
La abstraccin es la clave!
ClaseCliente
ServidorAbstracto
ServidorConcreto1
ServidorConcreto3
ServidorConcreto2
Clausura estratgica
Es imposible lograr la clausura absoluta
ante todo tipo de cambio
El diseador debe seleccionar los cambios
ante los que clausurar el diseo
Heursticas derivadas
Todas las variables de instancia deben ser
privadas
No utilizar variables globales
La comprobacin de tipos en tiempo de
ejecucin (ej: RTTI o tags) es peligrosa
Disear hacia la interfaz, no hacia la
implementacin
Universidad Nacional Mayor de San Marcos
E.A.P. de Ingeniera de Software
Para qu ocultar?
El problema del Acoplamiento
Dificultad para entender las dependencias
Rigidez, Fragilidad, Inmovilidad
Ejemplo
void Agenda::AniversariosDeHoy(Personas lista[], int n)
{
int i;
for(i = 0; i < n; i++)
{
Persona* p = lista[i];
Fecha*
f = P->darFechaNacimiento()
if(f->esHoy())
{
AgregarPersonaQueCumpleHoy(p);
}
}
};
Agenda
Persona
1
Fecha
1
Agenda
Persona
1
Fecha
1
Ejemplo
void AlgunaClase::HacerAlgoConUnTiempo(Tiempo t)
{
long horas, minutos, segundos;
long horaEnSegundos;
Tiempo
horas
minutos
segundos
darHoras
darMinutos
darSegundos
horas
= t->DarHoras();
minutos = t->DarMinutos();
segundos = t->DarSegundos();
horaEnSegundos = horas * 3600 + minutos * 60 + segundos;
Procesar(horaEnSegundos);
}
Procesar(horaEnSegundos);
}
long Tiempo::DarHoraEnSegundos()
{
return horas * 3600 + minutos * 60 + segundos;
}
Tiempo
horas
minutos
segundos
darHoras
darMinutos
darSegundos
darHoraEnSegundos
Principio de Substitucin
Las funciones que usan referencias a
Ejemplo
Rectangulo
Cuadrado
class Rectangulo
{
private:
long alto, largo;
public:
virtual void AsignarAlto(float a) { alto = a; }
virtual float DarAlto()
{ return alto; }
virtual void AsignarLargo(float l) { largo = l; }
virtual float DarLargo()
{ return largo; }
};
void AsignarAlto(float a)
{
Rectangulo::AsignarAlto(a);
Rectangulo::AsignarLargo(a);
}
void AsignarLargo(float l)
{
Rectangulo::AsignarAlto(l);
Rectangulo::AsignarLargo(l);
}
Universidad Nacional Mayor de San Marcos
E.A.P. de Ingeniera de Software
void test(Rectangulo* r)
{
r->AsignarAlto(5);
r->AsignarLargo(4);
float superficie = r->DarAlto() * r->DarLargo();
if(superficie != 20)
{
MostrarError();
}
}
void main()
{
Rectangulo* r = new Rectangulo;
Cuadrado*
c = new Cuadrado;
test(r);
test(c);
}
Universidad Nacional Mayor de San Marcos
E.A.P. de Ingeniera de Software
Principio de Inversin de la
Dependencia
Las clases de alto nivel no debieran
Ejemplo
Copiador
Teclado
Impresora
Copiador
Reader
Teclado
Scanner
Writer
Disco
Impresora
class Reader
{
public:
virtual char LeerCaracter() = 0;
}
class Writer
{
public:
virtual void EscribirCaracter(char c) = 0;
}
Universidad Nacional Mayor de San Marcos
E.A.P. de Ingeniera de Software
Pantalla
Estratificacin
PoliticasGlobales
Mecanismos intermedios
Estratificacin + Abstraccin
PoliticasGlobales
Mecanismos abstractos
Mecanismos intermedios
Utilidades abstractas
Principio de la Segregacin de
las Interfaces
Los clientes de una clase no debieran ser
forzados a depender de interfaces que no
utilizan
Clase B
Clase C
Solucin:
Clase B
Contrato B
Contrato C
Clase A
Clase C
En sintesis:
Diferentes clientes implican interfaces
separadas
Ejemplo
Diagrama
InspectorPosicional
InspectorDeFiguras
InspectorPosicional
InformadorPosicional
InspectorDeFiguras
InformadorDeFiguras
Diagrama
Principio de la Dependencia
Acclica
La estructura de dependencias entre
Modulo:
Conjunto de clases relacionadas, que se
puede tratar como una unidad.
Paquete A
Paquete B
Ejemplo
Aplicacion
Ventanas
de Mensajes
Ventanas
de Tareas
Tareas
Base de
Datos
Utilidades
Ventanas
Cajas de
Dialogo
Aplicacion
Ventanas
de Mensajes
Ventanas
de Tareas
Tareas
Base de
Datos
Utilidades
Ventanas
Cajas de
Dialogo
Cajas de Dialogo
Clase X
Cajas de Dialogo
Clase X
Clase Abstracta Y
Aplicacion
Clase Y
Aplicacion
Clase Y
o2:C3
estado o2
ops3 ()
Universidad Nacional Mayor de San Marcos
E.A.P. de Ingeniera de Software
o6:C1
estado o6
ops1 ()
o5:C5
estado o5
ops5 ()
3
Programacin Orientado
a Objetos.
Elaborar un diseo
de software usando un lenguaje
de programacin
Tal como: JAVA, C++ u otro
a Objetos.
Desarrollo de un modelo
Orientado a objetos de un
sistema de Software,
para implementar los
requerimientos
Supervisor
OBJETOS CONCURRENTES
Conceptualmente, un objeto requiere un servicio de otro pero enviando una peticin de
servicio o mensaje a ese objeto. Al no existir alguna forma de requerimiento para la
ejecucin serial el modelo general de la interaccin permite a los objetos ejecutarse
concurrentemente como procesos paralelos.
o1:C1
estado o1
ops1 ()
Objetos ejecutndose
en la misma mquina
u objetos distribuidos
ejecutndose
en
diferentes mquinas
o2:C2
estado o2
ops2 ()
on:Cn
estado on
Universidad Nacional Mayor de San Marcos
opsn ()
E.A.P. de Ingeniera de Software
CONCURRENCIA
ok:Ck
estado ok
opsk ()
OBJETOS CONCURRENTES
En la prctica, la mayora de los lenguajes de programacin tienen por omisin
un modelo de ejecucin serial de tal forma que las ejecuciones para los servicios
del objeto se implementan en la misma forma que las llamadas a las funciones.
Logrando con ello suspender la llamada a tal objeto.
Sin embargo, Java y C++ proporcionan un mecanismo llamado Thread (Hilos),
que permite la ejecucin de objetos de forma concurrente.
TIPOS DE
IMPLEMENTACIN
DE OBJETOS
CONCURRENTES
UN PROCESO DE DISEO
ORIENTADO A OBJETOS
Un sistema de registro del clima es necesario con el fin de generar mapas
climatolgicos haciendo uso de datos recabados de estaciones climatolgicas
lejanas y desatendidas, adems de otras fuentes de datos tales como:
observadores climatolgicos e informacin va satlite. Las estaciones
climatolgicas transmiten sus datos a la computadora en respuesta a las
peticiones de esa mquina.
DISEO DE LA ARQUITECTURA
Subsistema
Desplegado de los datos
Subsistema
Almacenamiento de datos
Subsistema
Procesamiento de datos
Subsistema
Coleccin de datos
PAQUETES DE UML
En la figura anterior se han mostrado las capas y se ha incluido el nombre de la capa en un
smbolo de paquete de UML que se ha denotado como un subsistema. Un paquete de UML
representa una coleccin de objetos y otros paquetes. Se verifica que cada capa incluye un
nmero determinado de otros componentes.
Subsistema de
Coleccin de datos
Subsistema de
desplegado de datos
Observador
Satlite
Interfaz de
usuario
Mapa de
desplegado
Comms
Estacin
climatolgica
Mapa de
impresin
Mapa
Ballon
Subsistema
Almacenamiento de datos
Subsistema de
Procesamiento de datos
Checar
datos
Almacenamiento
de datos
Integracin
de datos
Almacenamiento
de mapas
Almacenamiento
de datos