Вы находитесь на странице: 1из 53

PATRONES DE DISEO

2
Patrones
En las distintas actividades de la vida diaria
se reconocen patrones:
Trabajo
Vida familiar
Hobbies

Hardware
Hardware
Software
Poder rehusar componentes y
lograr un mantenimiento fcil.
Lograr un software flexible
habitualmente
Problema Solucin
Patrones de diseo
Los patrones de diseo son el esqueleto de las
soluciones a problemas comunes en el desarrollo
de software.
En otras palabras, brindan una solucin ya
probada y documentada a problemas de desarrollo
de software que estn sujetos a contextos
similares. Se debe tener presente los siguientes
elementos de un patrn: su nombre, el problema
(cuando aplicar un patrn), la solucin
(descripcin abstracta del problema) y las
consecuencias (costos y beneficios).

Patrones de diseo
Los principales objetivos de los patrones de
diseos son estandarizar o esquematizar la
forma en como hoy en da se realiza el diseo,
facilitar el aprendizaje de generaciones
venideras, presentar catlogos de elementos
que pueden volver a ser utilizados en los
sistemas de software, crear un vocabulario o
una manera de comunicacin entre los
diseadores, evitar la bsqueda de soluciones
a problemas resueltos anteriormente.
Patrones de diseo
Son descripciones de clases y objetos
relacionados que estn adaptados para
resolver un problema de diseo general en
un contexto determinado.
Erich Gamma, Richard Helm, John Vlissides
y Ralph Johnson
Patrones de diseo (definicin)
Patrones de diseo
.

Ingeniero
Resuelve problemas
Aplicando estndares
Las buenas soluciones permanecen, las malas se rechazan.
Los ingenieros deben conocer y saber aplicar los estndares conocidos
Se definen con un alto nivel de abstraccin.
Son independientes de los lenguajes de
programacin y de los detalles de
implementacin.
Los patrones promueven y facilitan la
reutilizacin de arquitecturas y diseos de
software que han demostrado su validez en
muchas aplicaciones.


Patrones de diseo
11
Arquitectura
1. Define la forma y la estructura de la
aplicacin de software.
2. Relacionada al propsito de la aplicacin.
3. Arquitectura de mdulos y sus
interconexiones
Patrones de diseo
Paquetes,
componentes,
clases
12
Evidencias de diseo errneo
Rigidez: problemas para insertar algn cambio.
Fragilidad: el software falla en muchos lugares al
insertar un cambio.
Inmovilidad: no se pueden rehusar partes del
proyecto.
Viscosidad:
De diseo: cuando se deben hacer cambios,
es ms fcil hacer cosas mal, que bien.
De entorno: entorno de desarrollo ineficiente


13
Cambios de requerimientos
Los cambios en un diseo de software, si no
fueron cambios previstos en el diseo original,
degradan el mismo. Incluyen dependencias.
Generalmente lo hacen ingenieros que no estaban
relacionados con la filosofa de diseo original.
Erich Gamma, Richard Helm, John
Vlissides y Ralph Johnson
Design Patterns.
1994

Patrones de diseo
Describe una estructura dentro de la cual
catalogar y describir patrones
Cataloga 23 patrones
Destaca estrategias y aproximaciones
basadas en el diseo de patrones
Patrones de diseo
No crearon los patrones descriptos en el
libro.
Los descubrieron como existentes dentro
de la comunidad del software
Patrones de diseo
Porque estudiar patrones de diseo
Reuso de soluciones de diseo.
Establecer terminologa comn.
Dan una perspectiva de alto nivel sobre el
anlisis y diseo.
Patrones de diseo
Patrn de diseo: proporciona un esquema
para refinar los subsistemas o componentes
de un sistema de software, o las relaciones
entre ellos. Describe estructuras repetitivas
de comunicacin de componentes que
resuelven un problema de diseo en un
contexto particular
Que resuelve un patrn de
diseo?
Programe para una interfaz, no para una
implementacin.

Comience cualquier jerarqua que necesite para
solucionar su problema con una clase abstracta, sin
implementacin de mtodos. Que solo describa los
mtodos que debe soportar.
Patrones de diseo
20
Favorecer la composicin frente a la herencia
de clases.

Construir objetos que contengan otros
objetos. No cargue con todo el peso de
heredar mtodos que no necesita
Patrones de diseo
21
Encuentre lo que vara y encapslelo.

Patrones de diseo
Lo que puede ser
cambiado en su diseo
encapslelo en una clase ,
para no tener necesidad
de redisear.
Patrones de diseo
Herencia de clases
Ventajas
Se define estticamente
Fcil modificacin de la
implementacin

Desventajas
No se cambian implementaciones en
tiempo de ejecucin
Rompe encapsulamiento
Composicin de objetos
Patrones de diseo
Ventajas
Se define dinmicamente
No se rompe encapsulamiento


Patrones de diseo
Que debera ser variable en su diseo
Que puede ser cambiado en su diseo, sin necesidad de redisear.
Encapsule lo que puede variar.
Distintos algoritmos de ordenacin de arreglos
Encapsule cada algoritmo en una clase
Manipular objetos en funcin de la interfaz
definida por la clase abstracta, de la cual
extiende, tiene dos ventajas:
Patrones de diseo
Los clientes no tienen que conocer los tipos
especficos de los objetos que usan, basta
con que estos cumplan con la interfaz que
esperan los clientes.
Patrones de diseo
Los clientes desconocen las clases que
implementan dichos objetos; slo conocen la
clase abstracta que define la interfaz.
27
1. Aceptarlos
2. Reconocerlos
3. Internalizarlos
Patrones de diseo
Clasificacin de patrones (GoF)

Patrones de creacin: Tratan de la inicializacin y
configuracin de clases y objetos.

Patrones estructurales: Tratan de desacoplar interfaz e
implementacin de clases y objetos.

Patrones de comportamiento: Tratan de las interacciones
dinmicas entre sociedades de clases y objetos
Patrones de creacin
The Factory Method retorna una de las posibles subclases de
una clase abstracta dependiendo de los datos que se le provee.
The Abstract Factory Method retorna una de las varias
familias de objetos.
The Builder Pattern separa la construccin de un objeto
complejo de su representacin. Varias representaciones se
pueden crear dependiendo de las necesidades del programa.
The Prototype Pattern inicializa e instancia una clase y luego
copia o clona si necesita otras instancias, mas que crear nuevas
instancias.
The Singleton Pattern es una clase de la cual no puede existir
mas de una instancia.
30
Patrones estructurales
Adapter: cambia la interfaz de una clase a la de otra.
Bridge: permite mantener constante la interfaz que se
presenta al cliente, cambiando la clase que se usa
Composite: una coleccin de objetos
Decorator: una clase que envuelve a una clase dndole
nuevas capacidades.
Facade: rene una jerarqua compleja de objetos y provee
una clase nueva permitiendo acceder a cualquiera de las
clases de la jerarqua.
Flyweight: permite limitar la proliferacin de pequeas
clases similares.
31
Patrones de comportamiento
Cadena de responsabilidad: permite que un conjunto de
clases intenten manejar un requerimiento.
Interpreter: define una gramtica de un lenguaje y usa esa
gramtica para interpretar sentencias del lenguaje.
Iterator: permite recorrer una estructura de datos sin conocer
detalles de cmo estn implementados los datos
Observer: algunos objetos reflejan un cambio a raz del
cambio de otro, por lo tanto se le debe comunicar el cambio
de este ltimo.
Strategy: cantidad de algoritmos relacionados encerrados en
un contexto a travs del cual se selecciona uno de los
algoritmos.

Otros tipos de patrones
Patrones de programacin concurrente
Patrones de interfaz grfica
Patrones de organizacin de cdigo
Patrones de optimizacin de cdigo
Patrones de robustez de cdigo
Patrones de fases de prueba

Plantilla GoF

Nombre Un buen nombre es vital porque ser parte del vocabulario de
diseo
Nombres Alternativos Otros nombres de uso comn para el patrn.
Propsito Qu problema pretende solucionar.
Motivacin Descripcin del problema y su contexto
Puede consistir en un ejemplo (un escenario) que ilustre la clase
de problemas que el patrn intenta resolver.
En general se entienden mejor los problemas concretos que los
abstractos.
Estructura Representacin grfica de las clases de los objetos que
participan en el patrn y de sus relaciones estructurales (estticas)
Actualmente, lo ms comn es usar UML.

Aplicabilidad En qu situaciones puede/debe aplicarse el patrn?
Participantes Las clases y objetos que participan en el patrn y sus
responsabilidades o roles
Consecuencias Qu efectos positivos y negativos implica el uso del
patrn?
Cules son los compromisos de diseo que implica su uso?
Qu aspectos de la estructura del sistema pueden variar de forma independiente?
Colaboracin Cmo colaboran los participantes para llevar a cabo
sus responsabilidades y proporcionar el comportamiento deseado






Plantilla GoF
Usos conocidos Al menos dos ejemplos de uso del patrn en aplicaciones
reales.
Implementacin Cmo puede implementarse el patrn en un lenguaje
de programacin?
Qu dificultades implica?
Hay aspectos dependientes del lenguaje de programacin?
Cdigo de ejemplo Fragmentos de cdigo que ilustren cmo se
implementa el patrn en uno o varios lenguajes de programacin
Patrones relacionados Cules son los patrones ms estrechamente
relacionados con el dado?
Se usa en conjuncin con otros patrones? De qu
manera?


Plantilla GoF
36
Singleton
37
public final class Singleton {
private final static Singleton singleton = new
Singleton();

private Singleton(){
System.err.println( "Objeto Singleton creado." );
}
public static Singleton
obtenerInstanciaSingleton()
{return singleton; }
}

38
public class PruebaSingleton {
// ejecutar ejemplo Singleton
public static void main( String args[] )
Singleton primerSingleton;
Singleton segundoSingleton;
primerSingleton = Singleton.obtenerInstanciaSingleton()
segundoSingleton = Singleton.obtenerInstanciaSingleton();
if ( primerSingleton == segundoSingleton )
System.err.println( "primerSingleton y segundoSingleton
" + "se refieren al mismo objeto Singleton" ); }}
39
Estrategia
40
public class Context {
Strategy strategy=null;
public Context(Strategy strategy) {
this.strategy = strategy;}
public int realizarOperacion(){
return this.strategy.calcular();}}

public interface Strategy {
int calcular();}

Estrategia
41
public class ConcreteStrategyOne implements
Strategy{ public int calcular() {return 1; }}

public class ConcreteStrategyTwo implements
Strategy {public int calcular() {return 2;}}

public class ConcreteStrategyThree implements
Strategy {public int calcular() {return 3;}}
Estrategia
42
Observer
43
abstract public class Sujeto {
protected Observador []observan;
public Sujeto (){observan = new Observador[10];}
abstract public Observador adscribir (Observador e);
abstract public Observador quitar (Observador e);
abstract public void registra(Observador e);

}

Observer
44
public class Sensor extends Sujeto {
private double valor;
int pos;
public Sensor (){}
public double getValor(){return valor;}
public Observador adscribir (Observador e){
observan[pos]=e;
pos++; return e;}

Observer
45
public Observador quitar (Observador e){
int indice=0;
for(int j=0; j<=observan.length;j++)
while(j<=observan.length) {
if(observan[j].equals(e))
observan[j]=null;
else System.out.println("No encontre el elemento");
} return e;
}
public void registra(Observador o) {
observan[pos]=o; }}


Observer
Beneficios de los patrones
Los patrones favorecen la reutilizacin de diseos y
arquitecturas a gran escala.
Capturan el conocimiento de los expertos y lo hacen
accesible a toda la comunidad software.
Proporcionan un cuerpo de conocimiento utilizable por
toda la comunidad software.
Favorecen la transmisin de conocimiento entre
profesionales y entre clientes y desarrolladores
Proporcionan un lenguaje comn. Los nombres de los
patrones forman parte del vocabulario tcnico del
ingeniero software.

Problema de los patrones
Los patrones, no llevan de forma directa a la
reutilizacin del cdigo, aunque dicha
reutilizacin se facilita mediante su uso.
La integracin de los patrones en el proceso de
desarrollo se hace todava de forma manual.
El nmero de patrones identificados es cada vez
ms grande. Las clasificaciones actuales no
siempre sirven de gua para decidir cual usar.



El nmero de combinaciones patrones estilos y
atributos que se dan en la prctica son incontables.
Los patrones se validan por la experiencia y el
debate, no mediante la aplicacin de tcnicas
formales
Problema de los patrones
Cmo seleccionar un patrn de diseo
Considerar cmo los patrones de diseo
solucionan problemas de diseo.
Buscar las intenciones de cada patrn.
Estudiar cmo se interrelacionan los patrones.
Estudiar patrones de propsito similar.
Examinar la causa de un rediseo.
Considerar que debera ser variable en un diseo.
Cmo usar un patrn de diseo
1. Leer el patrn una vez para tener una visin
general
2. Volver y estudiar la estructura, los participantes
y las colaboraciones
3. Ver un ejemplo concreto codificado del patrn
4. Elegir nombres para los participantes del patrn
que sean significativos en el contexto de la
aplicacin

5. Definir las clases
6. Definir nombres especficos de la aplicacin
para las operaciones en el patrn.
7. Implementar las operaciones que realizarn
las responsabilidades y colaboraciones del
patrn.



Cmo usar un patrn de diseo
Problema a resolver
Existe un archivo de texto, el que se debe leer
en distintos momentos y bajo condiciones
variables.

Como lo resuelvo?
Problema a resolver
Leer solo las palabras que comiencen con t
Leer las palabras de ms de 5 caracteres
Leer los palndromos
Varia la estrategia de lectura
Encapsular