Beruflich Dokumente
Kultur Dokumente
Diseo
Introduccin
Introduccin Alguien ha
resuelto tus problemas
El por qu y el cmo puedes explotar las sabidura
y lecciones aprendidas por otros desarrolladores
que han pasado por los mismos problemas de
diseo y han sobrevivido
Beneficios de los patrones de diseo
Veremos algunos principios OO clave
La mejor manera de usar patrones es cargarlos
en tu mente y reconocer lugares en tu diseo y en
aplicaciones existentes donde poder aplicarlos
No se reutiliza cdigo, se reutiliza experiencia
Todo empieza con un simple
juego
Joe trabaja para una
compaa que se dedica a
crear juegos de simulacin
de estanques de pato
El juego muestra una gran
variedad de especies,
nadando y haciendo
graznidos
El diseador inicial del
sistema utiliz tcnicas
estndares OO y cre una
superclase Pato de la cual
las subclases de Pato
heredan
Todo empieza con un simple
juego
Caso
En el ltimo ao, la compaa ha tenido
bastante presin debido a sus competidores
Despus de una lluvia de ideas, los ejecutivos
de la compaa piensan que es hora de
innovar
Ellos necesita algo realmente sorprendente
para mostrar en la reunin de inversionistas la
prxima semana
Ahora necesitamos que los
patos VUELEN
Los ejecutivos decidieron que patos volando
es justamente lo que esta aplicacin necesita
para vencer a sus competidores
Y por supuesto, la jefa de Joe les dijo que no
era problema para Joe, y que terminara en
una semana
Despus de todo dijo la jefa Joe es un
programador OO Qu tan difcil puede
ser?
Ahora necesitamos que los
patos VUELEN
Solo necesito aadir un
nuevo mtodo llamado Volar
a Pato y los dems
heredarn automticamente.
Ahora necesitamos que los
patos VUELEN
Pero algo sali terriblemente
mal
Joe, estoy en la reunin de
inversionistas, estamos
revisando el juego, y hay
Patos de Goma volando por
todos lados. Es una broma o
que?
Qu pas?
Joe nunca not que no todas las subclases de
pato deben Volar
Cuando Joe agreg nuevo comportamiento a la
superclase, tambin estaba agregando
comportamiento no apropiado a las subclases
Ahora tiene objetos inertes volando en el juego
Una actualizacin localizada al cdigo caus
un efecto secundario no local (patos de goma
voladores)
Qu pas?
Patos de goma no
graznan, el
comportamiento es
sobrescrito a Chillar
Qu pas?
Lo que l pens que
era un buen uso de
herencia con el
propsito de
reutilizacin no
result tan bueno
cuando lidiamos con
mantenimiento
OK, hay una pequea
falla en mi diseo. No
se por qu no le
pueden llamar una
nueva funcin. Es
simptico
Joe piensa en herencia
PatoGoma
Mostrar(){
//Muestra un pato de goma
}
Graznar(){
//Sobrescribir a Chillar
}
Volar(){
//No hacer nada
}
Joe piensa en herencia
Pero que pasara si
aumentamos patos
seuelo de madera en
el futuro. Ellos no
vuelan ni graznan
Ejercicio
A. El cdigo se duplica en las subclases
B. Cambios en tiempo de ejecucin son difciles
C. No podemos hacer que los patos bailen
D. Se complica obtener conocimiento del comportamiento de
todos los patos
E. Los patos no pueden volar y graznar al mismo tiempo
F. Los cambios en el cdigo podran afectar a otros patos sin
intencin
De las siguientes opciones elija cules serian las desventajas de
utilizar herencia en el ejemplo anterior
Y si usamos una Interfaz?
Joe se dio cuenta de que la herencia probablemente no
era la respuesta
Recibi un memo de los ejecutivos diciendo que
quieren actualizar el producto cada seis meses (de
maneras que ellos an no han decidido)
Joe sabe que las especificaciones seguirn cambiando
y ser forzado a revisar y probablemente actualizar
Volar() y Graznar() por cada subclase de Pato que se
vaya a crear para siempre!
l necesita una manera ms limpia de hacer que
solamente algunos ( no todos) los tipos de patos vuelen
y graznen
Y si usamos una Interfaz?
Podra sacar el mtodo Volar()
de la superclase Pato y hacerla
una interfaz de esa manera
nicamente los patos que
quieran volar implementan la
interfaz y de paso hago otra
interfaz para Graznar ya que
no todos los patos graznan
Que opinas de este diseo?
Este es un pato de madera