You are on page 1of 14

UNIVERSIDAD NACIONAL DE TRUJILLO

FACULTAD DE INGENIERA
ESCUELA DE INGENIERA DE SISTEMAS


TECNOLOGA DE LA PROGRAMACIN II
TEMA: Patrn De Diseo Prototype
DOCENTE: Zoraida Vidal Melgarejo
INTEGRANTES:
Agurto Fiestas Alexander
Jurez Guzmn Miguel
Luis Gmez Antony
Merino Castillo Diego
Rodrguez Portal Vanessa

TRUJILLO-PER
2014


Patrn de Diseo Prototype


2
Patrn de Diseo Prototype



Contenido

INTRODUCCIN ............................................................................................................................. 3
DEFINICIN DE PATRN DE DISEO ............................................................................................. 4
PATRONES DE CREACIN: ............................................................................................................. 5
PATRN DE DISEO PROTOTYPE .................................................................................................. 5
DEFINICIN................................................................................................................................ 5
UTILIZACIN DE PATRN .......................................................................................................... 6
ESTRUCTURA: ............................................................................................................................ 7
VENTAJAS .................................................................................................................................. 7
DESVENTAJAS ............................................................................................................................ 8
CONSECUENCIAS ....................................................................................................................... 8
EJEMPLO .................................................................................................................................... 9
BIBLIOGRAFA .......................................................................................................................... 14









Patrn de Diseo Prototype


3
PATRN DE DISEO
PROTOTYPE
INTRODUCCIN
Una cosa que los diseadores expertos no hacen es resolver cada problema desde el principio.
A menudo reutilizan las soluciones que ellos han obtenido en el pasado. Cuando encuentran
una buena solucin, utilizan esta solucin una y otra vez. Estos patrones solucionan problemas
especficos del diseo y hacen los diseos orientados a objetos ms flexibles, elegantes y por
ltimo reutilizables. Los patrones de diseo ayudan a los diseadores a reutilizar con xito
diseos para obtener nuevos diseos. Un diseador que conoce algunos patrones puede
aplicarlos inmediatamente a problemas de diseo sin tener que descubrirlos.
El valor de la experiencia en los diseos es muy importante. Cuando tienes que hacer un
diseo que crees que ya has solucionado antes pero no sabes exactamente cundo o como lo
hiciste. Si pudieras recordar los detalles de los problemas anteriores y como los solucionaste,
entonces podras reutilizar la experiencia en vez de tener que volver a pensarlo.
El objetivo de los patrones de diseo es guardar la experiencia en diseos de programas
orientados a objetos. Cada patrn de diseo nombra, explica y evala un importante diseo en
los sistemas orientados a objetos. Es decir se trata de agrupar la experiencia en diseo de una
forma que la gente pueda utilizarlos con efectividad. Por eso se han documentado los ms
importantes patrones de diseo y presentado en catlogos.
Los patrones de diseo hacen ms fcil reutilizar con xito los diseos y arquitecturas.
Expresando estas tcnicas verificadas como patrones de diseo se hacen ms accesibles para
los diseadores de nuevos sistemas. Los patrones de diseo te ayudan a elegir diseos
alternativos que hacen un sistema reutilizable y evitan alternativas que comprometan la
reutilizacin. Los patrones de diseo pueden incluso mejorar la documentacin y
mantenimiento de sistemas existentes. Es decir, los patrones de diseo ayudan a un diseador
a conseguir un diseo correcto rpidamente.
Christopher Alexander dice: Cada patrn describe un problema que ocurre una y otra vez en
nuestro entorno, para describir despus el ncleo de la solucin a ese problema, de tal manera
que esa solucin pueda ser usada ms de un milln de veces, sin hacerlo ni siquiera dos veces
de la misma forma.
Los trabajos de Alexander intentan identificar y resolver, en un marco descriptivo formal
aunque no exacto, problemas esenciales en el dominio de la arquitectura. A los diseadores de
software les ha parecido trasladar muchas de las ideas de Alexander al dominio software.
Patrn de Diseo Prototype


4
En software las soluciones son expresadas en trminos de objetos e interfaces en lugar de
paredes y puertas, pero el ncleo de ambos tipos de patrones es una solucin a un problema
en un contexto.
Alexander ha servido, en realidad, de catalizador de ciertas tendencias constructivas
utilizadas en el diseo de sistemas software.

DEFINICIN DE PATRN 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. Debemos 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).
Existen varios patrones de diseo popularmente conocidos, los cuales se clasifican como se
muestra a continuacin:
Patrones Creacionales: Inicializacin y configuracin de objetos.
Patrones Estructurales: Separan la interfaz de la implementacin. Se ocupan de cmo las
clases y objetos se agrupan, para formar estructuras ms grandes.
Patrones de Comportamiento: Ms que describir objetos o clases, describen la comunicacin
entre ellos.








Patrn de Diseo Prototype


5
PATRONES DE CREACIN:

Los patrones de creacin muestran la gua de cmo crear objetos cuando sus creaciones
requieren tomar decisiones. Estas decisiones normalmente sern resueltas dinmicamente
decidiendo que clases instanciar o sobre que objetos un objeto delegar responsabilidades.
La vala de los patrones de creacin nos dice como estructurar y encapsular estas decisiones.
A menudo hay varios patrones de creacin que puedes aplicar en una situacin. Algunas veces
se pueden combinar mltiples patrones ventajosamente. Por estas razones es importante
conocer los seis patrones descritos en esta categora:
Factory Method
Abstract Factory
Builder
Prototype
Singleton
Object Pool


PATRN DE DISEO PROTOTYPE
DEFINICIN
El patrn de diseo Prototype, tiene como finalidad crear nuevos objetos duplicndolos,
clonando una instancia creada previamente.
Este patrn especifica la clase de objetos a crear mediante la clonacin de un prototipo que es
una instancia ya creada. La clase de los objetos que servirn de prototipo deber incluir en su
interfaz la manera de solicitar una copia, que ser desarrollada luego por las clases concretas
de prototipos.
El patrn Prototype es un patrn de diseo creacional en el que los objetos se crean a partir de
una instancia prototpica, que es clonada para dar lugar a nuevos objetos.
En si, este patrn propone la creacin de distintas variantes de objetos que nuestra aplicacin
necesite. Toda la lgica necesaria para la decisin sobre el tipo de objetos que usara la
aplicacin en su ejecucin se hace independiente, de manera que el cdigo que utiliza estos
objetos solicitara una copia del objeto que necesite, en este contexto, una copia significa otra
instancia del objeto. El nico requisito que debe cumplir este objeto es suministrar la
funcionalidad de clonarse.

Patrn de Diseo Prototype


6
UTILIZACIN DE PATRN

Por un lado, este patrn viene a solventar problemas derivados de clases dependientes de
factores externos que solo se conocern en tiempo de ejecucin y, por otro, nos permite
evitar, en el caso de objetos muy complejos, los problemas en la creacin de estos.
Se debera usar este patrn cuando el sistema debera ser independiente de cmo sus
productos son creados, rellenados y presentados. Adems, como ya he comentado, cuando la
clase a instanciar se especifica en tiempo de ejecucin o para evitar la creacin de factoras
con herencias de clases complejas o cuando las instancias de una clases difieren nicamente
en un estado. En este ltimo caso suele ser mejor, crear el prototipo y clonar dicho prototipo
para obtener instancias de nuevos objetos.
Este Patrn aplica en un escenario donde sea necesario la creacin de objetos parametrizados
como "recin salidos de fbrica" ya listos para utilizarse, con la gran ventaja de la mejora de la
performance: clonar objetos es ms rpido que crearlos y luego setear cada valor en
particular.

Este patrn debe ser utilizado cuando un sistema posea objetos con datos repetitivos, en
cuanto a sus atributos: por ejemplo, si una biblioteca posee una gran cantidad de libros de una
misma editorial, mismo idioma, etc. Hay que pensar en este patrn como si fuese un fbrica
que tiene ciertas plantillas de ejemplos de sus productos y, a partir de estos prototipos, puede
crear una gran cantidad de productos con esas caractersticas.
Se recomienda el uso de este patrn si:
Si el sistema debe de ser independiente de cmo, dnde y cundo se crean sus productos.
Permite especificar instancias en tiempos de ejecucin.
Se quiere reducir el nmero de clases.
Si las instancias que se generan tienen estados limitados.

Patrn de Diseo Prototype


7
ESTRUCTURA:

CLIENTE:
Es el encargado de solicitar la creacin de nuevos objetos a partir de los prototipos.
PROTOTIPO CONCRETO:
Posee caractersticas concretas que sern reproducidas para nuevos objetos e implementa
una operacin para clonarse.
PROTOTIPO:
Declara una interfaz para clonarse, a la que accede el cliente.

VENTAJAS

Nos sirve para copiar objetos que tardan mucho en crear, o que son complejos de crear. Por
ejemplo una lista grande que es costoso en tiempo obtener y que se desea ordenar de dos
maneras distintas.
Un programa puede dinmicamente aadir y borrar objetos prototipo en tiempo de
ejecucin. Esta es una ventaja que no ofrece ninguno de los otros patrones de creacin
Esconde los nombres de los productos especficos al cliente
Se pueden especificar nuevos objetos prototipo variando los existentes
La clase Cliente es independiente de las clases exactas de los objetos prototipo que utiliza.
y, adems, no necesita conocer los detalles de cmo construir los objetos prototipo
Clonar un objeto es ms rpido que crearlo.
Se desacopla la creacin de las clases y se evita repetir la instanciacin de objetos con
parmetros repetitivos que crearlo.

Patrn de Diseo Prototype


8

DESVENTAJAS

La jerarqua de prototipos debe ofrecer la posibilidad de clonar un elemento y esta
operacin puede no ser sencilla de implementar. Por otro lado, si la clonacin se produce
frecuentemente, el coste puede ser importante.

CONSECUENCIAS

Un programa puede dinmicamente aadir y borrar objetos prototipo en tiempo de
ejecucin. Esta es una ventaja que no ofrece ninguno de los otros patrones de creacin.
Esconde los nombres de los productos especficos al cliente.
El objeto cliente puede tambin ser capaz de crear nuevos objetos de tipos prototipo.
Se pueden especificar nuevos objetos prototipo variando los existentes.
La clase Cliente es independiente de las clases exactas de los objetos prototipo que utiliza.
Tambin, la clase Cliente no necesita conocer los detalles de cmo construir los objetos
prototipo.
Los objetos de prototipo concretos implementan el interface Prototype, de esta forma el
patrn Prototype se asegura de que los objetos prototipo proporcionan un conjunto
consistente de mtodos para que los objetos clientes los utilicen.
Se puede configurar una aplicacin cargando clases dinmicamente.
No hay necesidad de organizar los objetos prototipos en ningn orden de jerarqua de
clases.
Las subclases son reducidas.







Patrn de Diseo Prototype


9
EJEMPLO

PROGRAMA DE DIBUJO PARA CREAR CIRCULOS Y CUADRADOS
Clase Prototype:
package prototype;
import java.util.Scanner;
public class Prototype {
public static void main(String... args) {
Scanner sc = new Scanner(System.in);
int opcion, posX,posY;
Circulo circulo = new Circulo();
Cuadrado cuadrado = new Cuadrado();
Figura figura;
circulo.setNombre("Mi Circulo");
circulo.mover(12,34);
cuadrado.setNombre("Mi Cuadrado");
cuadrado.mover(200,200);
System.out.println("Estas son las figuras originales");
System.out.println("Circulo:"+circulo.getNombre());
System.out.println("Cuadrado:"+cuadrado.getNombre());
System.out.println("Estas son las posiciones originales:");
circulo.getPosicion();
cuadrado.getPosicion();
System.out.println("Digite la opcion que desea clonar");
System.out.println("1 = Circulo \n2 = Circulo");
opcion = sc.nextInt();
if(opcion==1){
Patrn de Diseo Prototype


10
figura = circulo.clonar();
} else{
figura = cuadrado.clonar();
}
figura.setNombre(figura.getNombre()+" Clonado");
System.out.print("Digite la ueva posicion en X: ");
posX = sc.nextInt();
System.out.print("Digite la nueva posicion en Y: ");
posY = sc.nextInt();
figura.mover(posX, posY);
System.out.println("Esta es figura clonada:");
System.out.println(figura.getNombre());
System.out.println("Esta es la posicion del clon: ");
figura.getPosicion();
System.out.println("Estas son las figuras originales");
System.out.println("Circulo:"+circulo.getNombre());
System.out.println("Cuadrado:"+cuadrado.getNombre());
System.out.println("Estas son las posiciones originales:");
circulo.getPosicion();
cuadrado.getPosicion();
}
}

public interface Figura {
public void setNombre(String n);
public String getNombre();
public void mover (int x, int y);
Patrn de Diseo Prototype


11
public void getPosicion();
public Figura clonar();
}

Clase Crculo
public class Circulo implements Figura {
private String nombre;
private int posicionX, posicionY;

public Circulo(){}

@Override
public void setNombre(String n){
this.nombre = n;
}
@Override
public String getNombre(){
return nombre;
}
@Override
public void mover(int x, int y){
this.posicionX = x;
this.posicionY = y;
}
@Override
public void getPosicion(){
System.out.println("Circulo en x:"+this.posicionX);
Patrn de Diseo Prototype


12
System.out.println("Circulo en y:"+this.posicionY);
}

@Override
public Figura clonar(){
Figura figura = new Circulo();
figura.setNombre(this.nombre);
figura.mover(this.posicionX,this.posicionY);
return figura;
}
}

Clase Cuadrado
public class Cuadrado implements Figura{
private String nombre;
private int posicionX, posicionY;
public Cuadrado(){}
@Override
public void setNombre(String n){
this.nombre = n;
}
@Override
public String getNombre(){
return nombre;
}

@Override
Patrn de Diseo Prototype


13
public void mover(int x, int y){
this.posicionX = x;
this.posicionY = y;
}

@Override
public void getPosicion(){
System.out.println("Cuadrado en x:"+this.posicionX);
System.out.println("Cuadrado en y:"+this.posicionY);
}

@Override
public Figura clonar(){
Figura figura = new Cuadrado();
figura.setNombre(this.nombre);
figura.mover(this.posicionX,this.posicionY);
return figura;
}
}







Patrn de Diseo Prototype


14
BIBLIOGRAFA

http://infow.wordpress.com/2013/03/30/gof-patrones-de-diseno-vi-prototype/
http://www.slideshare.net/JhonnyJAZS/prototype-patron-de-disenio
http://tratandodeentenderlo.blogspot.com/2010/02/patrones-de-diseno-prototype.html
http://prezi.com/mjouqwlalzoe/patrones-de-diseno-enfoque-en-prototype-prototipo/
http://migranitodejava.blogspot.com/2011/05/prototype.html
http://msdn.microsoft.com/es-es/library/bb972240.aspx
http://software.guisho.com/prototype-pattern-patron-prototipo-patrones-de-diseno

You might also like