Академический Документы
Профессиональный Документы
Культура Документы
2014
Fundamentos Bsicos
Conceptos:
a) Patrn: un patrn es una regla con tres partes que expresa la relacin
entre un determinado contexto, un problema y una solucin
b) Patrn de diseo: Provee un esquema para refinar los subsistemas o
componentes de un sistema de software.
stos se abocan a un elemento especfico del diseo, como un
agrupamiento de componentes, a fin de resolver algn problema de diseo,
relaciones entre los elementos de una pgina, o mecanismos para efectuar
la comunicacin entre componentes.
II.
III.
1. Nombre del patrn: sirve para ser reconocido entre diseadores. Estos hace
que sea ms fcil pensar en diseos y comunicarlas, sus ventajas y
desventajas.
2. Problema: describe cuando aplicar el patrn. En l se explica el problema y su
contexto.
Podra describir los problemas especficos de diseo, como la forma para
representar algoritmos como objetos. Se podra describir la clase o la
estructura del objeto que son sintomticos de un diseo inflexible.
A veces el problema incluye una lista de condiciones que deben cumplirse
antes de que se aplique el patrn de diseo.
3. Solucin: Describe los elementos que componen el diseo, sus relaciones,
responsabilidades,
y
colaboraciones.
La solucin no describe un diseo particular y concreto o implementacin,
debido a que un patrn es una plantilla que puede ser aplicado en muchas
situaciones diferentes. En lugar de ello el patrn proporciona una descripcin
abstracta de un problema de diseo y como una disposicin general de
elementos (clases y objetos) resuelve ella.
4. Consecuencias: son los resultados y compromisos de aplicar el patrn.
Aunque las consecuencias son a menudo desapercibidas cuando escribimos
las decisiones de diseo, que son fundamentales para la evaluacin de
alternativa de diseo y para la comprensin de costos y los beneficios y aplicar
el patrn. Las consecuencias en el software suelen ser referidos a menudos,
tiempo y espacio.
Pueden referirse tambin al lenguaje y a la cuestin de la aplicacin, dado que
la reutilizacin es a menudo un factor orientado a objetos de diseo, las
consecuencias de un patrn incluyen su impacto en la flexibilidad,
extensibilidad o la portabilidad de un sistema. El tener un estado de
consecuencias ayuda a entender la forma explcita de los patrones y
evaluarlos.
IV. Categoras de Patrones de Diseo
En la siguiente imagen podremos ver las categoras de patrones de diseo y la
clasificacin de estas considerando si estas estn enfocadas a clases u
objetos.
5.1.
Cdigo ejemplo:
public abstract class
AbstractFactory {
public abstract Disco
comprarDisco();
public abstract Memoria
comprarMemoria();
}
public class AmdFactory
extends AbstractFactory{
public Disco
comprarDisco(){
return new DiscoAmd();
}
public Memoria
comprarMemoria(){
return new MemoriaAmd();
}
}
public class IntelFactory
extends AbstractFactory {
public Disco
comprarDisco() {
// TODO Auto-generated
method stub
return new DiscoIntel();
}
public Memoria
comprarMemoria() {
// TODO Auto-generated
method stub
return new MemoriaIntel();
}
}
public abstract class Disco
{
public abstract String
getDisco();
}
public abstract class
Memoria {
public abstract String
getMemoria();
}
public class DiscoAmd
extends Disco{
public String getDisco() {
return "Ha comprado un
Disco AMD";
}
}
public class DiscoIntel
extends Disco{
5.1.3. Builder
El objetivo es conseguir que la construccin de un objeto compuesto sea
independiente de su representacin, de manera que la construccin no se vea
afectada por el hecho de que cambie su forma de representacin.
Intencin
Construir de manera flexible un objeto complejo a partir de otro objeto complejo
en una serie de pasos.
Caso de aplicacin:
El patrn Builder se usa cuando:
El algoritmo para creacin de un objeto complejo debe ser
independiente de las partes que conforman el objeto y cmo estn
ensambladas.
El proceso de construccin debe permitir diferentes representaciones
del objeto que es contruido.
Ejemplo:
class Pizza {
private String masa = "";
private String salsa = "";
private String relleno = "";
public void setMasa(String
masa) { this.masa = masa;
}
public void setSalsa(String
salsa) { this.salsa =
salsa; }
public void
setRelleno(String relleno) {
this.relleno = relleno; }
}
abstract class PizzaBuilder
{
protected Pizza pizza;
public Pizza getPizza()
{ return pizza; }
public void
crearNuevaPizza() { pizza
= new Pizza(); }
class PicantePizzaBuilder
extends PizzaBuilder {
public void buildMasa()
{ pizza.setMasa("cocida");
}
public void buildSalsa()
{ pizza.setSalsa("picante");
}
public void buildRelleno() {
pizza.setRelleno("pimienta
+salchichn"); }
}
}
}
class Cocina {
private PizzaBuilder
pizzaBuilder;
public void
setPizzaBuilder(PizzaBuilde
r pb) { pizzaBuilder = pb; }
public Pizza getPizza()
{ return
pizzaBuilder.getPizza(); }
public void construirPizza()
{
pizzaBuilder.crearNuevaPiz
za();
pizzaBuilder.buildMasa();
pizzaBuilder.buildSalsa();
pizzaBuilder.buildRelleno();
}
}
class BuilderExample {
public static void
main(String[] args) {
Cocina cocina = new
Cocina();
PizzaBuilder
hawai_pizzabuilder = new
HawaiPizzaBuilder();
PizzaBuilder
picante_pizzabuilder = new
PicantePizzaBuilder();
cocina.setPizzaBuilder( ha
wai_pizzabuilder );
cocina.construirPizza();
Pizza pizza =
cocina.getPizza();
abstract class
OtroPizzaBuilder {
protected Pizza pizza;
class OtraCocina {
private OtroPizzaBuilder
pizzaBuilder;
public void
setPizzaBuilder(OtroPizzaB
uilder pb) { pizzaBuilder =
pb; }
public Pizza getPizza()
{ return
pizzaBuilder.getPizza(); }
public void construirPizza()
{
pizzaBuilder.crearNuevaPiz
za();
//notar que no se necesita
llamar a cada build.
}
}
Estructura:
Product: define la interfaz
de los objetos que el
mtodo factory va a crear.
ConcreteProduct: imple
menta la interfaz Product.
Creator: Declara
el
FactoryMethod(), el cual
retorna un objeto del tipo
Product(). Creator tambin puede definir una implementacin por
defecto del FactoryMethod() y retornar un objeto por defecto.
ConcreteCreator: Redefine el FactoryMethod() que retorna una
instancia ConcreteProduct
Ejemplo:
Sea un framework para la construccin de editores de documentos de
distintos tipos. Se nos presenta el dilema de que el framework es quien
sabe, a travs de su clase Aplicacin, cundo se debe crear un nuevo
documento, pero no sabe qu documento crear (slo conoce a la clase
abstracta o interfaz). La solucin de este dilema es encapsular el
conocimiento de cul es la subclase concreta del documento a crear y
mover ese conocimiento fuera del frameworK.
La implementacin del Factory method puede ser visible tambin en el
ejemplo descrito a continuacin, en el patrn de diseo creacional
Prototipo.
5.1.5. Prototype
El objetivo es ahorrar recursos con la creacin de objetos, la manera
ms eficiente de tener los objetos sin crearlos de nuevo es clonndolos.
Especifica los tipos de objetos a crear utilizando una instancia prototipo,
y
crea
nuevos
objetos
copiando
esta
instancia.
Casos de aplicacin:
En ciertos escenarios es preciso abstraer la lgica que decide que tipos
de objetos utilizar una aplicacin, de la lgica que luego usarn esos
objetos en su ejecucin. Los motivos de esta separacin pueden ser
Ejemplo:
Se desea crear un programa en el cual se pueda crear figuras
geomtricas y estas se puedan copiar, en la cual dichas copias se
puedan personalizar sin afectar al objeto original.
Creamos la clase prototipo:
5.1.6. Singleton
Es un patrn que garantiza que una clase solo tenga una nica
instancia, y provee un punto de acceso global a esta, haciendo as que
todos los objetos utilicen una instancia de la clase, utilicen la misma
instancia.
Casos de aplicacin:
Usar cuando:
Estructura:
LINKOGRAFA
http://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o