PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Advertisements

FACHADA COMPOSITOR MEMENTO
POLIMORFISMO UNIDAD 4.
POLIMORFISMO "una interfaz, múltiples métodos".
Lenguaje de programación Java
Arquitectura CLARO-TECNOTREE
Patrones de Diseño GEYFFER ALEXANDER ACOSTA CRISTHIAN DOUGLAS CASTRO
Arquitectura CLARO-TECNOTREE CAPITULO 4: Excepciones
Capitulo 4 Excepciones.
Siguiente Excepciones Introducción. AnteriorSiguiente Definición Una excepción es un evento que ocurre durante la ejecución de un programa que desestabiliza.
RMI (Remote Method Invocation)
Rosalía Laza Fidalgo Reyes Pavón Rial Curso
Encapsulamiento y Abstracción
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
SISTEMAS DE LA INFORMACIÓN
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CINCO CONSOLE.
Tema 6: Clases Antonio J. Sierra.
Tema 10: Interfaces Antonio J. Sierra.
Diseño de Sistemas. Patrones de Diseño. Geronimo Manso.
Patrones de Comportamiento: Patrón de Diseño Observer
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
FACTORY METHOD Edmundo Álvarez Jiménez Antonio Fernández Alonso
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
Patrones Creacionales
Chain of Responsibility José Manuel Domínguez Arroyo Margarita Lozano Pérez Carlos Ignacio Mantecón Nebreda.
Patrones de diseño DECORATOR Mario Rodríguez Martín
Patrones de Diseño: Command
Luis Pereda Calvo1 Comportamiento de Objetos Estrategia (Strategy) *Política (Policy)
Juan Manuel Perdigón Mario Felipe Monsalve
MEMENTO Patrón de Comportamiento Ana María Mateo Jorge P. Andrés
Patrones de Diseño Carolina Perozo Julio Padrón Anthony Accardi.
Técnicas avanzadas de programación Introspección
Herencia y tipos ● Cuanta memoria se debe asignar a un objeto cuando se asigna en la pila ● La asignación debe hacerse antes de que se conozca la cantida.
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
César Estéban Castañeda Luis Andrés Almanza
PATRONES DE DISEÑO.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
PATRÓN ADAPTER (Adaptador) Elena Moreno Ramírez Laura Sánchez Romero Aroa Solana Ruiz.
Interfaces y Clases Internas ELO329: Diseño y Programación Orientados a Objetos.
Interfaces ELO329: Diseño y Programación Orientados a Objetos.
PATRONES DE DISEÑO. A lo largo de los años diseñadores con experiencia en programación orientada a objetos han desarrollado soluciones que sirven para.
1 Interfaces y Clases Internas ELO-329: Diseño y programación orientados a objetos Agustín J. González.
Patrón Iterator Santiago García Sánchez Rebeca Marcos Salcedo Mª Cristina Zapatero Gironda.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Presentado por: PABLO ANDRES DIAZ SAIN HASSAM CAICEDO
Detalles Generales sobre Java
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
Departamento de Ingeniería del Software e Inteligencia Artificial Universidad Complutense de Madrid Simulación del patrón … (1)
Interfaces y Clases Internas
Patrones de diseño equipo n.1
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación CLASES DE JAVA Diciembre de 2008.
Patrón de Diseño Brigde ( Handle/Body) Calderón Márquez Jorge Alberto Posgrado de Ciencia e Ingeniería en Computación. Tecnología Orientada a Objetos.
Programación Orientada a Objetos: CLASES Y OBJETOS
Encapsulamiento Miguel Ángel Rojas Aguilar Esthela Carmina Carranza Cabrera.
Clases “ Es una Abstracción de un elemento del mundo real ”
Herencias Conceptos básicos i
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Transcripción de la presentación:

PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo

ÍNDICE Propósito Aplicabilidad Reglas Estructura Participantes Beneficios Implementación Ejemplo

PROPÓSITO Es un patrón de creación. El objetivo de este patrón es especificar los tipos de objetos a crear por medio de una instancia que hace de prototipo, creando nuevos objetos copiando dicha instancia. Todo se basa en clonar un prototipo dado.

APLI CABILIDA D Se debe usar este patrón cuando un sistema deba ser independiente de cómo se crean, se componen y se representan sus productos, y además: –Cuando las clases a instanciar sean especificadas en tiempo de ejecución. –Para evitar construir una jerarquía de clases de fábricas paralela a la jerarquía de clases de producto. –Cuando las instancias de una clase puedan tener uno de entre sólo unos pocos estados diferentes.

REGLAS Algunas de las reglas que se cumplen en este patrón son: –Si un objeto tiene distinto comportamiento según su estado … –Si una jerarquía de clases tiene muchos niveles … –Si algo se utiliza poco ó no se utiliza … –Si una superclase conoce a alguna de sus subclases … –Si una clase colabora con muchas … –Si un cambio en una interfaz impacta en muchos clientes … –etc

ESTRUCTURA

PARTICIPANTES Prototipo –Declara una interfaz para clonarse Prototipo Concreto –Implementa una operación para clonarse Cliente –Crea un nuevo objeto pidiéndole a un prototipo que se clone

BENEFICIOS Algunos beneficios de aplicar este patrón son: –Añadir y eliminar productos en tiempo de ejecución. –Especificar nuevos objetos modificando valores. –Especificar nuevos objetos variando la estructura. –Reducir la herencia. –Configurar dinámicamente una aplicación con clases

IMPLEMENTACIÓN A la hora de implementar prototipos hay que tener en cuenta los siguientes aspectos: –Usar un gestor de prototipos (Cuando el número de prototipos no es fijo) –Implementar la operación clonar –Inicializar los clones (Personalizarlos)

Código en lenguaje Java EJEMPLO

Un grupo de científicos ha construido una maquina para clonar, programada de Java. El primer experimento consiste en clonar todo el número de ovejas que puedan. Más tarde ampliaron la funcionalidad de la máquina para permitir la clonación de vacas. INTRODUCCIÓN

PROBLEMAS La máquina cuenta con varios problemas: –El método de clonación, devuelve un objeto no una vaca u oveja. –El método no sabe lo que crear a priori. –Si queremos clonar otro tipo de animal necesitaremos “arreglar” la máquina. –Máquina difícil de mantener.

SOLUCIÓN Dar información a la máquina a priori y pedirle a la misma que le devuelva un número de copias del mismo Despreocuparse del funcionamiento de la máquina. Añadir funcionalidades especiales a la forma de clonar los animales para tratarlos de una forma u otra.

SOLUCIÓN: Fase 1 La primera tarea será crear un interfaz ( que extiende Cloneable, implementando de este modo el método clone( ) ), que será el que implementen tanto la Vaca como la Oveja

SOLUCIÓN: Fase 1 public interface CloneableAnimal extends Cloneable { public CloneableAnimal duplicate( ); } Ese método duplicate( ) será el encargado de crear y devolver una nueva copia de cada animal que lo implemente.

SOLUCIÓN: Fase 2 La oveja será: public class Sheep implements CloneableAnimal { public Sheep( ) { System.out.println("Creada la plantilla de la oveja"); } public CloneableAnimal duplicate( ) { System.out.println( "La oveja se va a clonar a sí misma" ); Sheep returnValue = null;

SOLUCIÓN: Fase 2 try { returnValue = ( Sheep ) super.clone( ); } catch( Exception e ) { System.out.println( "error cloning Sheep" ); } return returnValue; } public String toString( ) { return "Soy una oveja clonada, beeeeee"; } }

SOLUCIÓN: Fase 2 Aquí esta la vaca: public class Cow implements CloneableAnimal { public Cow( ) { System.out.println( "Creada la plantilla de la vaca" ); } public CloneableAnimal duplicate( ) { System.out.println( "creando una nueva instancia de Cow" ); return new Cow( ); } public String toString( ) { return "Muuuu, soy un clon de vaca" ; }

SOLUCIÓN: Fase 3 Ahora, los investigadores tan sólo tendrán que hacer algo así: public class Professor { public static void sayIt( String words ) { System.out.println( "" ); System.out.println( words ); System.out.println( "" ); }

SOLUCIÓN: Fase 3 public static void main( String[] args ) { CloningMachine cMachine = new CloningMachine( ); sayIt( "creating Sheep and Cow templates" ); Sheep sheepTemplate = new Sheep( ); Cow cowTemplate = new Cow( ); Cow clonedCow = ( Cow )cMachine.newClone( cowTemplate ); sayIt( "primera vaca clonada" );

SOLUCIÓN: Fase 3 Sheep clonedSheep = ( Sheep ) cMachine.newClone( sheepTemplate ); sayIt( "first cloned sheep" ); System.out.println( clonedSheep ); sayIt( "Creando 10 vacas nuevas" ); CloneableAnimal[] newCows =cMachine.cloneMany(10, cowTemplate); sayIt( "Creando 10 ovejas nuevas" ); CloneableAnimal[] newSheeps = cMachine.cloneMany(10,sheepTemplate );

SOLUCIÓN: Fase 3 sayIt( "Probando las vacas" ); for( int i=0; i< newCows.length; i++ ) { System.out.println( newCows[ i ] ); } sayIt( "Probando las ovejas" ); for( int i=0; i< newSheeps.length; i++ ) { System.out.println( newSheeps[ i ] ); }

SOLUCIÓN: Fase 4 La clase CloningMachine es: public class CloningMachine { public CloningMachine( ) { } public Clonable createCopy( IClonable template ) { return template.getCopy( ); }

SOLUCIÓN: Fase 4 public Clonable[]createManyCopies(int numCopies,Iclonable template) { Clonable[] returnArray = new Clonable[ numCopies ]; for( int i=0; i< numCopies; i++ ) { returnArray[ i ] = template.getCopy( ); } return returnArray; }

Conclusiones La máquina crea objetos sin saber de qué tipo deben ser. Se ha separado el código que crea los objetos, del código que maneja los detalles de la creación de nuevos objetos, permitiendo añadir nuevas características a los animales clonados.

PATRONES RELACIONADOS El patrón Abstract Factory es un rival en algún aspecto, y también pueden usarse juntos. Los diseños que hacen un uso intensivo de los patrones Composite y Decorator suelen beneficiarse también de este patrón.