Modelado conceptual con UML • • La necesidad de modelar Qué significa “modelo conceptual” • Objetos y clases – Es una vista gráfica de la información contenida en los requisitos. – Notación básica de objetos y clases – Tipos de clases • • • Atributos Operaciones Asociaciones – Propiedades básicas: nombres, multiplicidad, navegabilidad – Relación con otros elementos: atributos, operaciones • Generalizaciones – Generalización y clasificación – Jerarquías de clases • • Diagramas de clases y de objetos Asociaciones especiales 53 Analogía arquitectónica • • • • ¿Tiene sentido poner ladrillos sin hacer antes los planos? El modelo -los planos- ayuda a afrontar la complejidad del proyecto ¿Cuál es el lenguaje adecuado para representar los planos? Ingeniería directa e ingeniería inversa: una casa, un coche, un virus... Ingeniería directa Ingeniería inversa 54 Comunicación y representación del conocimiento Especificaciones Pruebas Documentación Planificación • • Para representar el conocimiento hace falta un lenguaje adecuado El conocimiento bien representado ayuda a hacerse las preguntas oportunas: ¿qué falta aquí? ¿qué pasaría si...? ¿por qué no se puede...? 55 ¿Qué es un modelo? • Abstracción o simplificación de la realidad: divide y vencerás • Diversos tipos de modelos: – estructura, electricidad, saneamiento… – estático, dinámico... ¿cómo se relacionan entre sí? • Modelos formales y modelos informales – Modelos informales: ad hoc, sin lenguaje común – Modelos formales: lenguaje universal, precisión, rigor, coherencia • Modelado y lenguaje – El lenguaje es vehículo del pensamiento: ayuda a pensar con claridad – El modelado es un elemento esencial del proceso de desarrollo de software – El modelado requiere un lenguaje adecuado • Modelar no es hacer diagramas sino pensar con diagramas 56 Propiedades deseables de un modelo • Comprensible – Expresado de tal forma que se pueda entender fácilmente. • Preciso – Representa fielmente el sistema modelado. • Predictivo – Se puede utilizar para obtener conclusiones correctas sobre el sistema. • Barato – Más económico que construir y estudiar el propio sistema. 57 Sistema, modelo, diagrama • Un sistema es una colección de elementos organizados para cumplir una finalidad concreta – Un sistema puede estar dividido en subsistemas • Un modelo es una abstracción de un sistema, es decir, una simplificación (completa y consistente) del sistema real, que sirve para comprenderlo mejor – Provisionalmente, un modelo puede ser incompleto (faltan elementos) o inconsistente (contiene contradicciones) – Un sistema puede estar modelado desde distintos puntos de vista complementarios, según lo que se considere relevante en cada caso • Un diagrama es la representación gráfica de un conjunto de elementos interconectados, una vista parcial de un modelo – Un modelo no es meramente una colección de diagramas – Un modelo puede contener elementos no representados en un diagrama – Un modelo puede contener especificaciones textuales esenciales 58 Herramientas de modelado • ¿Qué puede ofrecer una herramienta CASE para UML? – – – – Dibujo Corrección sintáctica Coherencia entre diagramas Integración con otras aplicaciones – Trabajo multiusuario – Reutilización – Generación de código... • Ejemplos – – – – – Visual Paradigm Altova UModel Magic Draw Visual UML Enterprise Architect 59 Objetos y clases • Dos niveles de abstracción: – objeto: una entidad concreta con identidad, estado y comportamiento – clase: un conjunto de entidades con estructura y comportamiento comunes • La relación de clasificación / instanciación – un objeto es instancia de una clase – la clase se usa como plantilla para construir (instanciar) objetos • Objetos y clases en análisis y diseño: – Análisis = especificación, vista externa, caja negra • clases, atributos y operaciones corresponden a conceptos del dominio • es habitual usar una notación simplificada al máximo – Diseño = implementación, vista interna, caja blanca • clases, atributos y operaciones corresponden a fragmentos de código • nuevos artefactos y soluciones que dependen del lenguaje y la plataforma de implementación y no tienen por qué corresponder a conceptos del dominio 60 Notación básica de objetos y clases p1 : Punto posiciónX = 3 posiciónY = -5 «instance of» Punto posiciónX posiciónY situar( ) mover( ) «instance of» p2 : Punto posiciónX = 0 posiciónY = 2 p1 : Punto p1 Punto Punto posiciónX posiciónY : Punto Punto situar( ) mover( ) 61 Tipos de clases • Tipos de clases según los objetos representados: – objetos físicos: avión, persona, libro... – objetos lógicos: cuenta corriente, asignatura, número complejo… – objetos históricos: asiento bancario, reserva de habitación… • • • Para entender lo que es una clase, hace falta entender cuáles serán sus instancias. Un caso especial lo constituyen los objetos que representan una colección, familia o tipo de cosas, más que una cosa en sí misma. Ejemplos: raza perruna, producto a la venta, título en la biblioteca. Es decir, un mismo concepto del mundo real puede ser modelado como objeto o clase según el contexto: – “Pastor Alemán” – “Lata de Atún” – “El Lenguaje Unificado de Modelado” • Todo objeto representa una “entidad concreta”, pero esto no significa necesariamente “entidad física” o tangible. 62 Clase vs. Tipo de dato Clase Tipo de dato (<<Datatype>>) Concepto Representa un concepto definido dentro de los límites del sistema Representa un concepto general e independiente, definido fuera de los límites del sistema Población La población es finita (tal vez ilimitada) y La población es finita o infinita, pero constante: las variable: existen tantas instancias como instancias existen implícitamente, sin necesidad de explícitamente sean creadas o crearlas, y no pueden ser destruidas destruidas en tiempo de ejecución Población finita: días, meses. Población infinita: años. Estructura Pueden ser simples o estructuradas (lo normal es que tengan varios atributos) Valores Los valores de los atributos pueden ser Los valores simples o estructurados son fijos e fijos o variables (más normal variables) inmutables, el sistema no puede modificarlos Pueden ser simples o estructuradas (ambos casos son normales): número entero, fecha dd/mm/aaaa Si es estructurado, entonces la población se obtiene como producto cartesiano de sus tipos de dato constitutivos, posiblemente con restricciones (fecha) Comparación Por referencia (“son el mismo”) Por valor (“son iguales”) Asociaciones Puede participar en asociaciones unidireccionales o bidireccionales Sólo en asociaciones unidireccionales (atributos): • ref. entrantes desde clase o tipo de dato propietario • si es estructurado, ref. salientes hacia tipo de dato Copiado Cuando se copia/clona un objeto, no se copian los objetos referenciados Cuando se copia un valor estructurado, se copian simultáneamente los valores referenciados Ejemplos Usuario, ¿Día-de-Calendario? Fecha, ¿Rol-de-Usuario? 63 Atributos • Atributo: propiedad compartida por los objetos de una clase – cada atributo tiene un valor (probablemente diferente) para cada objeto • Atributo derivado (concepto propio del análisis): – propiedad redundante que puede ser calculada a partir de otras – /área ( = base * altura) – pueden implementarse como operaciones al pasar a diseño • Notación (más importante en diseño) – pueden suprimirse todos los elementos excepto el nombre de atributo • visibilidad nombre multiplicidad : Tipo = valorInicial {propiedades} – propiedades predefinidas de los atributos: changeable, addOnly, frozen – ejemplos • saldo : Moneda = 0 • teléfonoOficina [0..2] {addOnly} 64 Operaciones • Operación: función o transformación que puede aplicarse a los objetos de una clase – pueden ser invocadas por otros objetos, o por el mismo objeto – método: especificación procedimental (implementación) de una operación • Notación (más importante en diseño) – pueden suprimirse todos los elementos excepto el nombre de operación • visibilidad nombre (param: Tipo = valDef,…) : TipoRet {propiedades} – propiedades predefinidas de las operaciones: isQuery – ejemplos: • obtenerSaldo ( ) : Moneda {isQuery} • marcar (número : Teléfono; reintentos : Integer) 65 Enlaces y asociaciones Asociación: especificación de un conjunto de enlaces Vendedor Artículo representa la estructura y el comportamiento del sistema Estatuilla : Artículo Enlace: conexión entre objetos determina una tupla de objetos instancia de una asociación Juan : Vendedor estado de los objetos enlazados estado del sistema Ana : Vendedor Cuadro : Artículo hecho + posibilidad de comunicación Espejo : Artículo 66 Nombre de asociación y nombre de rol Dirección del nombre Nombre de asociación subasta Vendedor Artículo Los nombres de asociación se pueden repetir en un modelo, excepto para asociaciones entre las mismas dos clases Persona Artículo vendedor artículo Nombres de rol Los nombres de rol se pueden repetir en asociaciones distintas, y pueden ser iguales que los nombres de las clases asociadas 67 Multiplicidad de la asociación • En una asociación binaria, la multiplicidad de un extremo de asociación especifica el número de instancias destino que pueden estar enlazadas con una única instancia origen a través de la asociación Artículo participa obligatoriamente 1..1 Persona Artículo vendedor • Valores típicos: – – – – • 0..1 1..1 0..* 1..* 0..* Persona participa opcionalmente artículo Persona “depende funcionalmente” de Artículo cero o uno uno y sólo uno (abreviado como “1”) desde cero hasta “muchos” (abreviado como “*”) desde uno hasta “muchos” Otros valores: – rangos enteros: (2..*), (0..3), etc. – lista de rangos separados por comas: (1, 3, 5..10, 20..*), (0, 2, 4, 8), etc. 68 Navegabilidad de la asociación • • La navegabilidad de una asociación binaria especifica la capacidad que tiene una instancia de la clase origen de acceder a las instancias de la clase destino por medio de las instancias de la asociación que las conectan Acceder = nombrar, designar o referenciar el objeto para... – leer o modificar el valor de un atributo del objeto (desaconsejable) invocar una operación del objeto (enviarle un mensaje) – usar el objeto como argumento o valor de retorno en un mensaje – modificar (asignar o borrar) el enlace con el objeto • No confundir: – dirección del nombre de la asociación: asimetría lingüística – navegabilidad o direccionalidad de la asociación: asimetría comunicativa Vendedor Vendedor Vendedor subasta subasta subasta Artículo Navegabilidad no especificada Artículo Asociación unidireccional Artículo Asociación bidireccional 69 Asociación vs. Atributo • Un atributo es equivalente a una asociación unidireccional (referencia hacia el tipo de dato del atributo) Punto posiciónX: Coordenada posiciónY: Coordenada Punto posiciónX «datatype» Coordenada posiciónY • Es conceptualmente incorrecto duplicar la representación Punto posiciónX: Coordenada posiciónY: Coordenada posiciónX «datatype» Coordenada posiciónY Proyecto Práctico de Ingeniería de Requisitos 70 Asociación vs. Operación • Toda asociación tiene un doble significado: – aspecto estático: estructura del sistema (estados posibles) – aspecto dinámico: comportamiento del sistema (interacciones posibles) • El nombre de la asociación puede reflejar más un aspecto que el otro: – nombres estáticos: contiene, situado-en, trabaja-para, matrimonio, etc. – nombres dinámicos: subasta, publica, consulta, etc. • • Son preferibles los nombres estáticos, reservando los nombres dinámicos para nombres de operaciones, invocadas a través de la asociación mediante el envío de mensajes Una misma asociación permite la invocación de muchas operaciones arranca Persona conduce Vehículo Persona Vehículo posee arrancar( ) conducir( ) detener( ) detiene 71 Generalización y clasificación • Principio de sustitución (Barbara Liskov, 1987): – Extensión: todas los objetos de la subclase son también de la superclase. – Intensión: la definición de la superclase es aplicable a la subclase. • Generalización: clase-clase. – Gato es un tipo de Mamífero, Mamífero es un tipo de Animal. • Clasificación: objeto-clase. – Fluti es un Gato, Fluti es un Mamífero, Fluti es un Animal. Gato Mamífero Animal «instance of» Fluti Instancias directas e indirectas 72 Generalización y especialización • Dos puntos de vista complementarios: – Generalizar es identificar las propiedades comunes (atributos, asociaciones, operaciones) de varias clases y representarlas en una clase más general denominada superclase. • Elevar el nivel de abstracción, reducir la complejidad, organizar. – Especializar es capturar la propiedades específicas de un conjunto de objetos dentro de una clase dada, que aún no han sido distinguidas en ella, y representarlas en una nueva clase denominada subclase. • Reutilizar un concepto añadiendo propiedades variantes. • Es una relación pura entre clases: – No tiene instancias, ni multiplicidad. – La subclase hereda todas las propiedades de la superclase. – Las propiedades heredadas de la superclase no se representan en la subclase (a menos que sean operaciones redefinidas). – Toda generalización induce una dependencia subclase superclase. 73 Jerarquías de clases Representaciones alternativas: - relaciones binarias - estructura en árbol Bicicleta Terrestre Transporte Automóvil Ferrocarril Avión Aéreo Transporte Helicóptero Terrestre Generalización: - no-reflexiva - transitiva - asimétrica Bicicleta Automóvil Ferrocarril Aéreo Avión Helicóptero 74 Dimensiones de especialización • Una superclase puede ser especializada en distintos grupos de subclases de acuerdo con criterios independientes: discriminadores. CuentaCorriente titular {disjoint, complete} CuentaPersonal • CuentaSocial moneda {disjoint, incomplete} CuentaEuro CuentaDólar Restricciones: – disjoint/overlapping: las subclases no pueden tener instancias en común / o sí. – complete/incomplete: no hay otras subclases / o sí. • • Valor por defecto: disjoint, incomplete. Partición propiamente dicha: disjoint, complete. 75 Generalización múltiple vs. Clasificación múltiple CuentaCorriente CuentaPersonal CuentaEuro CuentaPersonalEuro CuentaCorriente CuentaPersonal CuentaEuro «instance of» «instance of» «instance of» miCuenta miCuenta 76 Subclase vs. Atributo • ¿Cómo modelar las propiedades de los objetos? Regla general: – Propiedad cambiante o rango de valores muy grande: atributo. – Propiedad fija con valores enumerados: especialización (cada propiedad se traduce en un criterio de especialización, cada valor en una subclase). • También se puede modelar como un atributo con valor fijo. • Problema de la clasificación dinámica: ¿puede un objeto cambiar de clase? – Permitiría modelar un cambio de propiedad como una reclasificación del objeto. – Interesante para aprovechar el polimorfismo (mediante un cambio de subclase). – No es habitual en los lenguajes de programación, aunque UML lo permite. • Criterio final de especialización: comportamiento. CuentaCorriente titular moneda Alternativa a la doble especialización Coche ¿Especialización exagerada? color CocheAzul CocheVerde CocheRojo 77 Diagramas de clases y de objetos • Diagrama de clases – captura y especifica el vocabulario del sistema: • elementos: clases, atributos, operaciones... • relaciones: asociaciones, generalizaciones... • estructura del sistema, fundamento de su comportamiento – sugerencias para mejorar la comunicación: • nombres adecuados: clases, atributos, operaciones, asociaciones, roles • distribución espacial de los elementos • evitar cruces de líneas • distinto nivel de detalle según el propósito y nivel de abstracción • Diagrama de objetos – ilustra la estructura del sistema mediante situaciones particulares – “fotografía” del sistema: objetos, valores de atributos; enlaces – las instancias deben conformarse a sus especificaciones • objetos, enlaces clases, asociaciones • las especificaciones pueden estar representadas en distintos diagramas 78 Diagrama de clases vs. Diagrama de objetos accionista Sociedad Persona empleado Sociedad accionista Ana : Persona Sociedad Anónima Sociedad Limitada Acme : Sociedad accionista Clara : Persona Emca : empleado No es correcto decir que “un SociedadLimitada diagrama de objetos es una instancia de un diagrama de clases” Pedro : Persona empleado 79 Restricciones y notas Vendedor nif {regla nif} nombreDescriptivo nombreUsuario contraseña El NIF es un número de 8 dígitos, seguido de una letra que se obtiene usando el resto de la división módulo 23 como índice en la siguiente cadena de caracteres (el 0 corresponde a la letra T): TRWAGMYFPDXBNJZSQVHLCKE falta determinar las subclases de Sociedad Sociedad accionista Persona empleado {ningún accionista puede ser empleado} 80 Restricciones en asociaciones 0..1 * Persona {xor} Cuenta * Vuelo or exclusivo entre asociaciones 0..1 Sociedad * origen 1 * destino 1 Aeropuerto * 0..* {ordered} escala Cliente ordenación de los elementos * * {nonunique} reserva Mesa UML 1.x: una asociación no puede contener tuplas repetidas UML 2.x: la restricción {nonunique} en un extremo permite la repetición 81 Legibilidad de los diagramas Diagrama ilegible: letra demasiado pequeña (Arial 9). Tamaño mínimo en torno a 14. 82 Legibilidad de los diagramas Usar “índice” en miniatura. 83 Asociaciones actor-sistema y clase-clase • Un mismo concepto puede ser modelado a la vez como actor y como clase: – Actor: representa entidades externas al sistema. – Clase: representa entidades modeladas dentro del sistema. • No confundir asociaciones actor-sistema (casos de uso, relaciones con el exterior) con asociaciones clase-clase (relaciones internas): – “Para subastar algún artículo es necesario darse de alta como vendedor, introduciendo el NIF, un nombre descriptivo (largo), un nombre de usuario (breve) y una contraseña de acceso. Una vez que el vendedor está dado de alta, puede registrar artículos en la subasta o modificar alguno de sus datos: descripción breve, descripción ampliada, fotografía en formato JPEG, y precio de salida.” Registrar artículo Vendedor Modificar datos de artículo Vendedor nif nombreDescriptivo nombreUsuario contraseña subasta registra modifica Artículo descripciónBreve descripciónAmpliada fotografía precioSalida 84 Asociaciones reflexivas • • • • Una asociación reflexiva (o recursiva) es aquella en la que los dos extremos de la asociación están unidos a la misma clase. Los enlaces pueden conectar dos instancias diferentes de la misma clase, o incluso una instancia consigo misma. En una asociación reflexiva los nombres de rol son obligatorios, para poder distinguir los dos extremos de la asociación. Una asociación reflexiva no es simétrica: los extremos son distinguibles, aunque la asociación quiera significar equivalencia: es-amigo-de, es-igual-a... 0..1 jefe 0..* amante dirige Empleado 0..* subalterno dirige(Ana, Juan) ≠ dirige(Juan, Ana) ama Persona 0..* amado ama(Pedro, Clara) ≠ ama(Clara, Pedro) 85 Ciclos de asociaciones y asociaciones derivadas • • ¿Puede un alumno matricularse en asignaturas que no son de su titulación? Posibles interpretaciones alternativas del diagrama: la titulación matriculada… – – – – se obtiene a partir de las asignaturas: asociación derivada. actúa como restricción para elegir asignatura matriculada. actúa como sugerencia para elegir asignatura matriculada. titulación matriculada y asignatura matriculada son independientes. {...} Titulación 1 0..* Alumno matriculado 1 0..* matriculado pertenece 1..* Asignatura 0..* 86 Agregación • Es un tipo especial de asociación que representa una relación todo-parte, transitiva y asimétrica – no impone ninguna restricción especial sobre la multiplicidad – puede ser reflexiva para las clases, pero no para las instancias 0..* Máquina 0..* 1..* Pieza 0..* m1 : Máquina p1 : Pieza p2 : Pieza m2 : Máquina 87 Composición • Es un tipo especial de agregación no compartida – la multiplicidad sólo puede ser 0..1 ó 1..1 – el todo es responsable de la existencia y almacenamiento de las partes – propagación de las operaciones de copiado y borrado • Composición no significa encapsulamiento ni acceso restringido Escuadrilla 0..3 1..* Avión 0..* 0..2 Piloto 0..1 1 Cabina 1 Fuselaje 2 Ala 88 Anidamiento – Clase interna • Una clase puede anidarse dentro de otra, como los paquetes, con el fin de limitar la visibilidad desde el exterior • La relación de anidamiento no es una asociación • No tiene nada que ver con la agregación o la composición – la composición abstrae enlaces todo-parte entre objetos – el anidamiento es una pura relación de inclusión entre clases A -C +B 89 Diseño e implementación de asociaciones binarias • Los lenguajes OO no proporcionan una construcción adecuada – combinación de atributos y operaciones para gestionar los enlaces – colecciones para manejar la multiplicidad (comprobación de tipo...) – referencias cruzadas sincronizadas para manejar la bidireccionalidad Diagrama de análisis Hombre 0..1 esposo 0..1 esposa Código demasiado simple: Mujer esposa 0..1 Diagrama de diseño Hombre 0..1 {sincronizado} Mujer public class Hombre { private Mujer esposa; … } public class Mujer { private Hombre esposo; … } esposo 90 Clase-asociación • Tiene todas las propiedades de una clase y de una asociación: – atributos, operaciones y asociaciones con otras clases. – conexión entre clases que especifica enlaces entre ellas. – multiplicidad, navegabilidad, agregación... • Es un único elemento, por tanto tiene un nombre único. • Como cualquier otra asociación, en UML 1.x no podía contener tuplas repetidas, aunque los valores de los atributos fueran distintos: sustituir clase-asociación por clase intermedia. Persona 1..* ¿Representa el estado actual o el registro histórico? ¿Queremos permitir repeticiones? trabaja-para 0..* Empresa trabaja-para 0..* pagar-en sueldo pagar( ) 1 Cuenta 91 Transformación de clase-asociación en clase intermedia clase-asociación • Es una forma de implementar la clase-asociación, que consiste en sustituir la clase-asociación por una clase simple, cuyas instancias representan enlaces. • Las multiplicidades originales se cruzan, y aparecen otras nuevas. • Permite automáticamente la existencia de tuplas repetidas; hay que añadir una restricción adicional si se desea evitarlas. Persona 1..* trabaja-para 0..* Empresa trabaja-para sueldo pagar( ) Persona Empresa 1 1 0..* trabaja-para 1..* sueldo pagar( ) clase intermedia 92 Asociación n-aria • Asociación entre N clases: los enlaces conectan N instancias – no permite: dirección del nombre, agregación – sí permite: navegabilidad (aunque significado problemático), clase-asociación • Multiplicidad engañosa: – número permitido de instancias para cualquier posible combinación de instancias de las otras n-1 clases – la multiplicidad mínima suele ser 0 – efecto “rebote del uno”: la multiplicidad mínima 1 (o superior) en un extremo implica que debe existir un enlace (o más) para cualquier posible combinación de instancias de los otros extremos Un equipo enlazado con una temporada siempre tiene un * * Equipo Temporada entrenador asignado: no hay “enlaces cojos”. 0..1 Entrenador La multiplicidad mínima 1 implicaría la existencia de un enlace (o más) para toda posible combinación de equipo y temporada. 93 Transformación de asociación n-aria en clase intermedia asociación n-aria • Sustituir la asociación n-aria por una clase simple, cuyas instancias representan enlaces. Equipo * * Temporada 0..1 • Las multiplicidades originales se pierden, y aparecen otras nuevas. • Permite la existencia de tuplas repetidas, cuando es necesario. Entrenador ? Equipo • Es una forma de implementar la asociación n-aria, pero hay que añadir restricciones adicionales para no permitir tuplas repetidas y para expresar las multiplicidades originales perdidas. 1 * ETE * 1 Temporada * 1 Entrenador clase intermedia 94