Вы находитесь на странице: 1из 24

Fundamentos de Ingeniera de Software

Marcello Visconti y Hernn Astudillo Departamento de Informtica Universidad Tcnica Federico Santa Mara {visconti,hernan} en inf.utfsm.cl

Fundamentos de Ingeniera de SW

Patrones de Diseo Contenido


? Patrones GRASP
? ? ? ? ? Experto Creador Bajo Acoplamiento Alta Cohesin Controlador

Fundamentos de Ingenier a de SW

Patrones de Diseo GRASP: Patrones para Asignar Responsabilidades


? Un sistema orientado a objetos se compone de objetos que envan mensajes a otros objetos para que lleven a cabo las operaciones. ? En los contratos se incluye una conjetura inicial sobre las responsabilidades y las poscondiciones de las operaciones inicio, introducirProducto, terminarVenta y efectuarPago. ? Los diagramas de interaccin describen grficamente la solucin -a partir de los objetos en interaccin- que satisfacen estas responsabilidades y poscondiciones.

Fundamentos de Ingenier a de SW

Patrones de Diseo GRASP: Patrones para Asignar Responsabilidades


? La calidad de diseo de la interaccin de los objetos y la asignacin de responsabilidades presentan gran variacin.
? Las decisiones poco acertadas dan origen a sistemas y componentes frgiles y difciles de mantener, entender, reutilizar o extender. ? Una implementacin hbil se funda en los principios cardinales que rigen un buen diseo orientado a objetos.

? En los patrones GRASP se codifican algunos de los principios, que se aplican al preparar los diagramas de interaccin.

Fundamentos de Ingenier a de SW

Patrones de Diseo GRASP: Patrones para Asignar Responsabilidades


? Los diagramas de interaccin son algunos de los artefactos ms importantes que se preparan en el anlisis y diseo orientados a objetos.
? Es muy importante asignar acertadamente las responsabilidades al momento de elaborar os diagramas de interaccin. ? El tiempo y el esfuerzo que se dedican a su elaboracin, as como un examen riguroso de la asignacin de responsabilidades, deberan absorber parte considerable de la fase de diseo de un proyecto. ? Los patrones, principios y expresiones especializadas codificados sirven para mejorar la calidad del diseo.

Fundamentos de Ingenier a de SW

Patrones de Diseo GRASP: Patrones para Asignar Responsabilidades


? Los diseadores expertos en orientacin a objetos (y tambin otros diseadores de software) van formando un amplio repertorio de principios generales y de expresiones que los guan al crear software. ? Muchos patrones ofrecen orientacin sobre cmo asignar las responsabilidades a los objetos ante determinada categora de problemas.

Fundamentos de Ingenier a de SW

Patrones de Diseo GRASP: Patrones para Asignar Responsabilidades


? En la terminologa de objetos, el patrn es una descripcin de un problema y su solucin, que recibe un nombre y que puede emplearse en otros contextos.
Nombre del Patrn Solucin Problema que resuelve Experto Asignar una responsabilidad a la clase que tiene la informacin necesaria para cumplirla. Cul es el principio fundamental en virtud del cual asignaremos las responsabilidades a los objetos?

? En teora, todos los patrones poseen nombres muy sugestivos. El asignar nombre a un patrn, a un mtodo o a un principio ofrece las siguientes ventajas:
? Apoya el agrupamiento y la incorporacin del concepto a nuestro sistema cognitivo y a la memoria. ? Facilita la comunicacin.

Fundamentos de Ingenier a de SW

Patrones de Diseo GRASP: Patrones para Asignar Responsabilidades


? Los patrones GRASP son parejas de problema solucin con un nombre, que codifican buenos principios y sugerencias relacionados frecuentemente con la asignacin de responsabilidades.

Pregunta: Respuesta:

Qu son los patrones GRASP? Los patrones GRASP describen los principios fundamentales de la asignacin de responsabilidades a objetos, expresados en forma de patrones.

Fundamentos de Ingenier a de SW

Patrones de Diseo GRASP: Patrones para Asignar Responsabilidades


? GRASP es un acrnimo que significa General Responsibility Asignment Software Patterns (patrones generales de software para asignar responsabilidades). ? El nombre se eligi para indicar la importancia de captar (grasping) estos principios, si se quiere disear eficazmente el software orientado a objetos.

Fundamentos de Ingenier a de SW

Patrones de Diseo Notacin del UML para los diagramas de clase


? Los diagramas de clase en UML presentan las clases de software en contraste con los conceptos de dominio. La casilla de clase consta de tres secciones, la tercera contiene los mtodos de la clase, como se aprecia en la figura.

NombredeClase atributos metodos ( )

La tercera seccin esta destinada a los mtodos

Fundamentos de Ingenier a de SW

10

Patrones de Diseo

Patrn Experto
? Problema
? Cul es el principio fundamental en virtud del cual se asignan las responsabilidades en el diseo orientado a objetos? ? Un modelo de clase puede definir docenas y hasta cientos de clases de software, y una aplicacin tal vez requiera el cumplimiento de cientos o miles de responsabilidades. ? Si estas se asignan en forma adecuada, los sistemas tienden a ser ms fciles de entender, mantener y ampliar, y se nos presenta la oportunidad de reutilizar los componentes en futuras aplicaciones.

? Solucin
? Asignar una responsabilidad al experto en informacin: la clase que cuenta con la informacin necesaria para cumplir la responsabilidad.

Fundamentos de Ingenier a de SW

11

Patrones de Diseo

Patrn Experto
? Ejemplo ? En la aplicacin del punto de venta, alguna clase necesita conocer el gran total de la venta. Comience asignando las responsabilidades con una definicin clara de ellas. A partir de esta recomendacin se plantea la pregunta:
? Quin es el responsable de conocer el gran total de la venta? ? Desde el punto de vista del patrn Experto, deberamos buscar la clase de objetos que posee la informacin necesaria para calcular el total.

Fundamentos de Ingenier a de SW

12

Patrones de Diseo Patrn Experto

VentasLineaDeProducto cantidad 1..*

Descritas -por *

EspecificaciondeProductos

Contenidas -e n 1 Venta fecha hora

Fundamentos de Ingenier a de SW

13

Patrones de Diseo Patrn Experto


? En conclusin, para cumplir con la responsabilidad de conocer y dar el total de la venta, se asignaron tres responsabilidades a las tres clases de objeto as:

Clase Venta VentasLineadeProducto EspecificaciondeProducto

Responsabilidad conoce el total de la venta conoce el subtotal de la lnea de producto conoce el precio del producto

Fundamentos de Ingenier a de SW

14

Patrones de Diseo Patrn Experto


t:=total() : Venta 1: [en cada] vli:=siguiente() : VentasLineaDeProducto

2: st:=subtotal()

vli : VentasLineaDeProducto

3: p:=precio()

: EspecificaciondeProductos

Fundamentos de Ingenier a de SW

15

Patrones de Diseo Patrn Experto


? Experto es un patrn que se usa ms que cualquier otro al asignar responsabilidades; es un principio bsico que suele til en el diseo orientado a objetos. ? Ntese, que el cumplimiento de una responsabilidad requiere a menudo informacin distribuida en varias clases de objetos.

Fundamentos de Ingenier a de SW

16

Patrones de Diseo Patrn Experto


? Beneficios ? Se conserva el encapsulamiento, ya que los objetos se valen de su propia informacin para hacer lo que se les pide. Esto soporta un bajo acoplamiento, lo que favorece al hecho de tener sistemas ms robustos y de fcil mantenimiento. ? El comportamiento se distribuye entre las clases que cuentan con la informacin requerida, alentando con ello definiciones de clase sencillas y ms cohesivas que son ms fciles de comprender y de mantener. As se brinda soporte a una alta cohesin.

Fundamentos de Ingenier a de SW

17

Patrones de Diseo Patrn Creador


? Problema ? Quin debera ser responsable de crear una nueva instancia de alguna clase?
? La creacin de objetos es una de las actividades ms frecuentes en un sistema orientado a objetos. ? En consecuencia, conviene contar con un principio general para asignar las responsabilidades concernientes a ella. ? El diseo, bien asignado, puede soportar un bajo acoplamiento, una mayor claridad, el encapsulamiento y la reutilizabilidad.

Fundamentos de Ingenier a de SW

18

Patrones de Diseo Patrn Creador


? El patrn Creador gua la asignacin de responsabilidades relacionadas con la creacin de objetos, tarea muy frecuente en los sistemas orientados a objetos. ? El propsito fundamental de este patrn es encontrar un creador que debemos conectar con el objeto producido en cualquier evento. ? Al escogerlo como creador, se da soporte al bajo acoplamiento.

Fundamentos de Ingenier a de SW

19

Patrones de Diseo Patrn Creador


? Solucin ? 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 o ? B utiliza especialmente los objetos A. ? B tiene los datos de inicializacin que sern transmitidos a A cuando este objeto sea creado (as que B es un Experto respecto a la creacin de A). B es un creador de los objetos A. ? Si existe m de una opcin, prefiera la clase B que agregue o s contenga la clase A.

Fundamentos de Ingenier a de SW

20

10

Patrones de Diseo Patrn Creador


? Ejemplo ? En la aplicacin del punto de venta, quin debera encargarse de crear una instancia VentasLineadeProducto?
? Desde el punto de vista del patrn Creador, deberamos buscar una clase que agregue, contenga y realice otras operaciones sobre este tipo de instancias

Fundamentos de Ingenier a de SW

21

Patrones de Diseo Patrn Creador

VentasLineaDeProducto cantidad 1..*

Descritas -por *

EspecificaciondeProductos

Contenidas -e n 1 Venta fecha hora

Fundamentos de Ingenier a de SW

22

11

Patrones de Diseo Patrn Creador


? Una Venta contiene (en VentasLineadeProducto; realidad, agrega) muchos objetos

? por ello, el patrn Creador sugiere que Venta es idnea para asumir la responsabilidad de crear las instancias VentasLineadeProducto.

? Esta asignacin de responsabilidades requiere definir en Venta un mtodo de hacer-LineadeProducto.

Fundamentos de Ingenier a de SW

23

Patrones de Diseo Patrn Creador

Segn Controlador

Segn Creador

introducirProducto(cup, cantidad) : TPDV

1: [nueva venta] crear() : Venta

2: crear() Segn Creador : VentasLineaDeProducto

Fundamentos de Ingenier a de SW

24

12

Patrones de Diseo Patrn Creador


? En ocasiones encontramos un patrn creador buscando la clase con los datos de inicializacin que sern transferidos durante la creacin. ? ste es en realidad un ejemplo del patrn Experto.
? Los datos de inicializacin se transmiten durante la creacin a travs de algn mtodo de inicializacin, como un constructor en java que cuenta con parmetros.

Fundamentos de Ingenier a de SW

25

Patrones de Diseo Patrn Bajo Acoplamiento


? Problema ? Como dar soporte a una dependencia escasa y a un aumento de la reutilizacin? ? 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. ? Acoplamiento bajo significa que una clase no depende de muchas clases. ? Acoplamiento alto significa que una clase recurre a muchas otras clases. Esto presenta los siguientes problemas: ?Los cambios de las clases afines ocasionan cambios locales. ?Difciles de entender cuando estn aisladas. ?Difciles de reutilizar puesto que dependen de otras clases.

Fundamentos de Ingenier a de SW

26

13

Patrones de Diseo Patrn Bajo acoplamiento


? Solucin ? Asignar una responsabilidad para mantener bajo acoplamiento. ? Ejemplo: En el caso del punto de ventas se tienen tres clases Pago, TPDV y Venta y se quiere crear una instancia de Pago y asociarla a Venta. Que clase es la responsable de realizarlo? ? Segn el patrn experto la Clase TPDV deber hacerlo

EfectuarPago()

:TPDV

1:Crea()

P:Pago
2: AgregarPago(p)

:Venta
Fundamentos de Ingenier a de SW 27

Patrones de Diseo Patrn Bajo acoplamiento


? Segn el patrn de Bajo Acoplamiento la relacin debera ser de la siguiente manera:
EfectuarPago()

:TPDV

1:EfectuarPago()

:Venta
1.1:Crear()

:Pago

? Esta ltima asociacin es mejor dado que Venta realiza la creacin del Pago y no TPDV por lo tanto se reduce la dependencia de este ltimo con el resto de las clases. ? El grado de acoplamiento no puede considerarse aisladamente de otros principios como Experto y Alta Cohesin. Sin embargo, es un factor a considerar cuando se intente mejorar el diseo.
Fundamentos de Ingenier a de SW 28

14

Patrones de Diseo Patrn Bajo acoplamiento


? En los lenguajes OO como C++ y JAVA las formas comunes de acoplamiento de TipoX a TipoY son las siguientes:
? TipoX posee un atributo (miembro de datos o variable de instancia) que se refiere a una instancia TipoY o al propio TipoY . ? TipoX tiene un mtodo que a toda costa referencia una instancia de TipoY o incluso el propio TipoY . Suele incluirse un parmetro o una variable local de TipoY o bien el objeto devuelto de un mensaje es una instancia de TipoY . ? TipoX es una subclase directa o indirecta del TipoY. ? TipoY es una interfaz y TipoX la implementa.

Fundamentos de Ingenier a de SW

29

Patrones de Diseo Patrn Bajo acoplamiento ? Beneficios:


? No se afectan por cambios de otros componentes ? Fciles de entender por separado ? Fciles de reutilizar

Fundamentos de Ingenier a de SW

30

15

Patrones de Diseo Patrn Alta Cohesin


? Problema
? Cmo mantener la complejidad dentro de lmites menejables?

? La cohesin es una medida de cun relacionadas y enfocadas estn las responsabilidades de una clase.
? Una alta cohesin caracteriza a las clases con responsabilidades estrechamente relacionadas que no realicen un trabajo enorme. ? Una baja cohesin hace muchas cosas no afines o realiza trabajo excesivo. Esto presenta los siguientes problemas:
? Son difciles de comprender ? Difciles de reutilizar ? Difciles de conservar ? Las afectan constantemente los cambios.

Fundamentos de Ingenier a de SW

31

Patrones de Diseo Patrn Alta Cohesin


? Solucin
? Asignar una responsabilidad de modo que la cohesin siga siendo alta ? Ejemplo: En el caso del punto de ventas se tienen tres clases Pago, TPDV y Venta y se quiere crear una instancia de Pago y asociarla a Venta. Segn el principio del patrn Creador la clase TPDV debe ser la encargada de realizar el pago.

EfectuarPago()

:TPDV

1:Crea()

P:Pago
2: AgregarPago(p)

:Venta

Fundamentos de Ingenier a de SW

32

16

Patrones de Diseo Patrn Alta Cohesin


? Qu pasa si el sistema tiene 50 operaciones, todas recibidas por la clase TPDV ?
? La clase se ira saturando con tareas y terminara perdiendo la cohesin

? Un mejor diseo de lo anterior sera:

EfectuarPago()

:TPDV

1:EfectuarPago()

:Venta
1.1:Crear()

:Pago

Fundamentos de Ingenier a de SW

33

Patrones de Diseo Patrn Alta Cohesin


? Este diseo delega a Venta la responsabilidad de crear el pago. ? Este diseo es conveniente ya que da soporte a una alta cohesin y a un bajo acoplamiento. ? En la prctica, el nivel de cohesin no puede ser considerado independiente de los otros patrones y principios (e.g. Patrones Experto y Bajo Acoplamiento). ? Beneficios:
? ? ? ? Mejoran la claridad y facilidad con que se entiende el diseo Se simplifica el mantenimiento y las mejoras de funcionalidad A menudo se genera un bajo acoplamiento Soporta mayor capacidad de reutilizaci n.

Fundamentos de Ingenier a de SW

34

17

Patrones de Diseo Patrn Alta Cohesin


? Algunos escenarios:
? Muy baja cohesin: Una clase es la nica responsable de muchas cosas en reas funcionales heterogneas. ? Baja cohesin: Una clase tiene la responsabilidad exclusiva de una tarea compleja dentro de un rea funcional. ? Alta cohesin: Una clase tiene responsabilidades moderadas en un rea funcional y colabora con las otras para llevar a cabo las tareas. ? Cohesin moderada: Una clase tiene peso ligero y responsabilidades exclusivas en unas cuntas reas que est n relacionadas lgicamente con el concepto de clase pero no entre ellas.

Fundamentos de Ingenier a de SW

35

Patrones de Diseo Patrn Controlador


? Problema:
? Quin debera 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 botn "Terminar Venta, est generando un evento sistmico que indica que la venta ha terminado.

? Un Controlador es un objeto de interfaz no destinada al usuario que se encarga de manejar un evento del sistema. Define adems el mtodo de su operacin.

Fundamentos de Ingenier a de SW

36

18

Patrones de Diseo Patrn Controlador


? Solucin ? Asignar la responsabilidad del manejo de un mensaje de los eventos de un sistema a una clase que represente una de las siguientes opciones:
? el sistema global (controlador de fachada). ? la empresa u organizacin global (controlador de fachada). ? algo en el mundo real que es activo (por ejemplo, el papel de una persona) 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).

Fundamentos de Ingenier a de SW

37

Patrones de Diseo Patrn Controlador


? Ejemplo:
? En la aplicacin del punto de venta se dan varias operaciones del sistema, como se advierte en la figura. ? Quin debera ser el controlador de eventos sistmicos como introducirProducto y terminarVenta?
Sistema terminarVenta( ) introducirProducto( ) efectuarPago( )

introducirProducto(CUP, cantidad) : ???

Qu clase debe encargarse de manejar este mensaje de eventos de sistema? Un controlador

Fundamentos de Ingenier a de SW

38

19

Patrones de Diseo Patrn Controlador


? De acuerdo con el patrn Controlador, disponemos de las siguientes opciones:

representa el sistema global representa la empresa u organizacin global

TPDV Tienda

representa algo en el mundo real que est activo (por ejemplo, el papel de una persona) y que Cajero puede intervenir en la tarea representa un manejador artificial de todas las ManejadordeComprarP operaciones del sistema de un caso de uso. roductos

Fundamentos de Ingenier a de SW

39

Patrones de Diseo Patrn Controlador


? En la decisin de cul de las cuatro clases es el controlador ms apropiado influyen tambin otros factores como la cohesin y el acoplamiento.

Sistema terminarVenta( ) introducirProducto( ) efectuarPago( ) operaciones del sistema descubiertas durante el anlisis de su comportamiento

TPDV terminarVenta( ) introducirProducto( ) efectuarPago( ) asignacin de las operaciones del sistema durante su diseo, mediante el patrn Controlador

Fundamentos de Ingenier a de SW

40

20

Patrones de Diseo Patrn Controlador


? Explicacin: La mayor parte de los sistemas reciben eventos de entrada externa, los cuales generalmente incluyen una interfaz grfica para el usuario (IGU) operado por una persona. ? La misma clase controlador debera utilizarse con todos los eventos sistmicos de un caso de uso, de modo que podamos conservar la informacin referente al estado del caso.
? Esta informacin ser til - por ejemplo - para identificar los eventos del sistema fuera de secuencia (entre ellos, una operacin efectuarPago antes de terminarVenta). Pueden emplearse varios controladores en los casos de uso.

Fundamentos de Ingenier a de SW

41

Patrones de Diseo Patrn Controlador


? Un defecto frecuente al disear controladores consiste en asignarles demasiada responsabilidad. Normalmente un controlador debera delegar a otros objetos el trabajo que ha de realizarse mientras coordina la actividad.

Fundamentos de Ingenier a de SW

42

21

Patrones de Diseo Patrn Controlador


? Manejador artificial de casos de uso - un controlador para cada caso.
? Advirtase que ste no es un objeto del dominio, es un concepto artificial, cuyo fin es dar soporte al sistema (una fabricacin pura, en t rminos de los patrones de GRASP). ? Por ejemplo, si la aplicacin del punto de venta contiene casos de uso como Comprar Productos y Devolver Productos, habr una clase ManejadordeComprarProductos y una clase ManejadordeDevolverProductos. ? Es una alternativa que debe tenerse en cuenta, si el hecho de asignar las responsabilidades en cualquiera de las otras opciones de controlador genera diseos de baja cohesin o alto acoplamiento. Esto ocurre generalmente cuando un controlador empieza a saturarse con demasiadas responsabilidades.

Fundamentos de Ingenier a de SW

43

Patrones de Diseo Patrn Controlador


? Beneficios ? Mayor potencial de los componentes reutilizables. Garantiza que la empresa o los procesos de dominio sean manejados por la capa de los objetos del dominio y no por la de la interfaz. ? Reflexionar sobre el estado del caso de uso. A veces es necesario asegurarse de que las operaciones del sistema sigan una secuencia legal o poder razonar sobre el estado actual de la actividad y las operaciones en el caso de uso subyacente.
? Por ejemplo, tal vez deba garantizarse que la operacin efectuarPago no ocurra mientras no se concluya la operacin terminarVenta. De ser as, esta informacin sobre el estado ha de capturarse en alguna parte; el controlador es una buena opcin, sobre todo si se emplea a lo largo de todo el caso.

Fundamentos de Ingenier a de SW

44

22

Patrones de Diseo Patrn Controlador


? Un corolario importante del patrn Controlador es que los objetos de la interfaz (por ejemplo, objetos de ventanas, applets) y la capa de presentacin no deberan encargarse de manejar los eventos del sistema.

Fundamentos de Ingenier a de SW

45

Patrones de Diseo Patrn Controlador


Tienda de Objetos

CUP Precio Total Ofrecido Oprime botn


Introducir Producto

Cantidad Desc. Saldo

Terminar Venta

Efectuar Pago

Cajero enIntroducirProducto()

Capa de presentacin Applet en Java


: TPDVApplet mensaje de eventos del sistema

? Ntese que la clase TPDVApplet - parte de la capa de presentacin - transmite un mensaje introducirProducto al objeto TPDV. ? No intervino en el proceso de la operacin, ni la decisin de cmo manejarla, el applet se limit a delegarla a la capa del dominio.

1: introducirProducto(cup, cantidad)

Controlador 2: hacerLineadeProducto(cup,cantidad)

Capa del Dominio

: TPDV

: Venta

Fundamentos de Ingenier a de SW

46

23

Patrones de Diseo Resumen


? Patrones GRASP
? ? ? ? ? Experto Creador Bajo Acoplamiento Alta Cohesin Controlador

Fundamentos de Ingenier a de SW

47

Patrones de Diseo Resumen


? Qu define un patr n? ? ? ? ? Porqu se le asigna un nombre? Qu significa GRASP? Existen casos cuando dos o ms patrones se aplican juntos? Describa brevemente cada uno de estos patrones:
? ? ? ? ? Experto Creador Controlador Alta Cohesin Bajo Acoplamiento

Fundamentos de Ingenier a de SW

48

24

Вам также может понравиться