más patrones - LDC - Universidad Simón Bolívar

Anuncio
CLASE 10:
MÁS PATRONES
Universidad Simón Bolívar. Ing. de Software.
Prof. Ivette C. Martínez
Patrones GRASP
Polimorfismo
  Problema:
¿Cómo manejar las alternativas basadas en el
tipo? ¿Cómo crear componentes conectables?
 Solución:
Cuando las alternativas o comportamientos
relacionados varian según la clase asigne la
responsabilidad para el comportamiento
utilizando operaciones polimórficas.
Patrones GRASP
Polimorfismo
  Corolario:
NO UTILIZAR COMPROBACION DE TIPOS NI
LOGICA CONDICIONAL PARA IDENTIFICAR LAS
OPERACIONES SEGÚN EL TIPO.
 Condiciones: El uso de lógica condicional dificulta la
mantenibilidad
 Componentes conectables: Contemplar como sustituir un
componente servidor por otro sin que afecte al cliente.
 Ventajas:
 Se
añaden fácilmente extensiones necesarias para nuevas
variaciones.
 Las nuevas implementaciones se pueden añadir sin afectar a los
clientes.
Patrones GRASP
 Polimorfismo
Patrones GRASP
Fabricación Pura
  Problema:
¿Qué objetos deberían tener la responsabilidad
cuando no se quiere violar los objetivos de Alta
cohesión y Bajo Acoplamiento, u otros, pero las
soluciones que ofrece el Experto (por ejemplo)
no son adecuadas?
 Solución:
Asignar un conjunto de responsabilidades
altamente cohesivas a una clase artificial o de
conveniencia que no representa un concepto del
dominio del problema – algo inventado para
soportar alta cohesión, bajo acoplamiento y
reutilización - .
Patrones GRASP
Fabricación Pura
  Ventajas:
 Soporta
Alta cohesión puesto que las
responsabilidades se factorizan en una clase
de grano fino que solo se centra en un conjunto
muy específico de tareas relacionadas.
 El potencial para reutilizar podría aumentar
debido a la presencia de clases Fabricación
Pura de grano fino cuyas responsabilidades
tienen aplicación en otras aplicaciones.
Patrones GRASP
 Fabricación Pura
Patrones GRASP
Indirección
  Problema:
¿Dónde asignar una responsabilidad para evitar el
acoplamiento directo entre dos (o más) cosas?
¿Cómo desacoplar los objetos de manera que se
soporte el bajo acoplamiento y el potencial para
reutilizar permanezca más alto?
 Solución:
Asignar la responsabilidad a un objeto que medie
entre otros componentes o servicios de manera que
no se acoplen directamente. Use patrón Adaptador.
 Ventaja:
 Disminuye el acoplamiento entre los componentes.
Patrones GRASP
 Indirección
Indirección por medio de un adaptador
Patrones GRASP
 Variaciones Protegidas
 Problema:
¿Cómo diseñar objetos, subsistemas y sistemas de
manera que las variaciones o inestabilidades en
estos elementos no tengan un impacto no deseable
en otros elementos?
 Solución:
Identificar los puntos de variaciones previstas o de
inestabilidad asignando responsabilidades para
crear una interfaz estable alrededor de ellos.
Patrones GRASP
Variaciones Protegidas
  Variaciones
Protegidas (VP) es un principio
fundamental que motiva la mayoría de los
mecanismos y patrones en la programación y
el diseño destinados a proporcionar
flexibilidad y protección frente a las
variaciones.
Patrones GRASP
Variaciones Protegidas – Mecanismos
Básicos:
  Diseño
dirigido por los datos
Se protege al sistema del impacto de las
variaciones de los datos registrando exactamente
la variante. (Parametrización)
 Búsqueda de servicios
Se protegen los clientes de las variaciones en la
ubicación de los servicios, utilizando una interfaz
estable de la búsqueda del servicio (Jini, UDDI,
etc).
Patrones GRASP
Variaciones Protegidas – Mecanismos
Básicos
  Diseño
dirigido por un intérprete
Se protege al sistema del impacto de las
variaciones lógicas registrando externamente la
lógica, leyéndola, y utilizando un intérprete.
 Diseño reflexivo o de meta-nivel
Se protege al sistema del impacto de la lógica o
variaciones del código mediante algoritmos
reflexivos que utilizan introspección y servicios de
metalenguaje (Ej: Method.invoke).
Patrones GRASP
Variaciones Protegidas – Mecanismos
Básicos
  Principio
de sustitución de Liskov (PSL)
El software (métodos, clases, ...) que hace referencia a
un tipo T (alguna interfaz o superclase abstracta)
debería trabajar correctamente, o como se espera, con
cualquier implementación o subclase de T . Ejemplo:
Public void otrosImpuestos(AdaptadorCalculadordeImpuestos calculador,
Venta venta)
{
List lineasdeImpuestos = calculador.getImpuestos(venta);
....
}
Patrones GRASP
 Variaciones Protegidas – Mecanismos Básicos
 Diseño
de ocultación de la estructura (no hable con
extraños)
Un método solo debería enviar mensajes a los siguientes
objetos:
 El objeto this o self;
 Un parámetro del método;
 Un atributo de this;
 Un elemento de una colección que es un atributo de this;
 Un objeto creado en el método.
 Los objetos directos son “conocidos” del cliente, los objetos
indirectos son “extraños”. Un cliente debería hablar solo
con conocidos y “evitar hablar con extraños”.
Patrones GRASP
 Variaciones Protegidas – Mecanismos Básicos
 Diseño
de ocultación de la estructura (no hable con
extraños)
Class Registro
{
private Venta venta;
public void metodoAlgoFragil()
{
dinero cantidad = venta.getPago().getCantidadEntregada();
. . .
}
}
venta.getPago() envía un mensaje a un “conocido” pero
en venta.getPago().getCantidadEntregada() el mensaje
getCantidadEntregada() se aplica a un Pago “extraño”.
Patrones GRASP
Variaciones Protegidas
  Punto
de variación:
Variaciones en el sistema actual, existente o en los requisitos.
 Puntos de evolución:
Puntos especulativos de variación que podrían aparecer en
el futuro, pero que no están están presentes en los requisitos
actuales.
 Ventajas de Variaciones Protegidas:
 Se añaden fácilmente las extensiones que se necesitan
para nuevas variaciones;
 Se pueden introducir nuevas implementaciones sin afectar
a los clientes;
 Se reduce el acoplamiento;
 Puede disminuirse el impacto o coste de los cambios.
Clasificación de los patrones de
diseño GoF
 Patrones de Creación
Para tratar en problema de la inicialización y configuración de
objetos
 Cómo voy a crear mis objetos?
  Patrones Estructurales
Para tratar con el desacoplamiento entre la interfaz y la
implementación de las clases y los objetos
 Cómo las clases y los objetos se ¨componen¨ para formar estructuras
más grandes y complejas?
  Patrones de Comportamiento
  Para tratar con las interacciones dinámicas entre clases y objetos
Cómo manejar flujos de control complejos (comunicaciones)?
Catálogo de Patrones de diseño - GoF
Propósito
Creacional
Estructural
Clase
• Factory Method
• Adapter
Objeto
• Abstract
Factory
• Builder
• Prototype
• Singleton
•
•
•
•
•
•
•
Alcance
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Comportamental
• Interpreter
•
•
•
•
•
•
•
•
•
Chain of Responsibility
Command
Iterator
Mediator
Momento
Observer
State
Strategy
Vistor
Beneficios de los patrones de diseño
 Inspiración
 Los
patrones no proveen soluciones, inspiran
soluciones
 Los patrones capturan explícitamente
conocimientos de expertos y tradeoffs de diseño,
y hacen que esta experticia esté disponible
ampliamente.
 Facilitan la transición a las tecnologías orientadas
a objetos.
Beneficios de los patrones de diseño
 Los patrones mejoran la comunicación entre los
desarrolladores
 Los
 nombres de los patrones forman el vocabulario
Ayudan a documentar la arquitectura de un sistema
 Mejoran
 la comprensión de los sistemas
Los patrones de diseño habilitan la reutilización en
gran escala de las arquitecturas de software
Debilidades de
los patrones de software
Los patrones no conducen a una reutilización del
código directa.
 Los equipos pueden sufrir de sobrecarga de
patrones.
 La integración de patrones en un proceso de
desarrollo de software es una actividad de gran
participación humana.
 
Descargar