lunes, 28 de marzo de 2011

ENTRADA 5: CONTINUACIÓN DEL DESARROLLO DEL TEMA


1.3 Plantilla de un patrón de diseño

La plantilla más común es la utilizada precisamente por el GoF y consta de los siguientes apartados:
·      Nombre del patrón: nombre estándar del patrón por el cual será reconocido en la comunidad (normalmente se expresan en inglés).

·      Clasificación del patrón: creacional, estructural o de comportamiento.

·      Intención: ¿Qué problema pretende resolver el patrón?

·      También conocido como: Otros nombres de uso común para el patrón.

·      Motivación: Escenario de ejemplo para la aplicación del patrón.

·      Aplicabilidad: Usos comunes y criterios de aplicabilidad del patrón.

·      Estructura: Diagramas de clases oportunos para describir las clases que intervienen en el patrón.

·      Participantes: Enumeración y descripción de las entidades abstractas (y sus roles) que participan en el patrón.

·      Colaboraciones: Explicación de las interrelaciones que se dan entre los participantes.

·      Consecuencias: Consecuencias positivas y negativas en el diseño derivadas de la aplicación del patrón.

·      Implementación: Técnicas o comentarios oportunos de cara a la implementación del patrón.

·      Código de ejemplo: Código fuente ejemplo de implementación del patrón.

·      Usos conocidos: Ejemplos de sistemas reales que usan el patrón.

·      Patrones relacionados: Referencias cruzadas con otros patrones.



Clasificación de Patrones


Hay varios tipos de patrones, los mas comunes son de arquitectura de diseño y de análisis



Con esta simple tabla podemos identificar algunos de los patrones de diseño más comunes y utilizados a la hora de diseñar

 

3.4 MODELO-VISTA-CONTROLADOR


Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos. El patrón de llamada y retorno MVC (según CMU), se ve frecuentemente en aplicaciones web, donde la vista es la página HTML y el código que provee de datos dinámicos a la página. El modelo es el Sistema de Gestión de Base de Datos y la Lógica de negocio, y el controlador es el responsable de recibir los eventos de entrada desde la vista.

Elementos del patrón:
  Modelo: datos y reglas de negocio
  Vista: muestra la información del modelo al usuario
  Controlador: gestiona las entradas del usuario
-El modelo es el responsable de:
· Acceder a la capa de almacenamiento de datos. Lo ideal es que el modelo sea independiente del sistema de almacenamiento.
· Define las reglas de negocio (la funcionalidad del sistema). Un ejemplo de regla puede ser: "Si la mercancía pedida no está en el almacén, consultar el tiempo de entrega estándar del proveedor".
· Lleva un registro de las vistas y controladores del sistema.
· Si estamos ante un modelo activo, notificará a las vistas los cambios que en los datos pueda producir un agente externo (por ejemplo, un fichero bath que actualiza los datos, un temporizador que desencadena una inserción, etc).

-El controlador es responsable de:
· Recibe los eventos de entrada (un clic, un cambio en un campo de texto, etc.).
· Contiene reglas de gestión de eventos, del tipo "SI Evento Z, entonces Acción W". Estas acciones pueden suponer peticiones al modelo o a las vistas. Una de estas peticiones a las vistas puede ser una llamada al método "Actualizar()". Una petición al modelo puede ser "Obtener_tiempo_de_entrega( nueva_orden_de_venta )".

-Las vistas son responsables de:
·Recibir datos del modelo y los muestra al usuario.
· Tienen un registro de su controlador asociado (normalmente porque además lo instancia).
· Pueden dar el servicio de "Actualización()", para que sea invocado por el controlador o por el modelo (cuando es un modelo activo que informa de los cambios en los datos producidos por otros agentes)


El usuario interactúa con la interfaz de usuario de alguna forma (por ejemplo, el usuario pulsa un botón, enlace, etc.)
1 El controlador recibe (por parte de los objetos de la interfaz-vista) la notificación de la acción solicitada por el usuario. El controlador gestiona el evento que llega, frecuentemente a través de un gestor de eventos (handler) o callback.

2 El controlador accede al modelo, actualizándolo, posiblemente modificándolo de forma adecuada a la acción solicitada por el usuario (por ejemplo, el controlador actualiza el carro de la compra del usuario). Los controladores complejos están a menudo estructurados usando un patrón de comando que encapsula las acciones y simplifica su extensión.

3 El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario. La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario donde se reflejan los cambios en el modelo (por ejemplo, produce un listado del contenido del carro de la compra). El modelo no debe tener conocimiento directo sobre la vista. Sin embargo, se podría utilizar el patrón Observador para proveer cierta indirección entre el modelo y la vista, permitiendo al modelo notificar a los interesados de cualquier cambio. Un objeto vista puede registrarse con el modelo y esperar a los cambios, pero aun así el modelo en sí mismo sigue sin saber nada de la vista. El controlador no pasa objetos de dominio (el modelo) a la vista aunque puede dar la orden a la vista para que se actualice. Nota: En algunas implementaciones la vista no tiene acceso directo al modelo, dejando que el controlador envíe los datos del modelo a la vista.

4 La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo nuevamente.



Bibliografía


Ingeniería de la web y patrones de diseño Mª Paloma Diaz
                                                                   Susana Montero
                                                                   Ignacio Aedo

UML y patrones 1 y 2ª edicion Craig Larman  más usados

Patrones de diseño  Richard Helm
                                Ralph Johnson
                                Jhon Vlissides

Apuntes de la asignatura



martes, 15 de marzo de 2011

ENTRADA 4 - CONTINUACION DEL DESARROLLO DEL TEMA, Y REALIZACIÓN DE EJERCICIO COMPLETO UML.

Durante esta tercera semana de trabajo, hemos realizado lo siguiente:

- CONTINUACIÓN DEL DESARROLLO DEL TEMA: (Se subirá a este blog en breve)


- REALIZACIÓN DEL EJERCICIO COMPLETO DE UML:


El enunciado del ejercicio completo de UML es el siguiente:



Desarrollar el documento de Análisis para el desarrollo de un Sistema cuya función será proporcionar enseñanza a través de Internet, y donde los requisitos a cubrir son los siguientes:


El sistema ofrecerá al alumno la posibilidad de escoger el curso del que desea matricularse de entre la oferta que en cada momento tenga. Un alumno se podrá matricular de tantos cursos como considere conveniente. Los alumnos accederán al sistema vía WEB.
Por cada curso habrá un tutor asignado, pudiendo un mismo tutor dirigir varios cursos. El sistema deberá permitir que un tutor dé de alta un curso en cualquier momento. Los tutores se identificarán por su nombre y clave. Los tutores accederán al sistema a través de un terminal del propio sistema.
Al matricularse un alumno por primera vez se le solicitará el nombre, los apellidos, el DNI y un número de cuenta corriente para los cargos y se le asignará una clave de acceso. Tras cada matricula el sistema realizará el cargo oportuno utilizando para ello un sistema bancario ya desarrollado con el que se conectará.
Cada vez que acceda al sistema para recibir parte de un curso el alumno deberá identificarse mediante su DNI y su clave de acceso. Una vez identificado podrá seleccionar uno de los cursos en los que está matriculado para operar con él.
Las operaciones que un alumno puede realizar con el curso seleccionado son: consultar uno de los temas del curso y depositar un mensaje para el tutor acerca de una duda que pueda surgirle durante el estudio de un tema.
Durante un acceso el alumno podrá consultar  cualquiera de los temas de un curso. Los temas pertenecientes a un curso habrán sido depositados por el tutor al dar de alta el curso.
Durante un acceso el alumno podrá realizar consultar al tutor. Para ello depositará en el sistema un mensaje con la consulta. Cuando el tutor acceda al sistema será informado si tiene alguna consulta pendiente y podrá responderla.
El alumno podrá terminar el acceso sin haber completado el curso. En ese caso el sistema almacenará el estado en que se encuentra ese alumno en ese determinado curso. Cuando el alumno vuelva a seleccionar ese curso en un nuevo acceso el sistema le informará del estado en que lo dejó (temas consultados) y de las respuestas del tutor a los mensajes depositados.

Y su solución:




















lunes, 7 de marzo de 2011

ENTRADA 3 - CONTINUACIÓN DEL DESARROLLO DEL TEMA Y REALIZACIÓN DE EJERCICIO DFD.

Durante esa segunda semana de trabajo, hemos realizado lo siguiente:


- CONTINUACIÓN DEL DESARROLLO DEL TEMA CON EJEMPLOS:


TIPOS DE PATRONES:


Patrón Creador:


El patrón creador nos ayuda a identificar quién debe ser el responsable de la creación (o instanciación) de nuevos objetos o clases.
La nueva instancia deberá ser creada por la clase que:
·      Tiene la información necesaria para realizar la creación del objeto, o
·      Usa directamente las instancias creadas del objeto, o
·      Almacena o maneja varias instancias de la clase
     ·      Contiene o agrega la clase.       
Una de las consecuencias de usar este patron es la visibilidad entre la clase creada y la clase creador.
Una ventaja es el bajo acoplamiento, lo cual supone facilidad de mantenimiento y reutilizacion .La creación de instancias es una de las actividades más comunes en un sistema orientado a objetos. En consecuencia es útil contar con un principio general para la asignación de las responsabilidades de creación. Si se asignan bien el diseño puede soportar un bajo acoplamiento, mayor claridad, encapsulación y reutilización.
Hay que diseñar la clase para que pueda instanciar otras clases sin depender de las clases que se instancia. La clase reutilizable es capaz de permanecer independiente de las instancias de clase delegando la elección de qué instancia se debe crear a otro objeto y referenciar el nuevo objeto creado a través de una interfaz común.

Ejemplo 1:

En la aplicación del punto de venta, ¿quién debería encargarse de crear una instancia VentasLineadeProducto? Desde el punto de vista del patrón Creador, deberíamos buscar una clase
que agregue, contenga y realice otras operaciones sobre este tipo de instancias

 
Una Venta  agrega muchos objetos  por ello, el patrón Creador sugiere que Venta es idónea para asumir la responsabilidad de crear las instancias VentasLineadeProducto.


Ejemplo 2:

Se quiere realizar una aplicación que permita realizar trabajos de edición sobre múltiples tipos de  documentos




El patron creador seria FabricaDocumento, ya que es el que tiene la informacion para la creacion de los objetos.


Patrón Experto: 

El GRASP de experto en información es el principio básico de asignación de responsabilidades. Nos indica, por ejemplo, que la responsabilidad de la creación de un objeto o la implementación de un método, debe recaer sobre la clase que conoce toda la información necesaria para crearlo. De este modo obtendremos un diseño con mayor cohesión y así la información se mantiene encapsulada (disminución del acoplamiento)
Problema: ¿Cuál es el principio general para asignar responsabilidades a los objetos?
Solución: Asignar una responsabilidad al experto en información.
Beneficios: Se mantiene el encapsulamiento, los objetos utilizan su propia información para llevar a cabo sus tareas. Se distribuye el comportamiento entre las clases que contienen la información requerida. Son más fáciles de entender y mantener.

Ejemplo:
Siguiendo con el ejemplo de antes En la aplicación del punto de venta, alguna clase necesita conocer el gran total de la venta. ¿Quién debería ser el responsable de conocer el gran total de la venta?


En la relación de conocimientos

Venta conoce el total de la venta
VentasLineadeProducto conoce el subtotal de la línea de producto
EspecificaciondeProducto conoce el precio del producto

Por lo que podemos asegurar que venta también es el patron experto en este ejemplo, ya que tiene la información del total de la venta.


Patron Controlador: 
El patrón controlador es un patrón que sirve como intermediario entre una determinada interfaz y el algoritmo que la implementa, de tal forma que es la que recibe los datos del usuario y la que los envía a las distintas clases según el método llamado.
Este patrón sugiere que la lógica de negocios debe estar separada de la capa de presentación, esto para aumentar la reutilización de código y a la vez tener un mayor control.
Se recomienda dividir los eventos del sistema en el mayor número de controladores para poder aumentar la cohesión y disminuir el acoplamiento.
Es importante destacar del patrón Controlador que los objetos de interfaz externa (ventanas, applets) y la capa de presentación no deben tener responsabilidad para satisfacer eventos del sistema. En otras palabras, los sistemas de operación  deben ser manejados en el dominio de la capa de objetos en lugar de las capas de interfaz, presentación o aplicación de un sistema.


- REALIZACIÓN DE EJERCICIO DFD:

El enunciado del ejercicio de DFD es el siguiente:

Una empresa compra diferentes piezas a una serie de proveedores que posteriormente venderá a sus clientes, debiendo llevar a cabo el control del almacén (nº de piezas existentes de cada una de ellas).
La aplicación debe gestionar los proveedores, así como las piezas que proporcionan cada uno (proveedor y piezas con sus respectivos precios corresponden al flujo de entrada “proveedor”). Con los proveedores y las piezas que proporciona cada uno de ellos, se genera una lista de precios que se corresponde con los precios que consideremos mejores para cada una de las piezas que se puedan proporcionar al cliente (como criterio de selección se encuentra entre otros la marca de la pieza).
El control del almacén, es decir, las cantidades que tenemos de las diferentes piezas que hemos pedido a los proveedores (flujo de datos de “pieza stock”), determinará si el pedido realizado por el cliente (“pedido cliente”) se puede satisfacer completamente o no, según tengamos o no las piezas pedidas (generando en el caso de no tener dichas piezas un listado de ellas, “lista piezas”). Cuando el pedido se entrega al cliente, se genera la factura correspondiente.

Y su solución:






miércoles, 23 de febrero de 2011

ENTRADA 2: INDICE E INTRODUCCIÓN DEL TEMA, INSTALACIÓN DE SMARTDRAW Y REALIZACIÓN DE LOS EJERCICIOS DE E-R Y CLASES.

Durante esta primera semana de trabajo, hemos realizado lo siguiente:
- El indice e introducción (todo ello provisional, y sujeto a modificaciones) del tema:


INDICE:
  1. Introducción a patrones de diseño
    1.1 Definición y utilidad
    1.2 Elementos de un patrón de diseño
      1.2.3 Plantilla de un patrón de diseño

  2. Clasificación de Patrones y selección de los mismos
  3. Tipos de Patrones 
    1. Creador
    2. Experto
    3. Controlador
      1.  Modelo-vista-Controlador

1. Introducción a los Patrones de diseño:

1.1 Definición y utilidad:

Lo primero que debemos preguntarnos es ¿qué es un patrón de diseño? No hay una definición unica de lo que es un patrón de diseño.

La definición aportada por Alexander en 1979 fue:

Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno, luego se describe el núcleo de la solución a dicho problema de tal forma que se puede usar esta solución un millón de veces sin hacerlo dos veces de la misma forma.


Una definición mas generalizada:

Un patrón es una solución general, fruto de la experiencia, a un problema general que puede adaptarse a un problema concreto.

1.2 Elementos de un patrón de diseño:

Nombre: se utiliza para describir un problema de diseño. Incrementa nuestro vocabulario de diseño.

El problema describe cuando aplicar el patrón. Descripción de un problema y su contexto.

La solución describe los elementos que conforman el diseño, sus relaciones responsabilidades y colaboraciones. El patrón proporciona una descripción abstracta de un problema de diseño y como se organizan esos elementos(clases&objetos) para resolverlo.

Consecuencias son los resultados de aplicar un patrón, amenudo hacen referencia a factores como el espacio de almacenamiento y al tiempo de ejecución. Incluyen el impacto de propiedades del sistema como flexibilidad, portabilidad y extensibilidad.

- TUTORIAL DE INSTALACIÓN DE HERRAMIENTA CASE (SMARTDRAW):

En un principio íbamos a utilizar para la realización de los diagramas el programa Rational Rose recomendado por la profesora de la asignatura, pero al introducir en google "Rational Rose" la primera entrada nos redireccionó a una página de descarga de otro programa (SmartDraw). Decidimos bajarlo (era una versión de prueba), y lo instalamos en nuestro PC (la instalación es muy simple, ya que solo hay que indicarle la ruta de instalación). 

- REALIZACIÓN DE EJERCICIOS DE E-R, Y CLASES:

Una vez istalado el programa SmartDraw, realizamos los ejercicios correspondientes a E-R, y Clases.

El enunciado del ejercicio de E-R es:

Realizar un Modelo Entidad-Relación para el siguiente supuesto de una organización que se dedica a la reparación de unidades de equipamiento utilizadas para producir mercancías. Cada unidad es de un tipo diferente y tiene una descripción. Una avería en una unidad de equipamiento se identifica por un identificador y se detecta en una fecha. Se puede asignar cualquier número de personas a la reparación de una avería y trabajan en ella hasta que se repara. Se registra convenientemente el tiempo empleado en la reparación y el tiempo consumido por cada persona en cada avería. Se pueden utilizar cualquier número de piezas para reparar una avería. Se tiene en cuenta la cantidad usada de cada pieza en la reparación de cada avería. Cada pieza se identifica por un identificador, tiene un peso, una dimensión máxima y puede ser de un único color de entre varios posibles. Cada persona se identifica por un identificador, tiene un nombre y un apellido y cualquier número de titulaciones.

Y su solución:


Y el enunciado del ejercicio de Clases es:

Modelar un sistema que soporte las operaciones de una biblioteca técnica de un departamento universitario. El sistema debe facilitar la búsqueda y préstamo de material bibliográfico, incluyendo libros y revistas técnicas periódicas.


  • El acceso a los libros es libre para alumnos y profesores, pero las revistas solo se prestan a los profesores.
  • Cada tipo de elemento tiene diferentes períodos de préstamo: libros: cuatro semanas a los profesores y dos semanas los alumnos, en el caso de revistas: dos semanas. Si se devuelve un elemento después de la fecha debida, la biblioteca le cargará al usuario una multa, dependiendo del elemento: libro, 10 días/día de retraso, revista, 30 días/día retraso.
  • Para las consultas no hará falta identificarse ante el sistema y éste proporcionará información de los libros que existen y de su situación (prestado o no).
  • Existe un bibliotecario como en el caso anterior y los usuarios deben dar su número de DNI y el código del elemento deseado cuando lo toman prestado o lo devuelven. Cada usuario puede tener cinco elementos prestados como máximo.
  • Los elementos se prestan a los usuarios que tengan menos de cinco elementos prestados y no estén en situación de multados.
Y su solución:


Para la semana que viene, tenemos previsto, avanzar en el tema (completando alguna de los tipos de patrones), y realizar los 2 ejercicios que nos faltan (DFDs) y el ejercicio completo de UML.

miércoles, 16 de febrero de 2011

ENTRADA 1: TUTORIAL - Creación del Blog

Para la creación de este blog, donde iremos publicando los avances de nuestro trabajo de "Análisis e ingeniería del software", hemos seguido los siguientes pasos:
  1- Hemos buscado en google páginas que nos permitan la creación gratuita de un blog.
  2- Nos hemos registrado en dicha página (www.blogger.com) introduciendo los siguientes datos:
    - Una dirección de correo.
    - Nombre del Administrador.
    - Fecha de nacimiento.
    - Hemos elegido un tipo de plantilla para nuestro blog.
    - Nombre del Blog.
    - Y por ultimo, la URL del blog (patrones-de-disenno.blogspot.com).