design_patterns uniandes colombia
DESCRIPTION
Diseño de patrones colombiaTRANSCRIPT
![Page 1: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/1.jpg)
Patrones de diseño
Rubby Casallas
Departamento de Ingeniería de
Sistemas y Computación
Universidad de los Andes
1
![Page 2: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/2.jpg)
Referencias
� Erich Gamma, Richard Helm, Ralph Johnson,
John Vlissides. Design Patterns. Addison
Wesley. 1994.
� GRAND, Mark. Patterns in Java. Volumen 1 y � GRAND, Mark. Patterns in Java. Volumen 1 y
2. Wiley Computer Publishing. 1998.
2
![Page 3: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/3.jpg)
Agenda
� Introducción a Patrones de diseño
� Interfaces
� Delegación
� Factory Method
� Abstract Factory� Abstract Factory
� Strategy
� Builder
3
![Page 4: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/4.jpg)
Cómo los patrones de diseño
resuelven problemas de diseño� Los problemas:
� Encontrar los objetos apropiados
� Determinar la granularidad de los objetos
� Especificar las interfaces� Especificar las interfaces
� Especificar las implementaciones
4
![Page 5: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/5.jpg)
Encontrar los objetos apropiados
� “The hard part about object-oriented design is
decomposing a system into objects. The task is difficult
because many factors come into play: encapsulation,
granularity, dependency, flexibility, performance,
evolution, reusability, and on and on. They all influence evolution, reusability, and on and on. They all influence
decomposition, often in conflicting ways.”
� Design Patterns. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Addison Wesley. 1994.
� Página 11.
5
![Page 6: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/6.jpg)
Encontrar los objetos apropiados
� Un diagrama de clases de análisis modela (o intenta modelar) el mundo del problema
� Un diagrama de clases de diseño modela la solución al problema.
� Un diagrama de clases de diseño incluye clases que vienen del análisis, pero hay otras clases que no tienen Un diagrama de clases de diseño incluye clases que vienen del análisis, pero hay otras clases que no tienen contra parte en el mundo real
� Los patrones de diseño ayudan a identificar abstracciones menos obvias.
� Un patrón de diseño sirve para resolver un problema de diseño en un contexto particular.
� Se describen siempre como una pareja problema-solución
6
![Page 7: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/7.jpg)
Interfaces
� El comportamiento de los objetos puede ser descrito por
una caracterización abstracta de su interfaz. Por
ejemplo:
� Un libro en una biblioteca: prestar, devolver, destruir, reservar
� Una ventana de una interfaz gráfica: desplegar, abrir, cerrar, � Una ventana de una interfaz gráfica: desplegar, abrir, cerrar, cambiarTamaño, arrastrar
� La caracterización del comportamiento es suficiente
para diseñar el sistema. El comportamiento real del
objeto puede ser implementado y refinado más tarde de
acuerdo con las necesidades.
7
![Page 8: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/8.jpg)
Interfaces
javax.sql.DataSource
Connection getConnect ion()
Connection getConnect ion(String username, String password)
PrintWriter getLogWriter()
void setLogWriter(PrintWriter out)
<<Interface>>
OntologyDB uses
8
Implementation1 Implementation2 Implementation n
![Page 9: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/9.jpg)
Interfaces
� Ventajas:
� No hay acoplamiento entre la clase cliente de la interface y la implementación
� Quiere decir que la implementación se puede cambiar
sin tener que cambiar el cliente de la interfacesin tener que cambiar el cliente de la interface
� El diseñador y el programador de la clase cliente no necesita saber cómo esta realizada la implementación y
� No necesita tener la implementación para diseñar el cliente
9
![Page 10: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/10.jpg)
Delegación
ModelFacade
createOntologyModel()
DOMStrategy
createOntologyModel()
10
createOntologyModel()
{
OntologyModel om = ds.createOntologyModel();
}
![Page 11: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/11.jpg)
Delegación
� Ventajas
� Es fácil componer comportamientos en ejecución y cambiar la forma en que están compuestos
� Es una manera de remplazar la herencia que Es una manera de remplazar la herencia que implica un alto grado de acoplamiento
11
![Page 12: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/12.jpg)
Patrones de creacón de objetos: Fábricas
� Fábrica simple:� Se define una clase que crea objetos de otras
� Método fábrica:� Se define una interface para crear objetos
� se delega a las subclases implementar la creación de un producto concreto concretoun producto concreto concreto
� Abstract Factory: � Se define una interface (o una clase abstracta) para
crear objetos de alguna familia sin especificar la clase en concreto
� Se delega a las subclases implementar la creación de los productos concretos concreto
![Page 13: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/13.jpg)
Fábrica simple
![Page 14: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/14.jpg)
public class FactoriaJuegos {
public static Juego getJuego( String
nombreJuego ) {
if ( nombreJuego.equals("JuegoDelDado") )
return new JuegoDelDado();
else {
if (nombreJuego.equals("JuegoDeMoneda") )
return new JuegoDeMoneda(); return new JuegoDeMoneda();
else
return null;
}
}
}
![Page 15: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/15.jpg)
Factory Method
![Page 16: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/16.jpg)
public abstract class Creator {
public Product anOperation() {
return factoryMethod();
}
protected abstract Product factoryMethod();
}
public class ConcreteCreator extends Creator {
protected Product factoryMethod() {
return new ConcreteProduct();
}
}
public interface Product {
public void operacion(); public void operacion();
}
public class ConcreteProduct implements Product {
public void operacion()
{
System.out.println("Una operación de este producto");
}
}
public static void main(String args[]) {
Creator aCreator = new ConcreteCreator();
Product producto = aCreator.anOperation();
producto.operacion();
}
![Page 17: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/17.jpg)
Factory Method
� Define una Interface para crear un objeto
pero deja a sus implementaciones decidir
cuál clase efectivamente instanciará el objeto
17
![Page 18: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/18.jpg)
Factory Method
Ne w In t e rfac e< < In t e rfac e > >
C lie n t
< < In t e rfac e > >
18
Co n c re t e C re at o r Co n c re t P ro d u c t
N e w In t e rfac e
Fa ct o ryM e t h od ( ) : P ro d u c t
im p le m e n t s
P ro d u c t< < In t e rfac e > >
![Page 19: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/19.jpg)
Factory Method
� Se usa cuando no se puede anticipar cuál
clase será la que creará el objeto
� Se puede implementar con clases abstractas
y proveer una instanciación por defectoy proveer una instanciación por defecto
� En el caso de lenguajes con tipos
parámetricos, se puede también implementar
con un template
19
![Page 20: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/20.jpg)
Factory Method en Java
� En ejecución se decide quién será la
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
� En ejecución se decide quién será la
fábrica!!
20
java -Djavax.xml.parsers.SAXParserFactory=yourFactoryHere
![Page 21: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/21.jpg)
Factory Method en Java
javax.xml.parsers.SAXParserFactory
static SAXParserFactory newInstance()
abstract SAXParser newSAXParser()
<<abstract>>
SAXStrategy uses
21
org.apache.xerces.jaxp.SAXParserFactoryImpl
<<concrete>> OtherConcreteFactory
org.apache.xerces.jaxp.SAXParserImpl
<<concrete>>
javax.xml.parsers.SAXParser
<<abstract>>uses
creates
![Page 22: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/22.jpg)
Abstract Factory
![Page 23: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/23.jpg)
Abstract Factory
� Este patrón es también conocido como kit o Toolkit
� Caso:
� Construir un sistema de ventanas sobre varias plataformas ( ms-windows, motif, java-swing)
� El patrón ayuda a definir una solución general que � El patrón ayuda a definir una solución general que
independiente de la plataforma particular.
� Por ejemplo, cuando se solicite la creación de una
ventana se hará sobre la plataforma que se decidió en
tiempo de ejecución.
23
![Page 24: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/24.jpg)
Abstract Factory
� Estrategia de solución:
� Dado un conjunto de clases abstractas relacionadas (por ejemplo, la ventana, el menú, el panel, etc.) proveer una forma para crear instancias concretas. instancias concretas.
� El cliente puede decidir cuál fábrica utilizará en el último momento (puede ser un valor parámetro al momento de la ejecución)
� Para el resto del código, el cliente sólo utiliza las clases abstractas
24
![Page 25: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/25.jpg)
Abstract Factory
25
![Page 26: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/26.jpg)
Strategy
� Define una familia de algoritmos, los
encapsula y los hace intercambiables
� Los algoritmos pueden cambiar
independientemente de los clientes que los independientemente de los clientes que los
usan
26
![Page 27: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/27.jpg)
Strategy
ParserStrategy
abstract createOntologyModel() : OntologyModel
static getInstance() : ParserStrategy
<<abstract>>
ModelFacade
27
DOMStrategy
createOntologyModel()
SAXStrategy
createOntologyModel()
![Page 28: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/28.jpg)
Builder
� Separa la construcción de un objeto complejo
de su representación.
� El mismo proceso puede ser utilizado para
construir diferentes representacionesconstruir diferentes representaciones
28
![Page 29: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/29.jpg)
Builder
Builder<<Interface>>
Client
Director
Construct() : Product
29
foreach item in structure
builder.BuildPart()
BuildPart()
ConcretBuilder
BuildPart()GetResult()
Product
Construct() : Product
![Page 30: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/30.jpg)
Strategy
![Page 31: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/31.jpg)
![Page 32: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/32.jpg)
![Page 33: Design_patterns Uniandes Colombia](https://reader034.vdocument.in/reader034/viewer/2022051216/563db94d550346aa9a9c05fd/html5/thumbnails/33.jpg)
public class CompanyTaxStrategy implements TaxStrategy<Company> {
private static final double BIG_COMPANY_RATE = 0.30;
private static final double SMALL_COMPANY_RATE = 0.15;
public double extortCash(Company company) {
if (company.getNumberOfEmployees() > 5 &&
company.getIncome() < 1000000) {
return company.getIncome() * SMALL_COMPANY_RATE;
}
else return company.getIncome() * BIG_COMPANY_RATE;
}
} }
http://www.javaspecialists.eu/archive/Issue123.html