Proyecto final Modelos de programación

55
Proyecto Final Patrones de diseño Aula Virtual Nicolás Cabrejo. 20131020081 Mónica Patricia Novoa -20131020072 Angie Lorena Cárdenas. -20131020082 Presentado a: Docente Julio Barón Universidad Distrital Francisco José de Caldas Proyecto curricular de Ingeniería de Sistemas. Facultad de Ingeniería. Bogotá 2014

description

Patrones de diseño aplicados a la construcción de un aula virtual

Transcript of Proyecto final Modelos de programación

Proyecto Final Modelos .docx

Proyecto Final Patrones de diseoAula Virtual

Nicols Cabrejo. 20131020081Mnica Patricia Novoa -20131020072Angie Lorena Crdenas. -20131020082

Presentado a: Docente Julio Barn

Universidad Distrital Francisco Jos de CaldasProyecto curricular de Ingeniera de Sistemas.Facultad de Ingeniera.Bogot2014

CONTENIDO

INTRODUCCIN5OBJETIVOS61.Patrones de diseo71.1Patrones de diseo Creacionales71.1.1Fbrica Abstracta71.1.2Mtodo Fbrica81.1.3Patrn Builder91.1.4Patrn Prototipo101.1.5Patrn Singleton111.2Patrones de Diseo Estructurales121.2.1Patrn Adapter131.2.2Patrn Composite151.2.3Patrn Decorador161.2.4Patrn Proxy181.2.5Patrn Puente201.2.6Patrn Fachada221.2.7Patrn flyweight241.3Patrones de Comportamiento251.3.1Patrn Cadena de responsabilidad251.3.2Command (Orden)271.3.3Patrn Intrprete281.3.4Patrn Iterator301.3.5Patrn Mediador321.3.6Patrn Memento (Recuerdo)331.3.7Patrn Observer (Observador)341.3.8Patrn State (Estado)351.3.9Patrn Estrategia371.3.10Patrn Template Method (Mtodo plantilla)391.3.11Patrn Visitante40CONCLUSIONES41REFERENCIAS42

INTRODUCCIN

Los patrones de diseo son prcticamente el esqueleto de la solucin de un problema comn en el desarrollo del software estos nos permiten crear soluciones simples y elegantes a problemas especficos que se presentan en la vida cotidiana, la utilizacin de los patrones de diseo puede brindar beneficios a la hora de programar tales como la reutilizacin, o el fcil mantenimiento del proyecto que se est desarrollando. dentro de los patrones de estudio encontramos tres clasificaciones como lo son: patrones creacionales, estructurales, y de comportamiento, los cuales en el desarrollo de este trabajo comprenderemos de manera ms sencilla su utilizacin en el desarrollo de un aula virtual en la cual especificamos y ejemplificamos su descripcin, usos, definicin, ventajas, desventajas y sus principales caractersticas.

Existen muchos patrones de diseo por ello es importante tener clara su finalidad, as como la ayuda que nos pueden brindar alguno en especfico, para evitar caer en su mala aplicacin o incluso en alguno de los anti-patrones que dificultan el trabajo y lo hacen menos efectivo.

OBJETIVOS

General

Identificar las caractersticas fundamentales de los patrones de diseo estructurales, creacionales y de comportamiento determinando su aplicabilidad a travs del desarrollo del proyecto aula virtual en la cual se busca utilizar todos ellos de forma sencilla y clara.

EspecficosEstudiar la estructura de los patrones de diseo desarrollndolos en una aplicacin como lo es el aula virtual.

Conocer los escenarios ptimos en los cuales se deben aplicar los patrones de acuerdo a su propsito.

Mejorar los hbitos de programacin, con el fin de desarrollar aplicaciones elegantes y flexibles.

1. Patrones de diseo

Segn Larman, un patrn es un par problema/solucin con nombre que se puede aplicar en nuevos contextos, con consejos acerca de cmo aplicarlo en nuevas situaciones y discusiones sobre sus componentes. Por lo tanto, los patrones de diseo son el esqueleto de las soluciones a problemas comunes en el desarrollo de software.

Existen varios grupos de grupos de Patrones, en este caso estn asociados segn su propsito:

Patrones creacionales: utilizados para instanciar objetos, y as separar la implementacin del cliente de la de los objetos que se utilizan. Con ellos intentamos separar la lgica de creacin de objetos y encapsularla. Entre ellos encontramos:

Patrones de comportamiento: se utilizan a la hora de definir como las clases y objetos interaccionan entre ellos.

Patrones estructurales: utilizados para crear clases u objetos que incluidos dentro de estructuras ms complejas.

Patrones de diseo Creacionales

Los patrones de diseo creacionales tratan con las cuestiones relacionadas con la creacin, as como abstraen el proceso de instanciacin, procuran independizar el sistema de cmo sus objetos son creados, compuestos y representados y encapsulan conocimientos sobre clases concretas usadas por el sistema.

Dentro de los patrones creacionales encontramos a:

Fbrica Abstracta

El patrn de diseo Fbrica Abstracta se utiliza para proporcionar una interfaz comn para crear una serie de objetos (productos) bajo una u otra arquitectura o framework, teniendo la ventaja de que los clientes de dichos productos no tengan que tener conocimiento de la arquitectura o construccin elegida para implementar cada familia de productos.

Escenario Patrn Fbrica Abstracta

Planteamiento de pregunta

Respuesta

Diagramas

Salidas

Cdigo Main

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {

}

Mtodo Fbrica

Mtodo Fbrica o Factory Method es un patrn de diseo que define una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qu clase instanciar. Permite que una clase delegue en sus subclases la creacin de objetos.Este patrn hace tambin que el diseo sea ms adaptable a cambio de slo un poco ms de complejidad.

Escenario Patrn Mtodo Fbrica

Planteamiento de pregunta

Respuesta

Diagramas

Salidas

Cdigo Main

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {

}

Patrn BuilderEl patrn builder o constructor es un patrn creacional que le permite a un cliente construir un objeto complejo especificando slo su tipo y contenido, ocultando todos los detalles de la construccin, esta se realiza a partir de una variedad de partes que contribuyen individualmente al ensamble del objeto, adems nos ayuda a centralizar el proceso de creacin en un nico punto, incluso el mismo proceso de construccin puede crear representaciones diferentes.

Escenario Patrn Builder

Planteamiento de la pregunta

Respuesta

Diagramas

Salidas

Cdigo Main

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {

}

Patrn Prototipo

El patrn de diseo Prototype (Prototipo), 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.

Escenario Patrn Prototipo

Planteamiento pregunta

Respuesta

Diagrama Salida

Cdigo Main (Prototipo)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {

}

Patrn Singleton

El patrn de diseo singleton (instancia nica) est diseado para restringir la creacin de objetos pertenecientes a una clase o el valor de un tipo a un nico objeto.

Su intencin consiste en garantizar que una clase slo tenga una instancia y proporcionar un punto de acceso global a ella.

El patrn singleton se implementa creando en nuestra clase un mtodo que crea una instancia del objeto slo si todava no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con atributos como protegido o privado).

Escenario Patrn Singleton

Hay una clase muy pesada y no es necesario instanciarla muchas veces Planteamiento pregunta

Respuesta

Diagramas

Cdigo Main (Singleton)

public class Launcher {

/** * @param args the command line arguments */fachada y proxy "singleton"

public static void main(String[] args) {

Cadena cadena = new ProxyLeerCadena(); cadena.leer("fichero.txt");

}

Patrones de Diseo Estructurales

Son los patrones de diseo software que solucionan problemas de composicin (agregacin) de clases y objetos.

Dentro de los patrones estructurales encontramos a:

Patrn Adapter

El patrn Adapter convierte la interfaz de una clase en la que otra necesita, es decir transforma la interfaz de una clase en una interfaz que el cliente espera, permitiendo que clases con interfaces incompatibles trabajen juntas.Por lo tanto, el uso de este patrn estructural est indicado cuando se quiere usar una clase ya implementada y su interfaz no es similar con la necesitada o cuando se desea crear una clase reusable que coopere con clases no relacionadas o que tengan interfaces compatibles.

Escenario Patrn Adapter

En el aula, al realizar la lectura de cualquier archivo este retorna cada lnea como un Sting, es decir toda la informacin de los archivos ser guardada en una sola lnea, lo cual producir desorden y confusin a la hora de manejar la informacin, por esta razn es necesario separar estas cadenas de texto para acceder a cada uno de los elementos de forma independiente.

Planteamiento de pregunta

Cmo cambiar el almacenamiento de los datos previamente establecido a forma ms sencilla donde la informacin que ingrese el usuario se guarde de forma independiente?

Respuesta

El patrn Adapter nos permite trabajar con clases que inicialmente no son compatibles mediante la utilizacin de un adaptador. Al guardar cadenas de caracteres los archivo las almacenan linealmente y si quisiramos crear un mtodo el cual nos permite separar la informacin probablemente tendramos un error de incompatibilidad, por eso es necesario emplear dicho patrn ya que nos ayudar a adaptar la interfaz con el fin de cambiar el almacenamiento de los datos de forma independiente.

Diagramas

Salidas (Adapter)

Cdigo Main (Adapter)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) { //adapter Adaptador adaptador = new AdaptadorDato(); adaptador.adaptar("ola k ase"); //prueba int a = 0; while(a< adaptador.cadena.length){ System.out.println(adaptador.cadena[a]); a++; }

Patrn Composite

Sirve para construir objetos que estn formados por otros objetos ms simples, pero siempre similares entre s, gracias a la composicin recursiva. Por lo tanto, al tener todos estos objetos en una misma interfaz, el Composite simplifica el tratamiento de los mismos.

El patrn Composite, lo que nos ofrece es crear una interfaz o clase abstracta que acte como superclase de las clases concretas que representan las partes y los compuestos. Las clases que representan los compuestos pueden ser tratadas como partes, porque soportan la interfaz.

Escenario Patrn Composite

Se desea crear, manejar y organizar las carpetas que contienen archivos e incluso otras carpetas dentro de ellas para el uso general de parciales dispuestas para el desarrollo de la plataforma estudiantil.

Planteamiento de pregunta

Cmo crear y manejar estructuras como una carpeta, agregando objetos de tipo archivo as como subcarpetas que se puedan crear posteriormente? Respuesta

El patrn composite es muy til ya que nos permite crear y manipular estructuras de objetos, en este caso las carpetas y manejarlas en forma de rbol, en las que este objeto puede contener a otros y mostrar su contenido, para ello se debe implementar las clases Archivo y Carpeta que heredan de la clase abstracta Nodo e implementa los mtodos comunes y define el mtodo mostrar.

Diagramas

Salidas

Cdigo Main (Composite)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {

Patrn Decorador

Este patrn facilita la tarea de aadir dinmicamente funcionalidades a un Objeto. De este modo, elimina de necesidad de crear clases que fuesen heredando de la primera, incorporando no slo la nueva funcionalidad, sino tambin otras nuevas y asociarlas a ella.

Escenario Patrn Decorador

Al momento de ingresar informacin al sistema que se desea almacenar es necesario permitir observacin de los datos de forma electiva y eficiente, para garantizar que el usuario tenga la opcin de verificar si la ingreso correctamente.

Planteamiento de pregunta

Cmo aadir de forma dinmica la utilidad de impresin parcial de datos suministrados para verificacin y validacin por parte del usuario?

Respuesta

El patrn decorador nos permite aadir funciones dinmicamente a un objeto, en la aplicacin aula virtual es necesario almacenar y organizar datos suministrado por el usuario, sin embargo es necesario que este verifique la informacin que ingreso dando la opcin de usar esa funcin.

Diagramas

Salidas

Cdigo Main (Decorador)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {

// Decorador String[] prueba; Adaptador componente = new AdaptadorDato(); Adaptador decorado = new DecoradorPantalla(componente); prueba = decorado.adaptar("nicolas es genial");}

Patrn Proxy

Este patrn estructural tiene como propsito proporcionar un intermediario para controlar el acceso a un objeto, proporciona un representante o sustituto de otro objeto para controlar el acceso a ste.

Escenario Patrn Proxy

Durante el desarrollo del proyecto aula virtual es necesario crear clases que implican un alto costo de memoria y rendimiento por parte de la mquina a la hora de instanciarlas, por esta razn es necesario crear un mtodo el cual tenga como objetivo la instanciacin de dichas clases cuando sea estrictamente necesario.

Planteamiento de pregunta

Cmo instanciar una clase que incurre en un alto costo de memoria solamente en el momento en el cual es necesario utilizarla?

Respuesta

La solucin la brinda el patrn Proxy, puesto que este tiene la facultad de Retrasar el coste de crear e inicializar un objeto hasta que es realmente necesario.

Diagramas

Salidas

Cdigo Main (Proxy)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {//fachada y proxy "singleton" Cadena cadena = new ProxyLeerCadena(); cadena.leer("fichero.txt");

}

Patrn Puente

El patrn de diseo bridge o puente nos permite separar abstraccin de su implementacin, ya que la Herencia liga o une una implementacin a una abstraccin dificultando la modificacin, extensin y reutilizacin.

Escenario Patrn Puente

Para el ingreso al aula virtual esta maneja dos clases de usuarios, Estudiante y Docente, pero en el aula puede haber usuarios que no necesariamente pertenezcan al sistema catalogados como invitados o que pertenezcan es decir usuarios locales, entonces estas dos clases de usuarios deben ser de dos tipos: Estudiante Invitado, Estudiante local, Docente Invitado o Docente local, entonces los diferentes usuarios deben ser implementados dentro de la interfaz de estas dos formas, invitado o local, para cada uno de ellos.

Planteamiento de pregunta

Cmo separar la implementacin para cada clase de usuario del sistema en el momento de registro, si cada uno de ellos puede poseer a su vez dos tipos de usuario local o invitado?

Respuesta

El patrn puente nos permite evitar la vinculacin entre la abstraccin y la implementacin, as el registro puede variar de forma independiente para cada tipo de usuario, es decir nuestra aplicacin permite combinar diferentes tipos de registro en tiempo de ejecucin.

Diagrama

Salidas

Cdigo Main (Puente)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {//puente

TipoUsuario tipo = new Invitado(); TipoUsuario tipo2 = new Invitado(); AgregarUsuario usuarionuevo= new AgregarDocente(tipo); usuarionuevo.agregar("Angie Crdenas Ing.sistemas"); }

Patrn Fachada

Nos permite simplificar el interface de comunicacin entre dos objetos X y Z de tal forma que para el objeto X sea ms sencillo interactuar con el objeto Z. De esta manera el cliente solo se conecta con una interfaz sencilla, mientras que la interfaz sencilla se conecta a su vez a otras interfaces ms complejas.

Proporciona una interfaz unificada para un conjunto de interfaces de un sistema. Define una interfaz de alto nivel que hace que el subsistema sea ms fcil de usar.

Provee una interfaz unificada y sencilla que haga de intermediaria entre un cliente y una interfaz o grupo de interfaces ms complejas.

Escenario Patrn Fachada

En el proyecto aula virtual es necesario relacionar clases con distintas funcionalidades, por ejemplo la manipulacin de los archivos y separacin de las lneas de texto en String; si deseamos acceder y vincular varias clases probablemente aadiremos complejidad a nuestra aplicacin por este motivo tendremos que hallar la mejor forma de tener comunicacin entre clientes y clases sin que estos presenten alto acoplamiento.

Planteamiento de pregunta

Cmo reducir la complejidad de las relaciones entre varios clientes y varias clases de manera que pueda dar una estructura al sistema ms ordenada y reducir la cantidad de comunicacin y dependencias entre clases?

Respuesta

Es necesario utilizar el patrn fachada ya que nos sirve para proveer una interfaz unificada que hace de intermediaria entre un cliente y una interfaz o grupo de interfaces ms complejas, adems nos sirve para desacoplar los clientes los subsistemas.

Diagramas

Salidas

Cdigo Main (fachada)

public void leer(String ruta){ Cadena cadena = LeerCadenas.getInstance(); cadena.leer(ruta);

}

Patrn flyweight

Patrn de diseo Flyweight comparte estados para soportar un gran nmero de objetos pequeos aumentando la eficiencia en espacio de memoria a costo de tiempo y recursos de procesamiento. Para eliminar o reducir la redundancia cuando se tiene gran cantidad de objetos que contienen la misma informacin.

Se centra principalmente en el concepto de rendimiento. A grandes rasgos, se basa en dividir un objeto en dos partes: una parte comn a un conjunto grande de los objetos de la clase (parte intrnseca), y una parte privada que ser accesible y modificable nicamente por un objeto en concreto (parte extrnseca).

Escenario

Planteamiento de la pregunta Respuesta

Diagrama

Salidas

Cdigo Main (Peso ligero)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {

}

Patrones de Comportamiento

Se definen como patrones de diseo software que ofrecen soluciones respecto a la interaccin y responsabilidades entre clases y objetos, as como los algoritmos que encapsulan.

Dentro de los patrones de comportamiento encontramos a:

Patrn Cadena de responsabilidad

Este patrn evita acoplar el emisor de una peticin a su receptor dando a ms de un objeto la posibilidad de responder a una peticin. Para ello, se encadenan los receptores y pasa la peticin a travs de la cadena hasta que es procesada por algn objeto. Este patrn es utilizado a menudo en el contexto de las interfaces grficas de usuario donde un objeto puede contener varios objetos. Segn si el ambiente de ventanas genera eventos, los objetos los manejan o los pasan

Escenario Patrn cadena de responsabilidad

Al iniciar el registro en la aplicacin es importante que al seleccionar el tipo de usuario (docente o estudiante) sea redireccionado segn eleccin a la interfaz de registro especfica, teniendo en cuenta que cada uno de ellos posee diferentes caractersticas y responsabilidades dentro del sistema

Planteamiento de pregunta

Cmo especificar para cada uno de los tipos de usuarios existentes dentro de la aplicacin la forma registro y acceso al sistema?

Respuesta

Se hace evidente la aplicacin del patrn de diseo Cadena de responsabilidades el cual permite establecer una cadena de objetos receptores a travs de los cuales se pasa una peticin formulada por un objeto emisor. Cualquiera de los objetos receptores puede responder a la peticin en funcin de un criterio establecido. La peticin que hace el usuario es recibida y verificada por cada una de las interfaces sin embargo ser atendida por la interfaz correspondiente segn el caso.

Diagramas

Salidas

Cdigo Main (Cadena de responsabilidad)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) { //Cadena de responsabilidad PeticionAgregarUsuario peticion = new PeticionAgregarUsuario("docente",""); Mando estudiante = new CEstudiante(); Mando docente = new CDocente(); Mando error = new CError(); estudiante.setSucesor(docente); docente.setSucesor(error); estudiante.manejarPeticion(peticion);}

Command (Orden)

Este patrn permite solicitar una operacin a un objeto sin conocer realmente el contenido de esta operacin, ni el receptor real de la misma. Para ello se encapsula la peticin como un objeto, con lo que adems se facilita la parametrizacin de los mtodos.

Escenario del patrn Command

Planteamiento pregunta

Respuesta

Diagramas

Salidas

Cdigo Main (Command)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {

}

Patrn Intrprete

El intrprete es un patrn de diseo que, dado un lenguaje, define una representacin para su gramtica junto con un intrprete del lenguaje.

Se usa para definir un lenguaje para representar expresiones regulares que representen cadenas a buscar dentro de otras cadenas. Adems, en general, para definir un lenguaje que permita representar las distintas instancias de una familia de problemas.

Escenario del patrn Intrprete

Cualquier aplicacin que tenga un proceso de acceso por medio de clave debe brindar un mnimo de seguridad protegiendo los datos suministrados por el usuario y almacenados en el sistema de forma que esta informacin pueda ser interpretada y codificada sin sufrir alteraciones.

Planteamiento pregunta

Cmo garantizar al usuario el almacenamiento de sus datos privados ofreciendo seguridad y respaldo al ingresarlos en la aplicacin?

Respuesta

El intrprete es un patrn de comportamiento que redefine una expresin utilizando motores de traduccin para resolver problemas. Dada una situacin en la que el cliente suministre y requiera seguridad en sus datos este ofrece una codificacin o encriptacin en modo binario que pueda garantizar un almacenamiento privado y protegido.

Diagramas

Salidas

Cdigo Main (Intrprete)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {//interprete String hola; String hola2; ContextoInterprete contexo = new ContextoInterprete("andrea123"); Expresion conversor = new ExpresionBinaria(); hola = conversor.interpretar(contexo); System.out.println(hola); ContextoInterprete contexo2 = new ContextoInterprete(hola); Expresion conversor2 = new ExpresionCaracter(); hola2 = conversor2.interpretar(contexo2); System.out.println(hola2);

}

Patrn Iterator

En diseo de software, el patrn de diseo Iterador, define una interfaz que declara los mtodos necesarios para acceder secuencialmente a un grupo de objetos de una coleccin.

Este patrn de diseo permite recorrer una estructura de datos sin que sea necesario conocer la estructura interna de la misma.Escenario del patrn Iterador

En el proyecto aula virtual es necesario que un docente visualice y manipule las notas de sus estudiantes pero no necesita la informacin completa de sus pupilos , para esto es necesario crear un mtodo que nos facilite el acceso y el recorrido a determinados elementos sin referenciar la totalidad de su estructura.

Planteamiento pregunta

Cmo el usuario puede acceder a determinada informacin sin necesidad de visualizar datos no requeridos?

Respuesta

Es necesario utilizar el patrn Iterador ya este proporciona un acceso secuencial a los elementos de un objeto sin exponer la representacin interna de este adems nos brinda ms de una forma para recorrer dichos objetos sin necesidad de crear modificaciones en la clase. para esto es necesario utilizar un Iterador externo que ofrece los mtodos para que el cliente recorra la estructura paso a paso, o un Iterador interno que ofrece un mtodo de actuacin sobre la estructura que, de manera transparente al cliente, la recorre aplicndose a todos sus elementos.

Diagramas

Salidas

Cdigo Main (Iterador)

public class Launcher {

/** * @param args the command line arguments */

// iterador

public static void main(String[] args) {AbstraccionUsuario nicolas = new Estudiante(); int [] notas = {1,3,5,25,50,87}; nicolas.setNotas(notas); Iterador iterador = new IteradorEstudiantes(monica); while(iterador.hasNext()){ iterador.actual();

}

Patrn Mediador

El patrn mediador define un objeto que encapsula cmo un conjunto de objetos interactan. Con este patrn la comunicacin entre objetos es encapsulada con un objeto mediador. Los objetos no se comunican de forma directa entre ellos, en lugar de ello se comunican mediante el mediador. Esto reduce las dependencias entre los objetos en comunicacin, reduciendo entonces la Dependencia de cdigo.

Escenario del patrn Mediador

Planteamiento pregunta

Respuesta

Diagramas

Salidas

Cdigo Main (Mediador)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {

}

Patrn Memento (Recuerdo)

Es un patrn de diseo, cuya finalidad es almacenar el estado de un objeto (o del sistema completo) en un momento dado de manera que se pueda restaurar en ese punto de manera sencilla. Para ello se mantiene almacenado el estado del objeto para un instante de tiempo en una clase independiente de aquella a la que pertenece el objeto (pero sin romper la encapsulacin), de forma que ese recuerdo permita que el objeto sea modificado y pueda volver a su estado anterior.

Escenario del patrn memento

Al momento de cualquier tipo de registro, suele pasar que el usuario comete alguna equivocacin y darse cuenta despus del envo el registro, sera dispendioso e intil iniciar el formulario de nuevo; lo ideal en este caso es permitir la correccin de los datos sin perder el resto de la informacin ya suministrada exitosamente.

Planteamiento pregunta

Cmo capturar datos temporales suministrados en un formulario y restaurarlos dependiendo la necesidad del usuario y de su verificacin?

Respuesta

El patrn memento brinda la posibilidad de almacenar temporalmente el estado de un objeto en un momento dado permitiendo la opcin de restaurarlo y reutilizarlo, en la aplicacin aula virtual este patrn implementa el almacenamiento temporal ofreciendo la opcin al usuario de utilizarlo en caso de cometer algn error al registrarse.

Diagramas

Salidas

Cdigo Main (Memento)

public class Launcher {

/** * @param args the command line arguments */ public static void main(String[] args) {// Memento CareTaker caretaker = new CareTaker(); Usuario usuario = new Usuario(); usuario.setCadena("Nicolas", "cabrejo", "Sistemas"); caretaker.aadirEstado(usuario.guardar()); int a=0; while(a