maría eugenia valencia dpto. ciencias de la computación patrones para asignar responsabilidades...

59
María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar Patrones para asignar responsabilidades responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase (según Booch y Rumbaugh). Las responsabilidades se relacionan con las obligaciones de un objeto respecto a dos categorías de comportamiento: 1. Conocer 2. Hacer

Upload: teresa-rio-silva

Post on 03-Feb-2016

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrones para asignar Patrones para asignar responsabilidadesresponsabilidades

Responsabilidad: Contrato u obligación de un tipo o

clase (según Booch y Rumbaugh).

Las responsabilidades se relacionan con las

obligaciones de un objeto respecto a dos categorías

de comportamiento:

1. Conocer

2. Hacer

Page 2: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrones para asignar Patrones para asignar responsabilidadesresponsabilidades

Entre las responsabilidades de un objeto

relacionadas con hacer se encuentran:

Hacer algo en uno mismo

Iniciar una acción en otros objetos

Controlar y coordinar actividades en otros

objetos

Page 3: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrones para asignar Patrones para asignar responsabilidadesresponsabilidades

Entre las responsabilidades de un objeto

relacionadas con conocer se encuentran:

Estar enterado de los datos privados encapsulados

Estar enterado de la existencia de objetos conexos

Estar enterado de cosas que se pueden derivar o calcular

Page 4: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Las responsabilidades y los diagramas Las responsabilidades y los diagramas de interacciónde interacción

:Ventaimprimir( )

Significa que los objetos Venta tienen la responsabilidadde imprimirse en ellos mismos

Vli:VentasLineadeProducto

2: Imprimir( )

1*:[en cada] vli:= siguiente( )

:VentasLineadeProducto

Page 5: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

PatrónPatrón

Es una descripción de un problema y su solución

(pareja problema/solución), con un nombre y que es

aplicable a otros contextos, con una sugerencia sobre

la manera de usarlo en situaciones nuevas.

Los patrones no pretenden descubrir ni expresar

nuevos principios de ingeniería de software, intentan

codificar el conocimiento, las expresiones y los

principios ya existentes.

Page 6: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

GRASPGRASP(General Responsability Asignment Software (General Responsability Asignment Software

Patterns o Patrones Generales de Software para Patterns o Patrones Generales de Software para Asignar Responsabilidades) Asignar Responsabilidades)

Describen los principios fundamentales de la asignación

de responsabilidades a objetos, expresados en forma de

patrones. Los primeros cinco patrones GRASP son:ExpertoCreadorAlta cohesiónBajo AcoplamientoControlador

Page 7: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Notación UML para los diagramas de Notación UML para los diagramas de claseclase

NombredeClase

Atributos

Métodos

La tercera sección estádestinada a los metodos

Las clases de software muestran los nombres de los

métodos.

Page 8: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón expertoPatrón experto

Solución: Asignar una responsabilidad al experto en

información: la clase que cuenta con la información

necesaria para cumplir la responsabilidad.

Problema: ¿Cual es el principio fundamental en virtud del

cual se asignan las responsabilidades en el diseño orientado

a objetos?

Page 9: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón expertoPatrón expertoEjemplo:

En la aplicación de TPDV una de las responsabilidades

en el caso de uso terminarVenta es calcular el total

de la venta. Alguna clase de objetos necesita conocer

el total de la venta.

¿Quien es el responsable de calcular el total de la venta?

Debe examinarse el Modelo Conceptual.

¿Que información se requiere para calcular el total?

Hay que conocer todas las instancias ventasLineadeProducto de una venta.

La suma de sus subtotales.

Page 10: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón expertoPatrón expertoEsto solo lo conoce la instancia venta. Venta es el

experto

en información y por tanto debe asumir la responsabilidad.

¿Qué información se requiere para determinar el subtotal

de la línea de producto?

:Ventat:= total( ) 1*:[en cada] vli:=

siguiente( )

Vli:VentasLineadeProducto

:VentasLineadeProducto

:EspecificacióndeProducto

2:st:=subtotal( )

2.1:p:=precio( )

Nuevo método

VentaFechahora

Total( )

VentasLineadeProductocantidad

subtotal( )

EspecificacióndeProducto

precio( )

DescripciónprecioCUP

Page 11: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón expertoPatrón experto

Para cumplir con la responsabilidad de conocer y dar el

total de la venta se asignaron tres responsabilidades a

tres clases de objetos, así:

Responsabilidad

Conoce el total de la venta.

Conoce el subtotal de la línea deproducto.Conoce el precio del producto.

Clase

Venta

VentasLineadeProducto

EspecificaciondeProducto

Page 12: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón creadorPatrón creadorSolución: Asignarle a la clase B la responsabilidad de crear

una instancia de clase A en uno de los siguientes casos: B agrega los objetos A. B contiene los objetos A. B registra las instancias de los objetos A. B utiliza específicamente los objetos A. B tiene los datos de inicialización que serán

transmitidos a A cuando este objeto sea creado. B es un creador de los objetos A. Si existe más de una opción, prefiera la clase B que

agregue o contenga la clase A.

Problema: ¿Quién debería ser responsable de crear unanueva instancia de alguna clase?

Page 13: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón creadorPatrón creador

Ejemplo:

Para el caso de uso comprarProductos existe la operación

IntroducirProducto. ¿Quién debería encargarse de crear

una instancia VentasLineadeProducto ?

Según el patrón creador se debe buscar una clase de

objeto que agregue, contenga y realice otras operaciones

sobre este tipo de instancias.

Examinando el Modelo Conceptual, Venta puede asumir esa

responsabilidad.

Page 14: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón creadorPatrón creador

Creación de un objeto VentasLineadeProducto.

:Venta

:VentasLineadeProducto

hacerLineadeProducto(cantidad)

1:crear(cantidad)

Nuevo método

Venta

Fechahora

hacerLineadeProducto()total()

Esta asignación de responsabilidades requiere definir en

Venta un método de hacerLineadeProducto.

Page 15: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Solución: Asignar una responsabilidad para mantener bajo

acoplamiento.

Problema: ¿Cómo dar soporte a una dependencia escasa y

a un aumento de la reutilización?

El acoplamiento es una medida de la fuerza con que una

clase está conectada a otras clases, con que las conoce y

con que recurre a ellas. Una clase con bajo (o débil)

acoplamiento no depende de muchas otras; ”muchas otras”

depende del contexto, pero no lo estudiaremos aquí por el

momento.

Patrón bajo acoplamientoPatrón bajo acoplamiento

Page 16: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Una clase con alto (o fuerte) acoplamiento recurre a

muchas otras. Este tipo de clases no es conveniente:

presentan los siguientes problemas: Los cambios de las clases afines ocasionan cambios

locales.

Son más difíciles de entender cuando están aisladas.

Son más difíciles de reutilizar porque se requiere la presencia de otras clases de las que dependen.

Patrón bajo acoplamientoPatrón bajo acoplamiento

Page 17: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón bajo acoplamientoPatrón bajo acoplamiento

Ejemplo:

Dado el siguiente diagrama parcial de clases para la

aplicación de TPDV

Pago TPDV Venta

Suponga que necesitamos crear una instancia Pago y

asociarla a Venta. ¿Qué clase se encargará de hacer esto?

Page 18: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón bajo acoplamientoPatrón bajo acoplamiento

TPDV crea Pago.

:TPDVefectuarPago( )

p:Pago

:Venta

1:crear( )

2:agregarPago(p )

Venta crea Pago

:TPDVefectuarPago( )

:Venta

:Pago

1:efectuarPago( )

1.1:crean( )

Page 19: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón alta cohesiónPatrón alta cohesiónSolución: Asignar una responsabilidad de modo que la

cohesión siga siendo alta.

Problema: ¿Cómo mantener la complejidad dentro de

límites manejables?

En la perspectiva del diseño orientado a objetos, la

cohesión (o, más exactamente, la cohesión funcional) es

una medida de cuán relacionadas y enfocadas están las

responsabilidades de una clase. Una alta cohesión

caracteriza a las clases con responsabilidades

estrechamente relacionadas que no realicen un trabajo

enorme.

Page 20: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón alta cohesiónPatrón alta cohesiónUna clase con baja cohesión hace muchas cosas no

afines o un trabajo excesivo. No conviene este tipo de

clases pues presentan los siguientes problemas: Son difíciles de comprender. Son difíciles de reutilizar. Son difíciles de conservar. Son delicadas: las afectan constantemente los cambios.

Las clases con baja cohesión a menudo representan un

alto grado de abstracción o han asumido

responsabilidades que deberían haber delegado a otros

objetos.

Page 21: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón controladorPatrón controlador

Solución: Asignar la responsabilidad del manejo de un

mensaje de los eventos de un sistema a una clase querepresente una de las siguientes opciones:

El “sistema” global (controlador de fachada). La empresa u organización global (controlador

de fachada). Algo en el mundo real que es activo y que pueda

participar en la tarea (controlador de tareas). Un manejador artificial de todos los eventos del

sistema de un caso de uso, generalmente denominados “manejador <NombreCasodeUso> (controlador de casos de uso).

Page 22: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón controladorPatrón controlador

Utilice la misma clase de controlador con todos los eventos

del sistema en el mismo caso de uso.

Corolario: Nótese que en esta lista no figuran las clases

“ventana”, “aplicación”, “vista” ni “documento”. Estas clases

no deberían ejecutar las tareas asociadas a los eventos del

sistema; generalmente las reciben y las delegan al controlador.

Page 23: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón controladorPatrón controlador

Problema: ¿Quién debería encargarse de atender un evento del

sistema?

Un evento del sistema es un evento de alto nivel generado por

un actor externo; es un evento de entrada externa. Se asocia a

operaciones del sistema: las que emite en respuesta a los

eventos del sistema. Por ejemplo, cuando un cajero que usa un

sistema de terminal en el punto de venta oprime el botón

“Terminar Venta”, está generando un evento sistémico que

indica que “la venta ha terminado”.

Page 24: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón controladorPatrón controladorUn controlador es un objeto de interfaz no destinada

alusuario que se encarga de manejar un evento delsistema.

Ejemplo:En la aplicación del punto de venta se dan variasoperaciones del sistema, como se advierte en la siguientefigura:

Sistema

terminarVenta()introducirProducto()efectuarPago()

Page 25: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Patrón controladorPatrón controladorDurante el análisis del comportamiento del sistema, sus

operaciones sonasignadas al tipo Sistema, para indicar que son operaciones del

sistema.Pero ello no significa que una clase llamada Sistema las ejecute

duranteel diseño.

Más bien, durante el diseño, a la clase Controlador se le asigna laresponsabilidad de las operaciones del sistema.¿Quién debería ser el controlador de eventos sistémicoscomo introducirProducto y terminarVenta?

:???introducirProducto(cup,cantidad)

Page 26: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Diseñando con objetos y patronesDiseñando con objetos y patrones

Para elaborar diagramas de interacción:

1. Prepare un diagrama individual para cada operación del sistema en el paso iterativo actual.

Por cada evento del sistema construya un diagrama que lo incluya como mensaje inicial.

2. Si el diagrama se vuelve complejo, dividalo en otros más pequeños.

3. Con las responsabilidades contractuales, las poscondiciones y la descripción del caso de uso como punto de partida, diseñe un sistema de objetos interactuantes para que realicen las tareas. Aplique los patrones GRASP y otros para elborar un buen diseño.

Page 27: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Diagrama de colaboración Diagrama de colaboración introducirProductointroducirProducto

:TPDV

:CatalogodeProductos

:Venta

Vli:VentasLineadeProducto

:VentasLineadeProducto

:EspecificaciondeProducto

introducirProducto(cup,cant)

1.1:crear()2:especif:=especificacion(cup)

2.1:especif:=encontrar(cup)

3:hacerLineadeProducto(especif,cant)

3.1:crear(especif,cant)

3.2:agregar(vli)

1:[nueva venta]crear()Según creador

Según experto

Mensaje dirigidoal propio objetocolección

Page 28: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Diagrama de colaboración Diagrama de colaboración terminarVentaterminarVenta

:TPDV :Venta

terminarVenta( ) seTermina( )

Según controlador Según experto

seTermina(){ estaTerminada:=verdadero}

Page 29: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Diagrama de colaboración Diagrama de colaboración total de total de VentaVenta

No todo diagrama de colaboración comienza con un mensaje de eventos

del sistema; puede empezar con cualquier mensaje cuyas interacciones

desee mostrar el diseñador.

:Venta sli:VentasLineadeProducto

EspecifProEspecificaciondeProducto

:VentasLineadeProducto

tot:=total( )

1*:[para cada]vli:=siguiente()

2:st:=subtotal()

2.1: pre:=pric()

Según ExpertoSegún Experto

Page 30: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Diagrama de colaboración Diagrama de colaboración efectuarPagoefectuarPago

:TPDV :Venta

:Pago:Tienda

:VentasLineadeProducto

efectuarPago(efectivoOfrecido) 1:efectuarPago(efectivoOfrecido)

1.1:crear(efectivoOfrecido)

Según ControladorSegún Creador,Bajo Acoplamiento

2:agregarVenta(v)

2.1:agregar(v)

Según Experto

Page 31: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Diagrama de colaboración Diagrama de colaboración iniciariniciar

• Se recomienda hacerlo al final, después de considerar el resto de operaciones del sistema.

• Se deben conocer los contextos donde puede ocurrir la inicialización.

• La forma como comienza una aplicación y como se inicializa dependen del lenguaje de programación y del sistema operativo.

• Una forma común de diseño es crear, al final, un objeto inicial del dominio: el primero del dominio del problema que generamos.

• Su método de inicialización (ej. Constructor de java) es el encargado de producir el resto de objetos del dominio del problema e inicializarlos.

Page 32: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Interpretación de la operación del Interpretación de la operación del sistema iniciarsistema iniciar

1. En un diagrama de colaboración, envíe un mensaje crear() para producir el objeto inicial del dominio.

2. (opcional) Si el objeto inicial va a asumir el control del proceso, en un segundo diagrama de colaboración envíele un mensaje ejecutar (u otro equivalente).

Page 33: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Elección del objeto inicial del dominioElección del objeto inicial del dominio

Escoja como objeto inicial del dominio:

Una clase que represente todo el sistema de información lógico.

Una clase que represente íntegramente el negocio u organización.

En la aplicación del punto de venta, entre las decisiones

razonables acerca del objeto inicial se encuentran:

Todo el Sistema de TPDV, SistemaInfor-información lógico macionalMenudeo

Negocio u organización Tiendaglobal

Page 34: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

El diagrama de colaboración El diagrama de colaboración guardar-guardar-crearcrear

:Tienda :TPDV

:EspecificaciondeProducto

ep:EspecificaciondeProducto

cp:CatalogodeProductos

Transmita una referencia aCatalogodeProductos y de aquía TPDV, de modo que seapermanentemente visible a éste.

El asterisco en el número desecuencia indica que el mensaje ocurre en la sección de manerarepetida o iterativa.

crear() 2:crear(cp)

1:crear() 1.1:crear()

1.2.2*:agregar(ep)

1.2.1*:crear(cup,precio,descripcion)1.2: cargarEspecifPro()

1.2.1*:crear(cup,precio,descripcion)

Según Creador

Page 35: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Cómo conectar la capa de presentación Cómo conectar la capa de presentación y la de dominioy la de dominio

:TPDVAppletcrear()

tienda:Tienda2:t:=obtenerTPDV():TPDV

1:crear()

Page 36: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Cómo conectar la capa de presentación Cómo conectar la capa de presentación y la de dominioy la de dominio

:TPDVApplet

tpdv:TPDV

1:IntroducirProducto(cup,cant)

enIntroducirProducto()

Capa depresentación

Capa deldominio

Evento del sistema

Oprime botón

Page 37: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Cómo conectar la capa de presentación Cómo conectar la capa de presentación y la de dominioy la de dominio

:TPDVApplet

tpdv:TPDV

1:IntroducirProducto(cup,cant)

enIntroducirProducto()

Capa depresentación

Capa deldominio

2:[no venta] venta:=obtenerVenta():Venta

venta:Venta

3:t:=total():Flotante

Oprime botón

Page 38: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Diagramas de clases del diseñoDiagramas de clases del diseño

Su preparación exige crear antes:

Diagramas de interacción. De ellos se identifican las clases de software que intervienen en la solución y sus métodos.

Modelo conceptual: a partir de él se agregan detalles a la definición de las clases.

Los diagramas de clases se pueden crear al mismo tiempo

que los diagramas de interacción.

Page 39: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Ejemplo de un diagrama de clases de Ejemplo de un diagrama de clases de diseñodiseño

TPDV

introducirProducto()

Venta

FechaestaTerminada:Booleanohora

hacerLíneadeProducto()

Captura

1 1

Casilla de tres seccionespara la definición de clase Navegabilidad

Métodos Información sobre tipos

Page 40: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Diagramas de clases del diseñoDiagramas de clases del diseño

Describe gráficamente las especificaciones de las clases de

software y de las interfaces (por ejemplo, las de Java) en

una aplicación.

Contiene la siguiente información: Clases, asociaciones y atributos. Interfaces, con sus operaciones y constantes. Métodos. Información sobre los tipos de los atributos. Navegabilidad. Dependencias.

Page 41: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Diagramas de clases del diseñoDiagramas de clases del diseño

Para elaborar un diagrama de clases orientado al diseño:

1. Identifique todas las clases que participan en la solución del software. Para ello analice los diagramas de interacción.

2. Dibújelas en un diagrama de clases.3. Duplique los atributos provenientes de los conceptos

asociados del modelo conceptual.4. Agregue los nombres de los métodos analizando los

diagramas de interacción.

Page 42: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Diagramas de clases del diseñoDiagramas de clases del diseño

5. Incorpore la información sobre los tipos a los atributos y a los métodos.

6. Agregue las asociaciones necesarias para dar soporte a la visibilidad requerida de los atributos.

7. Agregue flechas de navegabilidad a las asociaciones para indicar la dirección de la visibilidad de los atributos.

8. Agregue las líneas de relaciones de dependencia para indicar la visibilidad no relacionada con los atributos.

Page 43: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Comparación entre el Modelo Comparación entre el Modelo ConceptualConceptual

y los Diagramas de Clases de Diseñoy los Diagramas de Clases de DiseñoTPDV

CapturaModelo Conceptual

Venta

fechaestaTerminada:Booleanohora

1 1

Concepto; abstracción

Diagrama de clasesdel diseño

TPDV

terminarVenta()introducirProducto()efectuarPago()

Venta

fechaestaTerminada:Booleanohora

hacerLineadeProducto()

Captura

1 1

Componente del software

Page 44: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Creación de Diagramas de Clases de Creación de Diagramas de Clases de DiseñoDiseño

para el punto de ventapara el punto de venta1. Identificar las clases de software y su ilustración. (Se encuentran examinando todos los diagramas de interacción, luego se dibujan los diagramas de clase correspondientes y se incluyen los atributos que aparecen en el modelo conceptual).

TPDV

Tiendadireccionnombre

CatalogodeProductos

cantidad

EspecificaciondeProductodescripcionprecioCUP

VentafechaestaTerminadahora

VentasLineadeProducto

cantidad

Pagomonto

Page 45: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Creación de Diagramas de Clases de Creación de Diagramas de Clases de DiseñoDiseño

para el punto de ventapara el punto de venta2. Agregar los nombres de los métodos. Estos se sacan de los mensajes de los diagramas de colaboración. Por cada mensaje enviado a la clase X, esta deberá definir un método con el mismo nombre.

:TPDV :Venta3:hacerLineadeProductos(especif,cant)

VentafechaestaTerminada

hora

hacerLineadeProducto()

Page 46: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Creación de Diagramas de Clases de Creación de Diagramas de Clases de DiseñoDiseño

para el punto de ventapara el punto de venta TPDV

terminarVenta()introducirProducto()efectuarPago()

TiendadireccionnombreagregarVenta()

CatalogodeProductos

especificación()

EspecificaciondeProductodescripcionprecioCUP

VentafechaestaTerminadahoraseTermina()hacerLineadeProducto()efectuarPago()total()

VentasLineadeProducto

cantidad

subtotal()

Pagomonto

Page 47: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Aspectos especiales referentes a los Aspectos especiales referentes a los nombres de los métodosnombres de los métodos

El mensaje crear: En UML representa instanciación einicialización.En C++ Asignación automática o en el

almacenamiento libre con New llamada al constructor.

En JavaInvocar New seguido de la llamada a un constructor.

Se acostumbra omitir los métodos relacionados con lacreación y los constructores procedentes del diagrama

declases del diseño.

Page 48: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Métodos de Acceso: Son los que recuperan o los que establecen el valor de los atributos. Una estructura común cuenta con una forma de tener acceso y de establecer el valor para cada atributo y declara privados todos los atributos (obliga al encapsulamiento).

Estos métodos normalmente NO se incluyen en la descripción del diagrama de clase (Ejemplo: El método obtenerPrecio no se muestra auque esta presente).

Aspectos especiales referentes a los Aspectos especiales referentes a los nombres de los métodosnombres de los métodos

Page 49: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Mensajes a Multiobjetos: Un mensaje a un multiobjeto se interpreta como destinado al objeto contenedor/colección

Aspectos especiales referentes a los Aspectos especiales referentes a los nombres de los métodosnombres de los métodos

El mensaje encontrar dirigido a un multiobjeto se interpreta como destinado a un objeto contenedor/colección; ejemplo: Una tabla Hashtable, un Map de C++ o un Dictionary de Smalltalk.

:CatalogodeProductos

:EspecificaciondeProducto

2:especif:=especificacion(cup)

2.1:especif:=encontrar(cup)

El método encontrar NO forma parte de la clase EspecificacióndeProducto, sino más bien de la definición de la tabla Hastable o Dictionary.

Page 50: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Las clases contenedor/colección (como java.util.Vector y

java.util.Hashtable) son clases predefinidas de las

bibliotecas y no se acostumbra mostrarlas de forma

explícita en el diagrama de clases porque aportan muy

poca información nueva e incorporan ruido.

Aspectos especiales referentes a los Aspectos especiales referentes a los nombres de los métodosnombres de los métodos

Page 51: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

3. Agregar más información sobre los tipos. Es opcional

mostrar el tipo de los atributos, de los parametros del

método y de los valores de devolver método. Se

recomienda

mostrarlo cuando se usan herramientas CASE con

generación automática de código porque ellas

requieren

todos los detalles

Creación de Diagramas de Clases de Creación de Diagramas de Clases de DiseñoDiseño

para el punto de ventapara el punto de venta

Page 52: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

TPDV

terminarVenta()introducirProducto(cup:Entero,cant:Entero)efectuarPago(efectivoOfrecido:Cantidad)

Tienda

direccion:Direccionnombre:Texto

agregarVenta(v.Venta)

CatalogodeProductos

especificacion(cup:Entero):EspecificaciondeProducto

EspecificaciondeProducto

descripcion:Textoprecio:Cantidadcup:CUP

Ventafecha:FechaestaTerminada:Booleanohora:Hora

seTermina()hacerLineadeProducto(especif:EspecificaciondeProd,cant:Entero)efectuarPago(efectivoOfrecido: Cantidad)total():Cantidad

VentasLineadeProducto

cantidad:Entero

subtotal():Cantidad

Pago

monto:Cantidad

Incorporación de información sobre los tipos.

Creación de Diagramas de Clases de Creación de Diagramas de Clases de DiseñoDiseño

para el punto de ventapara el punto de venta

Page 53: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

4. Incorporar Asociaciones y Navegabilidad.La Navegabilidad indica la posibilidad de navegar unidireccionalmente en una asociación, desde los objetos fuente hasta la clase destino. También significa visibilidad (generalmente de atributos).

Creación de Diagramas de Clases de Creación de Diagramas de Clases de DiseñoDiseño

para el punto de ventapara el punto de venta

La flecha de navegabilidad indica que los objetos TPDV están conectadosunidireccionalmente con los objetos Venta.

TPDV

terminarVenta()introducirProducto()efectuarPago()

Venta

fechaestaTerminadahora

seTermina()hacerLineadeProducto()efectuarPago()total()

Captura

1 1

La clase TPDV probablemente tengaun atributo que apunta a un objetoVenta.

Page 54: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

En los diagramas de clase orientados al diseño, la mayoría de las asociaciones deberían completarse con las flechas necesarias de navegación.

Creación de Diagramas de Clases de Creación de Diagramas de Clases de DiseñoDiseño

para el punto de ventapara el punto de venta

La visibilidad y las asociaciones requeridas entre las clases se indican con los diagramas de interacción. Es necesario definir una asociación con una flecha de navegabilidad A a B en las siguientes situaciones comunes:• A envía un mensaje a B.• A crea una instancia B.• A necesita mantener una conexión con B.

Page 55: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Asociaciones con símbolos de Asociaciones con símbolos de navegabilidadnavegabilidad

Tienda

direccion:Direccionnombre:Texto

agregarVenta( )

TPDV

terminarVenta( )introducirProducto( )efectuarPago( )

CatalogodeProductos

especificacion( )

EspecificaciondeProducto

descripcion:Textoprecio:Cantidadcup:CUP

Ventafecha:FechaestaTerminada:Booleanohora:Hora

seTermina( )hacerLineadeProducto( )efectuarPago( )total( )

VentasLineadeProducto

cantidad:Entero

subtotal( )

Pago

monto:Cantidad

1

1

1 1

1

1

1

1 1

1 1

1

1 1..*

1..*

*Registros-terminados

Captura Contiene

Contiene

Usa

Alberga

Mira-en

Pagado-por

Page 56: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Creación de Diagramas de Clases de Creación de Diagramas de Clases de DiseñoDiseño

para el punto de ventapara el punto de venta5. Relaciones de Dependencia.

El UML incluye una relación general de dependencia la cual indica que un elemento (clase, caso de uso, etc.) conoce la existencia de otro. Se denota con una línea punteada y con flecha.

En los diagramas de clase, la relación de dependencia describe la visibilidad de un parámetro global o visibilidad declarada localmente.

Page 57: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Tienda

direccion:Direccionnombre:Texto

agregarVenta( )

TPDV

terminarVenta( )introducirProducto( )efectuarPago( )

CatalogodeProductos

especificacion( )

EspecificaciondeProducto

descripcion:Textoprecio:Cantidadcup:CUP

Ventafecha:FechaestaTerminada:Booleanohora:Hora

seTermina( )hacerLineadeProducto( )efectuarPago( )total( )

VentasLineadeProducto

cantidad:Entero

subtotal( )

Pago

monto:Cantidad

1

1

1 1

1

1

1

1 1

1 1

1

1 1..*

1..*

*Registros-terminados

Captura Contiene

Contiene

Usa

Alberga

Mira-en

Pagado-porDependencia de TPDV que conoce sobre EspecificaciondeProducto.Se recomienda cuando existe un parámetro y visibilidad global o declarada localmente.

Creación de Diagramas de Clases de Creación de Diagramas de Clases de DiseñoDiseño

para el punto de ventapara el punto de venta

Page 58: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Notación de los detalles de los Notación de los detalles de los miembros miembros de la clasede la claseNombre de la clase

atributoatributo:tipoatributo:tipo=valor inicialatributodeClase/atributoDerivado...

metodo1()metodo2(lista de parametros):tipo de retornometodoAbstracto()+metodoPrivado()#metodoProtegido()metododeClase()...

Java.awt.Font

plain:Integer=0bold:Integer=1name:Stringstyle:Integer=0...

+getFont(name:String):Font+getName():String...

Java.awt.Toolkit

#createButton(target:Button):ButtonPeer...+getColorModel():ColorModel...

Page 59: María Eugenia Valencia Dpto. Ciencias de la Computación Patrones para asignar responsabilidades Responsabilidad: Contrato u obligación de un tipo o clase

María Eugenia ValenciaDpto. Ciencias de la Computación

Notación de los detalles de los Notación de los detalles de los miembros miembros de la clasede la clase

TPDV

+terminarVenta()+introducirProducto()+efectuarPago()

Tienda

direccionnombre

+agregarVenta()

CatalogodeProductos

+especificacion()

EspecificaciondeProducto

descripcionpreciocup

VentafechaestaTerminadahora

+seTermina()+hacerLineadeProducto()+efectuarPago()+total()

VentasLineadeProducto

cantidad

+subtotal()

Pago

monto