Professional Documents
Culture Documents
Franco Guidi Polanco (PUCV-EII) 02/08/2007 3 Franco Guidi Polanco (PUCV-EII) 02/08/2007 4
El Desarrollo de Proyectos Metodologas y Modelos
Franco Guidi Polanco (PUCV-EII) 02/08/2007 5 Franco Guidi Polanco (PUCV-EII) 02/08/2007 6
Cecilia Serrano
(Miss Chile 1979) Divide et Impera: Descomposicin Funcional
Divide et Impera
The Beatles
Descomposicin en funciones:
el analista descompone el
Grease
problema en una serie de pasos
que permiten resolverlo.
Franco Guidi Polanco (PUCV-EII) 02/08/2007 9 Franco Guidi Polanco (PUCV-EII) 02/08/2007 10
Franco Guidi Polanco (PUCV-EII) 02/08/2007 11 Franco Guidi Polanco (PUCV-EII) 02/08/2007 12
Reutilizacin antes de la POO: Tipos Abstractos de
Lenguajes de Programacin
Datos
Antes de la POO los lenguajes de programacin
eran procedimentales.
Aproximacin: NOTA:
NO LO INTENTE
ADT Tipo de dato
(No provisto por
+ Operaciones
(Abstract
Imagine
Data Type) el lenguaje de
programar en programacin)
Java, usando
slo mtodos Por separado, pero asociadas.
estticos, con
instancias de
clases que no
tengan mtodos.
Franco Guidi Polanco (PUCV-EII) 02/08/2007 13 Franco Guidi Polanco (PUCV-EII) 02/08/2007 14
El modelo de programacin OO
provee delegacin de
responsabilidades:
Franco Guidi Polanco (PUCV-EII) 02/08/2007 17 Franco Guidi Polanco (PUCV-EII) 02/08/2007 18
Una buena forma de concebir un objeto es pensar en l Martin Fowler identifica tres perspectivas para describir los
como una entidad con responsabilidades. Las objetos:
responsabilidades determinan el comportamiento del
objeto. Nivel conceptual: un objeto es un conjunto de responsabilidades.
Debe existir una forma para comunicar a un objeto qu
debe hacer. Nivel especificacin: un objeto es un
conjunto de mtodos
Esta comunicacin se logra por medio del conjunto de (comportamientos), que pueden ser
mtodos que un objeto ofrece para que otros puedan invocados por otros objetos o por si
invocar. mismos.
El conjunto de estos mtodos se denomina interfaz pblica
Nivel implementacin: un objeto es
del objeto.
cdigo y datos, e interacciones
computaconales entre ellos.
Martin Fowler
Franco Guidi Polanco (PUCV-EII) 02/08/2007 19 Franco Guidi Polanco (PUCV-EII) 02/08/2007 20
Perspectivas para Describir Sistemas OO Perspectivas para Describir Sistemas OO: Ejemplo
Diseo (Lenguajes de
Nivel Especificacin modelamiento e.g. UML)
Nivel Conceptual
Nivel Implementacin
Franco Guidi Polanco (PUCV-EII) 02/08/2007 21 Franco Guidi Polanco (PUCV-EII) 02/08/2007 22
Curso:
Clase Curso:
Mantener datos de un curso (nombre)
Mantener la lista de los alumnos que se inscriben en el curso, public setNombre(nombre: String)
verificando que estos no se repitan al momento de agregarlos. public addAlumno(alumno:Alumno):boolean
Retornar alumnos, buscndolos por rol del alumno. public getAlumno(rol: String):Alumno
Franco Guidi Polanco (PUCV-EII) 02/08/2007 23 Franco Guidi Polanco (PUCV-EII) 02/08/2007 24
Es necesario tomar precauciones, si el anlisis
Ejemplo: Nivel Implementacin
inicial est bien hecho?
public class Alumno{
private String rol, nombre;
public void setRol(int numero, int verificador){
if( sumaDigitos(numero) == verificador )
Franco Guidi Polanco (PUCV-EII) 02/08/2007 25 Franco Guidi Polanco (PUCV-EII) 02/08/2007 26
Franco Guidi Polanco (PUCV-EII) 02/08/2007 27 Franco Guidi Polanco (PUCV-EII) 02/08/2007 28
Encapsulacin en la Implementacin de Mtodos Encapsulacin del Tipo
Ejemplo Ejemplo
El contexto de la public class LeonardoDaVinci{ El contexto de la
Banco
clase Banco no clase no tiene
Contexto private static LeonardoDaVinci instance;
+recibirCliente() tiene visibilidad de visibilidad de la
+atenderSiguiente() las clases que
private LeonardoDaVinci(){} lgica de
soportan sus public static LeonardoDaVinci getLeonardo(){ instanciacin de
if( instance == null ) objetos
operaciones. instance = new LeonardoDaVinci();
Cola Cajero } LeonardoDaVinci.
Consecuencia: return instance;
Puede modificarse } Consecuencias?
+agregar() +atender() public String writeName(){
+sacar() la arquitectura return odranoeL;
del Banco sin }
...
afectar el contexto. }
Franco Guidi Polanco (PUCV-EII) 02/08/2007 31 Franco Guidi Polanco (PUCV-EII) 02/08/2007 32
Encapsulacin y Diseo Encapsulacin y Diseo
Franco Guidi Polanco (PUCV-EII) 02/08/2007 33 Franco Guidi Polanco (PUCV-EII) 02/08/2007 34
En el libro Object Oriented Software Sntomas de un mal diseo (cuando no se cumple este
Construction de 1988, Bertrand Meyer principio):
propuso el Open-Closed Principle (OCP) Al modificar un mdulo de software, los cambios se propagan a
otros mdulos.
Las entidades de software (clases, Por lo tanto:
mdulos, funciones, etc.) deberan Se deben disear mdulos que nunca cambiarn.
estar abiertos para extensin y Si los requerimientos cambian, se debe extender el comportamiento
cerrados para modificaciones. Bertrand Meyer de tales mdulos, agregando nuevo cdigo, no modificando aqul
existente.
En otras palabras, el software debe ser diseado para soportar la adicin La base de este principio est en los conceptos de:
de nuevas funcionalidades, sin que esto comporte modificaciones en
Abstraccin
aquellas existentes.
Polimorfismo
Franco Guidi Polanco (PUCV-EII) 02/08/2007 35 Franco Guidi Polanco (PUCV-EII) 02/08/2007 36
El principio abierto-cerrado El principio abierto-cerrado
Franco Guidi Polanco (PUCV-EII) 02/08/2007 37 Franco Guidi Polanco (PUCV-EII) 02/08/2007 38
}
Hay algo que decir respecto de las jerarquas de
herencia? (Veamos el principio de sustitucin de
Es posible agregar nuevos objetos a pintar (agregando una Liskov)
subclase de Personaje), sin modificar el cdigo ya existente
Franco Guidi Polanco (PUCV-EII) 02/08/2007 39 Franco Guidi Polanco (PUCV-EII) 02/08/2007 40
El principio de sustitucin de Liskov El principio de sustitucin de Liskov
Programador Vehculo
Las funciones que utilizan punteros
o referencias a clases de base, deben
ser capaces de utilizar subclases de Areo Terrestre
stas, sin necesidad de conocerlas
El LSP se violara ante la presencia de situaciones como la El Dependency Inversion Principle (DIP) establece cmo implementar
siguiente: los objetivos enunciados por el OCP y el LSP.
Kandinsky Klee
Franco Guidi Polanco (PUCV-EII) 02/08/2007 43 Franco Guidi Polanco (PUCV-EII) 02/08/2007 44
El principio de inversin de dependencia El principio de inversin de dependencia
Franco Guidi Polanco (PUCV-EII) 02/08/2007 45 Franco Guidi Polanco (PUCV-EII) 02/08/2007 46
Aqu s se cumple: Los objetos ofrecen una interfaz pblica por medio
public void copiar(Lector l, Escritor e){
de la cual otros objetos invocan sus
while( !l.eof){ comportamientos.
byte b = l.leer();
e.escribir( b ); Los objetos son inherentemente reactivos: su
}
} comportamiento es gatillado por la accin (externa)
de otro objeto.
Copiador Nuevo paradigma: agentes de software.
Franco Guidi Polanco (PUCV-EII) 02/08/2007 47 Franco Guidi Polanco (PUCV-EII) 02/08/2007 48