Patron de Diseño Prototipo

Embed Size (px)

Citation preview

  • 5/21/2018 Patron de Diseo Prototipo

    1/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

  • 5/21/2018 Patron de Diseo Prototipo

    2/14

    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

  • 5/21/2018 Patron de Diseo Prototipo

    3/14

    Patrn de Diseo Prototype

    3

    PATRN DE DISEO

    PROTOTYPEINTRODUCCINUna 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 xitodiseos 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 diseadora 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.

  • 5/21/2018 Patron de Diseo Prototipo

    4/14

    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 constructivasutilizadas 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.

  • 5/21/2018 Patron de Diseo Prototipo

    5/14

    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 PROTOTYPEDEFINICINEl 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.

  • 5/21/2018 Patron de Diseo Prototipo

    6/14

    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 permiteevitar, 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 parametrizadoscomo "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.

  • 5/21/2018 Patron de Diseo Prototipo

    7/14

    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.

  • 5/21/2018 Patron de Diseo Prototipo

    8/14

    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.

  • 5/21/2018 Patron de Diseo Prototipo

    9/14

    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){

  • 5/21/2018 Patron de Diseo Prototipo

    10/14

    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);

  • 5/21/2018 Patron de Diseo Prototipo

    11/14

    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);

  • 5/21/2018 Patron de Diseo Prototipo

    12/14

    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

  • 5/21/2018 Patron de Diseo Prototipo

    13/14

    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;

    }

    }

  • 5/21/2018 Patron de Diseo Prototipo

    14/14

    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

    http://infow.wordpress.com/2013/03/30/gof-patrones-de-diseno-vi-prototype/http://msdn.microsoft.com/es-es/library/bb972240.aspxhttp://software.guisho.com/prototype-pattern-patron-prototipo-patrones-de-disenohttp://software.guisho.com/prototype-pattern-patron-prototipo-patrones-de-disenohttp://msdn.microsoft.com/es-es/library/bb972240.aspxhttp://infow.wordpress.com/2013/03/30/gof-patrones-de-diseno-vi-prototype/