UML - Diagramas UML - implantação, componente, estrutura composta
Gonzalorojas 12 Uml, Patrones De Diseno
description
Transcript of Gonzalorojas 12 Uml, Patrones De Diseno
![Page 1: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/1.jpg)
UML: Patrones para asignación de responsabilidades
Gonzalo Rojas D.
![Page 2: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/2.jpg)
Introducción
• Funcionalidad de Sistemas Orientados a Objetos está definida por los mensajes entre objetos para realizar operaciones
• Una adecuada asignación de responsabilidades entre objetos contribuye al desarrollo de sistemas robustos
• Se vela por el cumplimiento de los conceptos fundamentales de la Orientación a Objetos.
![Page 3: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/3.jpg)
What are patterns?
• Principles and solutions codified in a structured format describing a problem and a solution
• A named problem/solution pair that can be applied in new contexts
• It is advice from previous designers to help designers in new situations
![Page 4: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/4.jpg)
Some definitions of design patterns
• “Design patterns constitute a set of rules describing how to accomplish certain tasks in the realm of software development.” (Pree, 1994)
• “Design patterns focus more on reuse of recurring architectural design themes, while frameworks focus on detailed design… and implementation.” (Coplien & Schmidt, 1995).
• “A pattern addresses a recurring design problem that arises in specific design situations and presents a solution to it” (Buschmann, et. al. 1996)
• “Patterns identify and specify abstractions that are above the level of single classes and instances, or of components.” (Gamma, et al., 1993)
![Page 5: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/5.jpg)
GRASP patternsGeneral Responsibility Assignment Software Patterns
• Expert• Creator• Low Coupling• High Cohesion• Controller• Polymorphism• Pure Fabrication• Indirection• Law of Demeter
![Page 6: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/6.jpg)
Experto en Información Problema:
¿Cuál es el principio general para asignar responsabilidades a los objetos?¿Quién debiera ser el responsable de conocer la información?
Solución:Asignar una responsabilidad a la clase que tiene la información necesaria para cumplir la responsabilidad (experto)
![Page 7: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/7.jpg)
-cantidad
VentaLíneadeProducto
-fecha-hora
Venta
1..*
1..1
-descripción-precio-artID
Descripción de Producto
0..* 1..1
Experto: Ejemplo
• ¿Quién es el responsable de conocer el monto total de la venta?
![Page 8: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/8.jpg)
Experto: Ejemplo
• ¿Qué información necesito?– Todas las Líneas de Producto de la Venta y
sus respectivos subtotales
• ¿De qué clase del Esquema Conceptual puedo obtener esa información?
:Venta2: tot := total()
![Page 9: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/9.jpg)
Experto: Ejemplo
• ¿Y los respectivos subtotales (cantidad x precio) de cada Línea de Producto?
• ¿Y el precio de cada Producto?
vlp :VentaLíneadeProducto2.2 st := subtotal()
dp:DescripcióndeProducto
2.2.1 precio := precio()
![Page 10: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/10.jpg)
:Venta vlp :VentaLíneadeProducto
:VentaLíneadeProducto
2.1*: [para cada] vlp := siguiente()
2.2 st := subtotal()
dp:DescripcióndeProducto
2.2.1 precio := precio()
2: tot := total()
-total() : int
-fecha-hora
Venta
-subtotal() : int
-cantidad
VentaLíneadeProducto
-precio() : int
-descripción-precio-artID
DescripcióndeProducto
![Page 11: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/11.jpg)
Experto
• Mantiene el encapsulamiento de la información
• Favorece el bajo acoplamiento
• Puede originar clases excesivamente complejas
![Page 12: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/12.jpg)
CreadorProblema:
¿Quién debiera ser el responsable de la creación de una nueva instancia de alguna clase?
Solución:B es un Creador de A si se cumple uno o más de las siguientes condiciones:– B agrega objetos de A– B contiene objetos de A– B registra objetos de A– B utiliza intensivamente objetos de A– B tiene los datos de inicialización de objetos de A (B es
Experto en la creación de A)
![Page 13: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/13.jpg)
Creador: Ejemplo
:Caja :Venta v :VentaLíneadeProducto
introducirProducto (artID, cantidad)
1: [nueva venta] crear() 3.1: crear (dp, cantidad)3: añadirLíneadeProducto (p, cantidad)
-crear()-total() : int
-fecha-hora
Venta
-crear(in dp, in cantidad)-subtotal() : int
-cantidad
VentaLíneadeProducto
![Page 14: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/14.jpg)
Creador
• La intención básica del patrón es encontrar un Creador que necesite conectarse al objeto creado en alguna situación
• Promueve el bajo acoplamiento, al hacer responsable a una clase de la creación de objetos que necesita referenciar
![Page 15: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/15.jpg)
Bajo AcoplamientoProblema:
¿Cómo promover una baja dependencia y una alta reutilización de clases?
Solución:Asignar responsabilidades manteniendo bajo el acoplamiento
![Page 16: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/16.jpg)
Bajo Acoplamiento: Ejemplo
:Caja p:Pago1: crear()
2: agregarPago(p)
efectuarPago()
:Venta
:Caja :Venta1: efectuarPago()
1.1 crear()
efectuarPago()
:Pago
Deseamos crear un Pago y asociarlo a Venta
¿Qué alternativa de diseño soporta el patrón Bajo Acoplamiento?
![Page 17: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/17.jpg)
Bajo Acoplamiento
• Formas de acoplamiento– Clase A posee un atributo que refiere a una
Clase B– Clase A posee un método que referencia a
Clase B, mediante parámetro o retorno– Clase A es subclase de B
• Soporta el diseño de clases más independientes, que reducen el impacto de cambios y acrecientan la reutilización
![Page 18: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/18.jpg)
Alta CohesiónProblema:
¿Cómo promover una complejidad manejable de clases?
Solución:Asignar responsabilidades manteniendo alta la cohesión
![Page 19: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/19.jpg)
Alta Cohesión: Ejemplo
:Caja p:Pago1: crear()
2: agregarPago(p)
efectuarPago()
:Venta
:Caja :Venta1: efectuarPago()
1.1 crear()
efectuarPago()
:Pago
Deseamos crear un Pago y asociarlo a Venta
¿Qué alternativa de diseño soporta el patrón Alta Cohesión?
![Page 20: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/20.jpg)
Alta Cohesión
• Muy Baja Cohesión: una Clase, única responsable de muchas cosas en áreas funcionales muy diversas
• Baja Cohesión: una Clase, única responsable de una tarea compleja en un área funcional
• Alta Cohesión: una Clase con responsabilidades moderadas en un área funcional, colaborando con otras para concretar tareas. Diseño más claro y comprensible.
![Page 21: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/21.jpg)
ControladorProblema:
¿Quién debe ser el responsable de gestionar un evento de entrada del sistema?
Solución:Una clase que represente una de las siguientes opciones:– El sistema global– Empresa u organización global– Un rol controlador del mundo real– Un manejador artificial de los eventos del sistema
![Page 22: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/22.jpg)
:Caja
introducirProducto (artID, cantidad)
:Tienda
introducirProducto (artID, cantidad)
:Cajero
introducirProducto (artID, cantidad)
:ManejadorComprarProductos
introducirProducto (artID, cantidad)
Controlador: Ejemplo
![Page 23: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/23.jpg)
Controlador
• Aspectos a considerar en la elección del Controlador:
• La misma clase para todos los eventos de un caso de uso
• No asignar demasiada responsabilidad a un solo controlador
• Desaturar controladores
• Minimizar controladores humanos
![Page 24: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/24.jpg)
Diagrama Colaboración
:Caja :Venta v :VentaLíneadeProducto
:VentaLíneadeProducto
:Catálogo
:DescripcióndeProducto
introducirProducto (artID, cantidad)
1: [nueva venta] crear()3: añadirLíneadeProducto (p, cantidad)
2: dp := encontrarDP(artID)
2.1: dp := encontrar(artID)
1.1: crear()
3.2: agregar (v)
3.1: crear (dp, cantidad)
![Page 25: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/25.jpg)
(Otro) Diagrama Colaboración
:Caja :Venta vlp :VentaLíneadeProducto
:VentaLíneadeProducto
1: terminar()2: tot := total()
2.1*: [para cada] vlp := siguiente()
2.2 st := subtotal()
dp:DescripcióndeProducto
2.2.1 precio := precio()
![Page 26: Gonzalorojas 12 Uml, Patrones De Diseno](https://reader036.fdocument.pub/reader036/viewer/2022062419/557b0416d8b42af74a8b4d4a/html5/thumbnails/26.jpg)
-crear(in dp, in cantidad)-subtotal() : int
-cantidad
VentaLíneadeProducto
-dirección-nombre
Tienda
-encontrarDP(in artID) : DescripcióndeProducto
Catálogo
Cajero
-crear()-terminar()-total() : int-añadirLíneadeProducto(in dp, in cantidad)
-fecha-hora-estado: {en progreso, terminada}
Venta
-monto
Pago Cliente
1..*
1..1
1..1
1..*
1..1
1..1
1..1
1..1
1..1 1..1
0..*
1..11..1
0..*
1..1 1..*
0..*
0..1
1..1
1..1
1..1
0..*
Producto
-precio() : int
-descripción-precio-artID
DescripcióndeProducto
-introducirArtículo(in artID, in cantidad)-finalizarVenta()
Caja