Patronesdiseño
Patronesdiseño
se reconocen patrones:
Trabajo
Vida familiar
Hobbies
2
Hardware
habitualmente
Hardware Software
Patrones de diseño
“Son descripciones de clases y objetos
relacionados que están adaptados para resolver
un problema de diseño general en un contexto
determinado”.
Erich Gamma, Richard Helm, John Vlissides y
Ralph Johnson
Ingeniero Resuelve problemas
Aplicando estándares
Paquetes,
Patrones de diseño componentes,
clases
9
Rigidez: problemas para insertar algún
cambio.
Fragilidad: el software falla en muchos
lugares al insertar un cambio.
Inmovilidad: no se pueden rehusar partes del
proyecto.
Viscosidad:
De diseño: cuando se deben hacer cambios,
es más fácil hacer cosas mal, que bien.
De entorno: entorno de desarrollo ineficiente
10
Los cambios en un diseño de software, si no
fueron cambios previstos en el diseño original,
degradan el mismo. Incluyen dependencias.
Generalmente lo hacen ingenieros que no
estaban relacionados con la filosofía de diseño
original.
11
ErichGamma, Richard Helm, John Vlissides y
Ralph Johnson
Design Patterns.
1994
Describe una estructura dentro de la cual
catalogar y describir patrones
Cataloga 23 patrones
Destaca estrategias y aproximaciones basadas en
el diseño de patrones
No crearon los patrones descriptos en el libro.
Los descubrieron como existentes dentro de la
comunidad del software
Porque estudiar patrones de diseño
Reuso de soluciones de diseño.
Establecer terminología común.
Dan una perspectiva de alto nivel sobre el
análisis y diseño.
Patrónde diseño: proporciona un esquema
para refinar los subsistemas o componentes
de un sistema de software, o las relaciones
entre ellos. Describe estructuras repetitivas
de comunicación de componentes que
resuelven un problema de diseño en un
contexto particular
Programe para una interfaz, no para una
implementación.
18
Encuentre lo que varía y encapsúlelo.
19
Herencia de clases
Ventajas Desventajas
•Se define estáticamente •No se cambian implementaciones en
•Fácil modificación de la tiempo de ejecución
implementación •Rompe encapsulamiento
Composición de objetos
Ventajas
•Se define dinámicamente
•No se rompe encapsulamiento
Que debería ser variable en su diseño
25
Patrones de creación: Tratan de la inicialización y
configuración de clases y objetos.
28
Cadena de responsabilidad: permite que un conjunto
de clases intenten manejar un requerimiento.
Interpreter: define una gramática de un lenguaje y usa
esa gramática para interpretar sentencias del lenguaje.
Iterator: permite recorrer una estructura de datos sin
conocer detalles de cómo están implementados los
datos
Observer: algunos objetos reflejan un cambio a raíz 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 través del cual se
selecciona uno de los algoritmos.
29
Patrones de programación concurrente
Patrones de interfaz gráfica
Patrones de organización de código
Patrones de optimización de código
Patrones de robustez de código
Patrones de fases de prueba
Nombre Un buen nombre es vital porque será parte del vocabulario
de diseño
private Singleton(){
System.err.println( "Objeto Singleton
creado." ); }
public static Singleton
obtenerInstanciaSingleton()
{return singleton; }
}
35
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" ); }}
36
37
public class Context {
Strategy strategy=null;
public Context(Strategy strategy) {
this.strategy = strategy;}
public int realizarOperacion(){
return this.strategy.calcular();}}
38
public class ConcreteStrategyOne implements Strategy{
public int calcular() {return 1; }}
39
40
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);
41
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;}
42
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; }}
43
Los patrones favorecen la reutilización de diseños 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 transmisión de conocimiento entre
profesionales y entre clientes y desarrolladores
Proporcionan un lenguaje común. Los nombres de los
patrones forman parte del vocabulario técnico del
ingeniero software.
Los patrones, no llevan de forma directa a
la reutilización del código, aunque dicha
reutilización se facilita mediante su uso.
La integración de los patrones en el
proceso de desarrollo se hace todavía de
forma manual.
El número de patrones identificados es
cada vez más grande. Las clasificaciones
actuales no siempre sirven de guía para
decidir cual usar.
El número de combinaciones patrones
estilos y atributos que se dan en la
práctica son incontables.
Los patrones se validan por la experiencia
y el debate, no mediante la aplicación de
técnicas formales
Considerar cómo los patrones de diseño
solucionan problemas de diseño.
Buscar las intenciones de cada patrón.
Estudiar cómo se interrelacionan los
patrones.
Estudiar patrones de propósito similar.
Examinar la causa de un rediseño.
Considerar que debería ser variable en un
diseño.
1. Leer el patrón una vez para tener una
visión general
2. Volver y estudiar la estructura, los
participantes y las colaboraciones
3. Ver un ejemplo concreto codificado del
patrón
4. Elegir nombres para los participantes del
patrón que sean significativos en el contexto
de la aplicación
5. Definir las clases
6. Definir nombres específicos de la aplicación para
las operaciones en el patrón.
7. Implementar las operaciones que realizarán las
responsabilidades y colaboraciones del patrón.
Existe un archivo de texto, el que se debe leer en
distintos momentos y bajo condiciones variables.
Como lo resuelvo?
Varia la estrategia de lectura
Encapsular
1.construya 5 ejemplos de aplicaciones
utilizando 5 patrones diferentes (GOF)
52