ISG2 - GRASP con diagramas de interacción

88
Departamento de Departamento de Lenguajes y Sistemas Informáticos Lenguajes y Sistemas Informáticos escuela técnica superior de ingeniería informática Diagramas de interacción UML + Patrones de Asignación de Responsabilidades (GRASP) Ingeniería del Software de Gestión II

Transcript of ISG2 - GRASP con diagramas de interacción

Page 1: ISG2 - GRASP con diagramas de interacción

Departamento deDepartamento deLenguajes y Sistemas InformáticosLenguajes y Sistemas Informáticos

escuela técnica superiorde ingeniería informática

Diagramas de interacción UML+

Patrones de Asignación de Responsabilidades

(GRASP)

Ingeniería del Software de Gestión II

Page 2: ISG2 - GRASP con diagramas de interacción

Objetivos

♦ ¿Dónde estamos?

♦ Aprender Sintaxis de los Diag. De Interacción UML

♦ Introducir el concepto de los GRASP

♦ Conocer los distintos GRASP

Page 3: ISG2 - GRASP con diagramas de interacción

Departamento deDepartamento deLenguajes y Sistemas InformáticosLenguajes y Sistemas Informáticos

escuela técnica superiorde ingeniería informática

Diagramas de interacción UML

Ingeniería del Software de Gestión II

Page 4: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción

♦ Diagramas de secuencia

♦ Diagramas de colaboración

Page 5: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción

♦ Diagramas de secuencia

♦ Diagramas de colaboración

Page 6: ISG2 - GRASP con diagramas de interacción

Introducción

♦ Dos notaciones para un mismo objetivo:

“ilustrar el modo en el que los objetos interaccionan por medio de mensajes”

♦ Nos permiten modelar la vista dinámica

♦ Ayuda a implementar la lógica de los métodos

Page 7: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción

♦ Diagramas de secuencia

♦ Diagramas de colaboración

Page 8: ISG2 - GRASP con diagramas de interacción

Diagramas de secuencia

♦ Cada objeto se representa con una caja y cada mensaje con una flecha

♦ Las líneas que se extienden hacia abajo indican la línea de tiempo de cada objeto

: Register : Sale

doA

doB

doX

doC

doD

typical sychronous message shown with a filled-arrow line

a found message whose sender will not be specified

execution specification bar indicates focus of control

Page 9: ISG2 - GRASP con diagramas de interacción

Representación de clases e instancias

sales: ArrayList<Sale>

:Sale s1 : Sale

lifeline box representing an instance of an ArrayList class, parameterized (templatized) to hold Sale objects

lifeline box representing an unnamed instance of class Sale

lifeline box representing a named instance

sales[ i ] : Sale

lifeline box representing one instance of class Sale, selected from the salesArrayList <Sale> collection

x : List

«metaclass»Font

lifeline box representing the class Font, or more precisely, that Font is an instance of class Class – an instance of a metaclass

related example

List is an interface

in UML 1.x we could not use an interface here, but in UML 2, this (or an abstract class) is legal

Page 10: ISG2 - GRASP con diagramas de interacción

Mensajes a “self” o “this”

: Register

doX

clear

Page 11: ISG2 - GRASP con diagramas de interacción

Creación y destrucción de instancias

♦ Creación:

♦ Destrucción:

: Register : Sale

makePayment(cashTendered): Paymentcreate(cashTendered)

authorize

note that newly created objects are placed at their creation "height"

: Sale

: Paymentcreate(cashTendered)

...the «destroy» stereotyped message, with the large X and short lifeline indicates explicit object destruction

«destroy» X

Page 12: ISG2 - GRASP con diagramas de interacción

Fragmentos

♦ Mecanismo a través del cual se puede realizar la especificación de bloques repetitivos, opcionales, alternativos, entre otros

♦ Principales tipos de fragmentos:

Indica que el fragmento de diagrama incluye varias hebraspar

Indica que el fragmento de diagrama es opcional.opt

Indica que el fragmento de diagrama se ejecuta repetidas veces

loop

Indica que el fragmento de diagrama es una alternativaalt

SignificadoOperador

Page 13: ISG2 - GRASP con diagramas de interacción

Alternativas

: B: A

calculate

doX

: C

calculate

[ x < 10 ]alt

[ else ]

Page 14: ISG2 - GRASP con diagramas de interacción

Repeticiones

st = getSubtotal

lineItems[i] :SalesLineItem

t = getTotal

[ i < lineItems.size ]loop

: Sale This lifeline box represents one instance from a collection of many SalesLineItem objects.

lineItems[i] is the expression to select one element from the collection of many SalesLineItems; the ‘i” value refers to the same “i” in the guard in the LOOP frame

an action box may contain arbitrary language statements (in this case, incrementing ‘i’)

it is placed over the lifeline to which it applies

i++

st = getSubtotal

lineItems[i] :SalesLineItem

t = getTotal

loop

: Sale

Page 15: ISG2 - GRASP con diagramas de interacción

Opcionalidad

calculate

: Bar

yy

xx

[ color = red ]opt

: Foo

Page 16: ISG2 - GRASP con diagramas de interacción

Marcos

interaction occurrence

note it covers a set of lifelines

note that the sd frame it relates to has the same lifelines: B and C

doA

: A : B : C

doB

sd AuthenticateUser

ref AuthenticateUserauthenticate(id)

doXdoM1

: B : C

authenticate(id)

doM2

ref DoFoo sd DoFoo

doX

: B : C

doY

doZ

Page 17: ISG2 - GRASP con diagramas de interacción

Mensajes polimórficos

:Register

authorizedoX

:Payment {abstract}

polymorphic message object in role of abstract superclass

:DebitPayment

doAauthorize

:Foo

stop at this point – don’t show any further details for this message

doB

:CreditPayment

doXauthorize

:Bar

Payment {abstract}

authorize() {abstract}...

CreditPayment

authorize()...

DebitPayment

authorize()...

Payment is an abstract superclass, with concrete subclasses that implement the polymorphic authorize operation

separate diagrams for each polymorphic concrete case

Page 18: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción

♦ Diagramas de secuencia

♦ Diagramas de colaboración

Page 19: ISG2 - GRASP con diagramas de interacción

Diagramas de colaboración

♦ Cada objeto se representa con una caja, las relaciones entre objetos con líneas y los mensajes con flechas que indican la dirección

♦ Se especifica el orden relativo mediante números en cada mensaje

1: makePayment(cashTendered)2: foo

2.1: bar: Register :Sale

link line

Page 20: ISG2 - GRASP con diagramas de interacción

Representación de clases e instancias (Igual que en los DS)

sales: ArrayList<Sale>

:Sale s1 : Sale

lifeline box representing an instance of an ArrayList class, parameterized (templatized) to hold Sale objects

lifeline box representing an unnamed instance of class Sale

lifeline box representing a named instance

sales[ i ] : Sale

lifeline box representing one instance of class Sale, selected from the salesArrayList <Sale> collection

x : List

«metaclass»Font

lifeline box representing the class Font, or more precisely, that Font is an instance of class Class – an instance of a metaclass

related example

List is an interface

in UML 1.x we could not use an interface here, but in UML 2, this (or an abstract class) is legal

Page 21: ISG2 - GRASP con diagramas de interacción

Numeración de los mensajes

: Amsg1 : B1: msg2

: C

1.1: msg3

2.1: msg5

2: msg4

: D

2.2: msg6

first second

fourth

sixth

fifth

third

Page 22: ISG2 - GRASP con diagramas de interacción

Mensajes a “self” o “this”

: Register

msg1

1: clear

Page 23: ISG2 - GRASP con diagramas de interacción

Creación de instancias

1: create(cashier)

: Register :Sale

create message, with optional initializing parameters. This will normally be interpreted as a constructor call.

«create»1: make(cashier)

: Register :Sale

if an unobvious creation message name is used, the message may be stereotyped for clarity

1: create(cashier)

: Register :Sale {new}

Three ways to show creation in a communication diagram

Page 24: ISG2 - GRASP con diagramas de interacción

Alternativas

1a [test1] : msg2: A : B

: C

1a.1: msg3

msg1

: D

1b [not test1] : msg4

1b.1: msg5

: E

2: msg6

unconditional after either msg2 or msg4 1a and 1b are mutually

exclusive conditional paths

Page 25: ISG2 - GRASP con diagramas de interacción

Repeticiones

1 * [ i = 1..n ]: num = nextInt: SimulatorrunSimulation : Random

iteration is indicated with a * and an optional iteration clause following the sequence number

Page 26: ISG2 - GRASP con diagramas de interacción

Repeticiones

1 * [i = 1..n]: st = getSubtotal: Salet = getTotal

This lifeline box represents one instance from a collection of many SalesLineItem objects.

lineItems[i] is the expression to select one element from the collection of many SalesLineItems; the ‘i” value comes from the message clause.

lineItems[i]:SalesLineItem

this iteration and recurrence clause indicates we are looping across each element of the lineItems collection.

1 *: st = getSubtotal: Salet = getTotal lineItems[i]:SalesLineItem

Less precise, but usually good enough to imply iteration across the collection members

Page 27: ISG2 - GRASP con diagramas de interacción

Opcionalidad

1 [ color = red ] : calculate: Foo : Bar

message1

conditional message, with test

Page 28: ISG2 - GRASP con diagramas de interacción

Mensajes polimórficos

:Register authorizedoX :Payment {abstract}

polymorphic message

object in role of abstract superclass

:DebitPayment

authorize

:Foo

stop at this point – don’t show any further details for this message

separate diagrams for each polymorphic concrete case

doAdoB :CreditPayment

authorize

:BardoX

Page 29: ISG2 - GRASP con diagramas de interacción

Mensajes polimórficos

Diagrama de Secuencia

Vs.

Diagrama de Colaboración

Page 30: ISG2 - GRASP con diagramas de interacción

Bibliografía

♦ Específica:

♦ “http://http://www.uml.orgwww.uml.org//”, Especificación de la OMG.

♦ De Apoyo:♦ “http://http://www.sparxsystems.com.au/UML_Tutorial.htmwww.sparxsystems.com.au/UML_Tutorial.htm”,

Tutorial on-line de UML.

Page 31: ISG2 - GRASP con diagramas de interacción

Cuestiones de Examen

♦ En Problemas:♦ Dibuje un diagrama de secuencia explicando el

proceso de carga en un repositorio de Subversion, de un proyecto en Eclipse, la modificación de un fichero y su actualización en dicho repositorio.

♦ Dado un determinado sistema… realice un diagrama de secuencia que ilustre la ejecución del método “registrado” para determinadas condiciones…

Page 32: ISG2 - GRASP con diagramas de interacción

Departamento deDepartamento deLenguajes y Sistemas InformáticosLenguajes y Sistemas Informáticos

escuela técnica superiorde ingeniería informática

Patrones de Asignación de

Responsabilidades (GRASP)

Ingeniería del Software de Gestión II

Page 33: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción♦ Experto en Información♦ Creador

♦ Alta Cohesión♦ Bajo Acoplamiento♦ Fabricación Pura♦ Indirección♦ Variaciones Protegidas

Page 34: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción♦ Experto en Información♦ Creador

♦ Alta Cohesión♦ Bajo Acoplamiento♦ Fabricación Pura♦ Indirección♦ Variaciones Protegidas

Page 35: ISG2 - GRASP con diagramas de interacción

Introducción

♦ Principio (RAE)

♦ Cada una de las primeras proposiciones o verdades fundamentales por donde se empiezan a estudiar las ciencias o las artes

♦ Cualquier disciplina con cierto grado de madurez cuenta con un conjunto de principios

♦ (E ) Indique todos los principios relacionados con el DOO que conozca

♦ (E ) Explique claramente los principios identificados.

♦ ¿Es posible comunicar los principios de manera sistemática?

Page 36: ISG2 - GRASP con diagramas de interacción

Introducción

♦ Durante mucho tiempo estos principios se han transmitido independientemente

♦ ¿Es posible transmitirlos de una manera homogénea, compacta que permita su aplicación sistemática?

♦ Según C. Larman Sí. El ha propuesto un conjunto de principios a los que ha denominado GRASP (General Responsability Assignment Software Pattern)

♦ El diseño de aplicaciones software es una de las actividades en las que aún predomina el arte sobre el método.

Page 37: ISG2 - GRASP con diagramas de interacción

Introducción

♦ GRASP (pillar, comprender,…) Larman la eligió para sugerir la importancia de comprender estos principios como paso clave para diseñar con éxito

♦ GRASP: describen los principios fundamentales del DOO y la asignación de responsabilidades expresados como patrones

Page 38: ISG2 - GRASP con diagramas de interacción

Introducción

♦ Descripción de un GRASP♦ Problema

♦ Solución

♦ Ejemplo

♦ Discusión

♦ Contraindicaciones

♦ Beneficios

♦ Patrones relacionados

♦ También conocido como

Page 39: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción♦ Experto en Información♦ Creador

♦ Alta Cohesión♦ Bajo Acoplamiento♦ Fabricación Pura♦ Indirección♦ Variaciones Protegidas

Page 40: ISG2 - GRASP con diagramas de interacción

Experto en Información

Modelo del dominio que usaremos en los ejemplos

Page 41: ISG2 - GRASP con diagramas de interacción

Experto en Información

1) Problema: ¿un principio general del DOO para la asignación de responsabilidades a las clases?♦ Una buena asignación facilita el mantenimiento, la eficiencia, la

comprensión, …

2) Solución: Asigne una responsabilidad al experto en información (la clase que tiene la información necesaria para llevar a cabo la responsabilidad)

3) Ejemplo: 1) ¿quién debe ser el

responsable de conocer el total de una venta?

Sale

time

SalesLineItem

quantity

ProductDescription

descriptionpriceitemID

Described-by*

Contains

1..*

1

1

Page 42: ISG2 - GRASP con diagramas de interacción

Experto en Información

♦ La aplicación de este o cualquier otro GRASP permite refinar el diseño

Sale

time...

getTotal()

:Salet = getTotal

New method

Sale

time...

getTotal()

SalesLineItem

quantity

getSubtotal()New method

1 *: st = getSubtotal: Salet = getTotal lineItems[ i ] : SalesLineItem

this notation will imply we are iterating over all elements of a collection

Page 43: ISG2 - GRASP con diagramas de interacción

Experto en Información

♦ ¿Qué otro diseño se podría haber propuesto?

Sale

time...

getTotal()

SalesLineItem

quantity

getSubtotal()

ProductDescription

descriptionpriceitemID

getPrice()New method

:ProductDescription

1.1: p := getPrice()

1 *: st = getSubtotal: Salet = getTotal lineItems[ i ] :SalesLineItem

♦ En este caso se ha aplicado en tres ocasiones

Page 44: ISG2 - GRASP con diagramas de interacción

Experto en Información

4) Discusión:

♦ Expertos de información parcial

♦ Suele conducir a diseños donde los objetos se hacen responsables de las mismas operaciones de los objetos inanimados a los que representan

♦ Analogía en el mundo real. Normalmente se otorgan responsabilidades a los individuos que pueden disponer de toda la información necesaria para llevar a cabo una tarea♦ ¿quién debería ser el responsable de realizar el

informe de cuentas de una empresa?

Page 45: ISG2 - GRASP con diagramas de interacción

Experto en Información

5) Contraindicaciones♦ En ocasiones su aplicación puede aumentar

el acoplamiento y reducir la cohesión♦ ¿quién debería de almacenar una Venta en la

BBDD?– Siguiendo el EI se decidiría por la misma clase Venta. Esto podría

llevar a una situación en que cada clase tenga la responsabilidad de acceder a la BBDD (vía JDBC p.e.)» La clase no está centrada únicamente en la lógica» Todas las clases estarían acopladas con las diferentes

clases de acceso a BBDD» Probablemente se duplicaría mucho código

♦ ¿quién debería ser el responsable de autenticar?

Page 46: ISG2 - GRASP con diagramas de interacción

Experto en Información

6) Beneficios♦ Se mantiene el encapsulamiento de la

información menor acoplamiento♦ ¿Qué pasaría si la clase Venta averiguara el total

preguntando directamente a todos los Productos involucrados?

♦ Se distribuye el comportamiento entre las clases que contienen la información requerida clases más ligeras mayor cohesión

7) Patrones relacionados♦ Bajo acoplamiento y alta cohesión

8) También conocido como♦ Colocar las responsabilidades con los datos♦ Eso que conoces, hazlo♦ Hacerlo yo mismo♦ Colocar los servicios con los atributos que trabaja

Page 47: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción♦ Experto en Información♦Creador

♦ Alta Cohesión♦ Bajo Acoplamiento♦ Fabricación Pura♦ Indirección♦ Variaciones Protegidas

Page 48: ISG2 - GRASP con diagramas de interacción

Creador

1) Problema: ¿Quién debe ser el responsable de la creación de una nueva instancia de una clase?

2) Solución: Asigne a la clase B la responsabilidad de crear una instancia de la clase A si se da alguna de las siguientes circunstancias:

1) B agrega (compartidamente o no) a A2) B tiene los datos de inicialización de A3) B registra a A4) B utiliza ‘estrechamente’ a A5) B es experto en la creación de A

3) Ejemplo♦ ¿Quién debería ser responsable de la creación de

una instancia de LineaDeVenta?♦ Según este patrón, debería ser Venta

Page 49: ISG2 - GRASP con diagramas de interacción

Creador

♦ Esto nos llevaría a una situación del tipo

: Register : Sale

makeLineItem(quantity): SalesLineItemcreate(quantity)

Page 50: ISG2 - GRASP con diagramas de interacción

Creador

4) Discusión:

♦ La intención básica es encontrar un creador que necesite dialogar con el objeto creado en algún momento Bajo acoplamiento

♦ Se puede ver como un caso particular del Experto (cuando B tiene los datos de inicialización de A). ♦ No es tan evidente, con frecuencia hay un objeto

principal que construye las partes y se las pasa al contenedor

Page 51: ISG2 - GRASP con diagramas de interacción

Creador

5) Contraindicaciones♦ En ocasiones la creación posee una complejidad

significativa resultando más conveniente delegar esta responsabilidad en una clase diseñada a tal efecto

6) Beneficios♦ Favorece el bajo acoplamiento

♦ ¿Qué pasaría si la clase Registro creara las LíneasDeVenta? (“No hables con extraños”)

7) Patrones relacionados♦ Bajo acoplamiento y alta cohesión♦ Fábricas

Page 52: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción♦ Experto en Información♦ Creador

♦Bajo Acoplamiento♦ Alta Cohesión♦ Fabricación Pura♦ Indirección♦ Variaciones Protegidas

Page 53: ISG2 - GRASP con diagramas de interacción

Bajo Acoplamiento (evaluativo)

Acoplamiento. Es una medida de la fuerza con que un elemento está conectado a, tiene conocimiento de, confía en, otros elementos

Un elemento fuertemente acoplado♦ Se resiente de los cambios en los elementos relacionados♦ Son difíciles de entender de manera aislada♦ Difíciles de reutilizar (requiere las clases ‘acopladas’)

1) Problema: ¿Cómo evitar estos inconvenientes?2) Solución: Asigne responsabilidades de manera que el

acoplamiento permanezca bajo♦ ¿Es una solución?♦ Principio evaluativo: lo aplica un diseñador cada vez que tiene

que evaluar una decisión de diseño

Page 54: ISG2 - GRASP con diagramas de interacción

Bajo Acoplamiento

3) Ejemplo: ¿Qué clase debería ser responsable de crear una instancia

de Payment y asociarla con una instancia de Sale?

Page 55: ISG2 - GRASP con diagramas de interacción

Bajo Acoplamiento

♦ Puesto que Register registra el pago (Payment) en el dominio del mundo real, el GRASP Creador sugiere ...

♦ Register está acoplado con Payment y con Sale. Sale también está acoplado con Payment.

♦ ¿Cómo podríamos reducir el acoplamiento?

Page 56: ISG2 - GRASP con diagramas de interacción

Bajo Acoplamiento

4) Discusión: ♦ En la práctica, el nivel de acoplamiento no puede

evaluarse si tener en cuenta otros GRASP como la cohesión o el experto

♦ Una subclase está fuertemente acoplada a su superclase. Esta decisión deber ser estudiada cuidadosamente♦ ¿Qué inconvenientes encuentra en hacer que todas

las clases que requieren persistencia deriven de una superclase PersistentObject?♦ ¿Se resiente de los cambios en los elementos relacionados?

♦ ¿Es difícil de entender de manera aislada?

♦ ¿requiere de las clases acopladas para poder ser reutilizada?

Page 57: ISG2 - GRASP con diagramas de interacción

Bajo Acoplamiento

4) Discusión: ♦ No existe medida que indique si el acoplamiento es

demasiado alto lo que debe tener en cuenta el diseñador es el impacto que provoca una decisión en el grado de acoplamiento

♦ ¿Qué ocurriría si intentáramos reducir el máximo el acoplamiento?♦ … Antipatrón BLOB

Page 58: ISG2 - GRASP con diagramas de interacción

Bajo Acoplamiento

5) Contraindicaciones♦ Escoger las batallas

♦ El alto acoplamiento no es inherentemente malo, lo es sólo con elementos “inestables” (en su contrato sintáctico, semántico, ... O su simple presencia)– Una aplicación J2EE puede acoplarse con seguridad con

la biblioteca java.util.*

♦ No se debe invertir esfuerzos en reducir el acoplamiento cuando no hay motivos reales para hacerlo (Generalizitis)– Si se preveen diferentes métodos de pago puede merecer

la pena desacoplar Register de Payment y utilizar el PD Strategy para los diferentes pagos

Page 59: ISG2 - GRASP con diagramas de interacción

Bajo Acoplamiento

6) Beneficios♦ Se amortigua el impacto de los cambios

en los elementos inestables♦ Se facilita el entendimiento♦ Facilita la reutilización

7) Antecedentes♦ Acoplamiento y cohesión son principios

realmente fundamentales que fueron propuestos por Larry Constantine a finales de los 60 (40 años…)

8) Patrones relacionados♦ Alta Cohesión

Page 60: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción♦ Experto en Información♦ Creador

♦ Bajo Acoplamiento♦Alta Cohesión♦ Fabricación Pura♦ Indirección♦ Variaciones Protegidas

Page 61: ISG2 - GRASP con diagramas de interacción

Alta Cohesión (evaluativo)

Cohesión (funcional). Es una medida de la fuerza con la que se relacionan y del grado de focalización de las responsabilidades de un elemento.

Un elemento con baja cohesión tiene muchas responsabilidades:

♦ Difíciles de entender, reutilizar y mantener♦ Delicadas, frágiles (muchas probabilidades de verse

afectada en los cambios)

1) Problema: ¿Cómo mantener manejable la complejidad?

2) Solución: Asigne responsabilidades de manera que la cohesión permanezca alta♦ ¿Es una solución?♦ También es un principio evaluativo

Page 62: ISG2 - GRASP con diagramas de interacción

Alta Cohesión

3) Ejemplo: ¿Qué clase debería ser responsable de crear una instancia

de Payment y asociarla con una instancia de Sale?

Page 63: ISG2 - GRASP con diagramas de interacción

Alta Cohesión

♦ Puesto que Register registra el pago (CashPayment) en el dominio del mundo real, el GRASP Creador sugiere ...

: Register : Sale

addPayment( p )

p : Paymentcreate()makePayment()

♦ ¿Qué pasaría si Register siguiera haciéndose responsable de las operaciones de sistema?

♦ Iría perdiendo cohesión progresivamente

♦ ¿Cómo se podría conseguir una mejor cohesión?

: Register : Sale

makePayment() : Paymentcreate()

makePayment()

Page 64: ISG2 - GRASP con diagramas de interacción

Alta Cohesión

4) Discusión: ♦ No es fácil cuantificar el grado de cohesión de un elemento. Para

G. Booch, un elemento es altamente cohesivo si: ♦ todos sus elementos trabajan juntos para proporcionar algún

comportamiento bien delimitado♦ Escenarios que ilustran diferentes grados de cohesión funcional

♦ Muy baja cohesión. Una clase responsable de muchas cosas en áreas funcionales diferentes (Clase InterfazBDR-RPC)

♦ Baja cohesión. Una clase responsable de una tarea compleja de un área funcional (Clase InterfazBDR). (No es el caso de la fachada JDBC)

♦ Alta cohesión. Una clase con responsabilidad “moderada” en un área funcional que colabora con otras para llevar a cabo las tareas (La fachada de JDBC)

♦ Moderada cohesión. Una clase tiene responsabilidades “ligeras” y únicas en unas pocas áreas diferentes que están lógicamente relacionadas con el concepto de la clase, pero la relación entreellas no es fuerte

Page 65: ISG2 - GRASP con diagramas de interacción

Alta Cohesión

4) Discusión: ♦ Una clase altamente cohesiva suele:

♦ tener un número relativamente pequeño de métodos, con funcionalidad altamente relacionada

♦ no realiza mucho trabajo

♦ Colabora con otras clases para compartir el esfuerzo

♦ Una de las posibles analogías en el mundo real

♦ Un trabajador con muchas responsabilidades (que no mucha responsabilidad) suele ser poco efectivo

Page 66: ISG2 - GRASP con diagramas de interacción

Alta Cohesión

4) Discusión:

♦ Diseño modular

♦ Cohesión y acoplamiento son principios conocidos desde hace mucho. A partir de ellos se define el principio de modularidad♦ Un diseño es modular si se descompone en un

conjunto de módulos cohesivos y débilmente acoplados

♦ Cohesión y acoplamiento: el ying y el yang de la IS♦ Una mala cohesión causa, normalmente, un mal

acoplamiento

♦ La filosofía china los considera como fuerzas opuestas pero complementarias

♦ Un buen diseño siempre logra un buen equilibrio entre cohesión y acoplamiento

Page 67: ISG2 - GRASP con diagramas de interacción

Alta Cohesión

5)Contraindicaciones♦ Existen pocas situaciones que

justifiquen la aceptación de una baja cohesión (Fachadas)

6) Beneficios♦ Se incrementa claridad y comprensión♦ Se simplifica el mantenimiento♦ Favorece el bajo acoplamiento♦ Facilita la reutilización

7) Patrones relacionados♦ Bajo acoplamiento

Page 68: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción♦ Experto en Información♦ Creador

♦ Bajo Acoplamiento♦ Alta Cohesión♦ Fabricación Pura♦ Indirección♦ Variaciones Protegidas

Page 69: ISG2 - GRASP con diagramas de interacción

Fabricación Pura

1) Problema: ¿Cómo proceder cuando las soluciones encontradas comprometen la cohesión y el acoplamiento?

2) Solución: Asigne un conjunto cohesivo de responsabilidades a una clase artificial (no representa ningún concepto del dominio del problema)♦ Tal clase es una fabricación de la imaginación e idealmente

debería ser pura (diseñada exclusivamente para dicho fin)

3) Ejemplo♦ Este problema suele darse cuando se sigue un enfoque

seamless desde el análisis hasta la implementación

♦ Suponga que se necesita dar persistencia a la clase Sale en una BDR. Según el EI se puede justificar la asignación de dicha responsabilidad a la clase Sale. ¿Implicaciones?♦ Las nuevas responsabilidades reducirían la cohesión

♦ Aumenta el acoplamiento con elementos que no son del dominio (interfaces JDBC p.e.)

♦ Probablemente se duplique código

Page 70: ISG2 - GRASP con diagramas de interacción

Fabricación Pura

3) Ejemplo: ♦ Una solución razonable puede ser definir una clase

(PersistentStore) cuya única responsabilidad es almacenar objetos de cualquier tipo. Esta clase es una invención de la imaginación. Ahora, la clase Sale♦ Tiene mayor cohesión y mejor acoplamiento

♦ La clase PersistentStore es relativamente cohesiva

♦ La clase PersistentStore tiene mayor probabilidad de ser reutilizada

4) Discusión: ♦ Por regla general, además de las clases definidas a partir del

modelo del dominio, los diseñadores definen clases por conveniencia (se inspiran en una descomposición de comportamiento en lugar de una descomposición de la representación)

Page 71: ISG2 - GRASP con diagramas de interacción

Fabricación Pura

5) Contraindicaciones♦ El uso desmedido de fabricaciones puras puede

derivar en clases “función” o “algoritmo” (sólo tienen un método). ♦ Un indicio de esta situación es cuando la mayoría

de objetos tienen pasar casi toda su información a otros objetos para poder realizar las responsabilidades

6) Beneficios♦ Las fabricaciones puras suelen ser muy

cohesivas y reutilizables7) Patrones relacionados

♦ Alta Cohesión y Bajo Acoplamiento♦ Suelen asumir las responsabilidades en base al EI♦ Muchos patrones GoF usan fabricaciones puras:

adaptador, estrategia, comando, …

Page 72: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción♦ Experto en Información♦ Creador

♦ Bajo Acoplamiento♦ Alta Cohesión♦ Fabricación Pura♦ Indirección♦ Variaciones Protegidas

Page 73: ISG2 - GRASP con diagramas de interacción

Indirección

1) Problema: ¿Dónde asignar responsabilidades para evitar/reducir el acoplamiento directo entre elementos y mejorar la reutilización?

2) Solución: Asigne la responsabilidad a un objeto que medie entre los elementos. Ahora el acoplamiento es indirecto

3) Ejemplo♦ En el ejemplo de la “Fabricación Pura”, la clase PersistenObject

desacopla Sale de las clases que gestionan la BBDD

♦ Adaptación del cálculo de impuestos (Sale es ahora más reutilizable)

: Sale :TaxMasterAdapter

taxes = getTaxes( s )

t = getTotal

the adapter acts as a level of indirection to external systems

TCP socket communication

xxx...

«actor»:TaxMasterSystem. . .

Page 74: ISG2 - GRASP con diagramas de interacción

Indirección

4) Discusión: ♦ “La mayoría de los problemas en diseño se resuelven mediante

indirección”

♦ La mayoría de los problemas en ejecución se pueden resolver eliminando alguna indirección

5) Beneficios♦ Disminuye el acoplamiento

6) Patrones relacionados♦ Variaciones protegidas

♦ Bajo Acoplamiento

♦ Muchos patrones GoF usan indirección: adaptador, fachada, puente, observador, mediador

Page 75: ISG2 - GRASP con diagramas de interacción

Índice

♦ Introducción♦ Experto en Información♦ Creador

♦ Bajo Acoplamiento♦ Alta Cohesión♦ Fabricación Pura♦ Indirección♦Variaciones Protegidas

Page 76: ISG2 - GRASP con diagramas de interacción

Variaciones Protegidas

♦ Un punto de variación representa a una variación contemplada en la especificación de requisitos o documento de entrada del diseño. Por ejemplo:♦ “el formato de compresión podrá ser PCX, GIF, BMP,

TIFF y JPEG”

♦ Un punto de evolución es un punto de variación sobre cuya existencia se conjetura (especula). Por ejemplo, a partir del requisito anterior, el diseñador puede especular sobre la evolución del sistema y tomar la decisión de protegerse sobre la variación del formato de compresión para dar cabida en el futuro a nuevos formatos (p.e a HSI-JPEG). El diseñador experto se reconoce, entre otros rasgos, por su acierto a la hora de definir estos puntos.

Page 77: ISG2 - GRASP con diagramas de interacción

Variaciones Protegidas

1) Problema: Cómo diseñar un elemento de modo que sus variaciones o inestabilidades afecte lo menos posible en otros elementos

2) Solución: Identifique los puntos de variaciones previstas o de inestabilidad y asigne responsabilidades para crear una interfaz estable alrededor de ellos

3) Ejemplo: Ejemplo anterior del Calculador de impuestos. ♦ ¿Cómo se han resuelto estos puntos de variación?

♦ Usamos una Interfaz adaptador que es implementada por cada uno de los adaptadores necesarios para distintos sistemas de impuestos

Page 78: ISG2 - GRASP con diagramas de interacción

Variaciones protegidas

4) Discusión: ♦ Este patrón fue propuesto en 1996 por A. Cockburn, aunque

lleva más de 30 años bajo otros nombres

♦ Mecanismos motivados por VP♦ Básicos: encapsulación, interfaces, polimorfismo, indirección, …

♦ Diseños dirigidos por datos: (amplia familia de técnicas) Ficheros de configuración, hojas de estilo, ficheros de propiedades, … Protegen de la variación de los parámetros involucrados– Búsqueda de servicios: JNDI, TraderService, UDDI

– A partir de ficheros de configuración

♦ Ocultación de la estructura. Proteger de los cambios en la estructura aplicando la regla “No hables con extraños” (Ley de Demeter)– Los objetos directos son “conocidos”, los indirectos son “extraños”

Dinero cantidad= venta.getPago().getCantidadEntregada():

Dinero cantidad= venta.getCantidadEntregadaEnPago();

Page 79: ISG2 - GRASP con diagramas de interacción

Variaciones protegidas

4) Discusión: ♦ Principio de sustitución de Liskov

♦ Formaliza el principio de protección contra las variaciones en implementaciones diferentes de una interfaz, o una subclase que extiende a una superclase– El fragmento de código que hace referencia a un tipo T debería trabajar correctamente con

cualquier implementación o subclase de T que lo sustituya

Page 80: ISG2 - GRASP con diagramas de interacción

Variaciones protegidas

public class LiskovTest{

public void run(){

Rectangle r= new Rectangle();test(r);Square s= new Square();test(s);

}void test(Rectangle r){

r.setHeight(5);r.setWidth(4);if (r.getHeight()*r.getWidth()==20)

System.out.println(“Test was ok”);else

System.out.println(“Test wasn’t ok”);}

}

public class Rectangle{

protected float height, width;public void setHeight (float h) {

height= h;}public void setWidth (float w){

width= w;}public float getHeight(){

return height;}public float getWidth(){

return width;}

}public class Square extends Rectangle{……}

Page 81: ISG2 - GRASP con diagramas de interacción

Variaciones protegidas

public class Square extends Rectangle{

public void setHeight (float h){

super.setHeight(h);super.setWidth(h);

}public void setWidth (float w){

super.setHeight(w);super.setWidth(w);

}}

La semántica intuitiva no coincide con

la real

Page 82: ISG2 - GRASP con diagramas de interacción

Variaciones protegidas

5) Contraindicaciones♦ El coste de diseñar la protección de un punto de variación o de

evolución es superior que rehacer un diseño simple♦ inexpertos diseños frágiles

♦ intermedios diseños excesivamente flexibles

♦ Expertos diseño simple y frágil en el que existe un equilibrio entre el coste de cambio y su probabilidad

6) Beneficios♦ Facilita la adición de las extensiones asociadas a las

variaciones

♦ Se reduce el impacto y coste de los cambios (se reduce el acoplamiento)

7) Patrones relacionados♦ La mayoría de los principios y patrones de diseño son mecanismos VP

♦ Puntos de variación y evolución también se conocen como puntos calientes

Page 83: ISG2 - GRASP con diagramas de interacción

Variaciones protegidas

8) También conocido como♦ Principio de ocultación de la información

♦ “On the criteria to be used in decomposing systems into modules” (Parnas, 1972)– … proponemos en lugar de eso que uno comience con una lista de decisiones de

diseño difíciles o con altas probabilidades de cambio. Cada módulo se diseña entonces para ocultar dichas decisiones a otros …

♦ Principio abierto-cerrado (Meyer, 1988)

♦ Los módulos deberían ser tanto abiertos como cerrados. Abiertos para ser extendidos y cerrados para ser usados– ¿Se preserva este principio con el PD Estrategia?

Page 84: ISG2 - GRASP con diagramas de interacción

Bibliografía

♦ Específica:

♦ “UML y UML y PatronesPatrones”, Craig Larman (1999).

♦ De Apoyo:♦ “Applying UML and Patterns Applying UML and Patterns -- An Introduction to An Introduction to

ObjectObject--Oriented Analysis and Design and Iterative Oriented Analysis and Design and Iterative DevelopmentDevelopment”, Craig Larman (2004).

♦ “http://davidhayden.com/blog/dave/category/33.aspxhttp://davidhayden.com/blog/dave/category/33.aspx”, Reflexiones sobre los GRASP.

♦ “Head First Head First -- Design PatternsDesign Patterns”, Ed.- O’Reilly (2004).

Page 85: ISG2 - GRASP con diagramas de interacción

Cuestiones de Examen

♦ En TEST:♦ Marque las dos opciones que contienga(n) los principios

más importantes:♦ Cohesión y Acoplamiento♦ Variaciones Protegidas♦ Indirección y Fabricación Pura♦ Ninguna de las anteriores_______________

♦ Si aplicamos de manera desmedida el principio “bajoacoplamiento” sin tener en cuenta al resto, ¿cuál(es) de las siguientes situaciones ocurrirá?♦ Conseguiremos un nivel de acoplamiento óptimo

(acoplamiento cero), aunque no tendremos una buenacohesión.

♦ Tendremos muchas clases, muy poco relacionadas entreellas.

♦ Antipatrón blob.♦ Ninguna de las anteriores________________

Page 86: ISG2 - GRASP con diagramas de interacción

Cuestiones de Examen

♦ En TEST:♦ ¿Qué problema pretende resolver el principio

“Indirección”?♦ Problemas de Cohesión.

♦ Problemas de Acoplamiento.

♦ La asignación de responsabilidades de maneracorrecta.

♦ Ninguna de las anteriores________________

♦ ¿Cuál de los siguientes principios está incluidodentro del GRASP “Variaciones Protegidas”?♦ Principio de sustitución de Liskov.

♦ Principio de Hollywood.

♦ Principio “elige tus batallas”.

♦ Ninguna de las anteriores________________

Page 87: ISG2 - GRASP con diagramas de interacción

Cuestiones de Examen

♦ En Problemas de Diseño:♦ Dado un modelo UMl inicial y propuestos

diferentes cambios:– Proponga un nuevo diseño que tenga en cuenta esta variabilidad

y que no disminuya la cohesión.

– Indique cuál es el patrón/es GRAS que se han aplicado en el nuevo diseño propuesto y explique las razones para ello.

– Discutir la cohesión y el acoplamiento de la solución propuesta junto con las responsabilidades de cada clase.

Page 88: ISG2 - GRASP con diagramas de interacción

¡Gracias!

♦ ¿Podemos mejorar esta lección?♦ Mándanos un email a [email protected]

[email protected]

[email protected]

[email protected]

♦ Visite la web de la asignatura www.lsi.us.es