Clases: Notación Gráfica Otros ejemplos:
lista primero ultimo añadir quitar cardinalidad pila apilar desapilar cardinalidad
Clases: Encapsulación La encapsulación presenta dos ventajas básicas: Se protegen los datos de accesos indebidos El acoplamiento entre las clases se disminuye Favorece la modularidad y el mantenimiento
Los atributos de una clase no deberían ser manipulables directamente por el resto de objetos
Clases: Encapsulación Los niveles de encapsulación están heredados de los niveles de C++:
(-) Privado : es el más fuerte. Esta parte es totalmente invisible (excepto para clases friends en terminología C++)
(#) Los atributos/operaciones protegidos están visibles para las clases friends y para las clases derivadas de la original
(+) Los atributos/operaciones públicos son visibles a otras clases (cuando se trata de atributos se está transgrediendo el principio de encapsulación)
Clases: Encapsulación Ejemplo:
Relaciones entre Clases Los enlaces entre de objetos pueden representarse entre las respectivas clases
Formas de relación entre clases:
Asociación y Agregación (vista como un caso particular de asociación) Generalización/Especialización
Las relaciones de Agregación y Generalización forman jerarquías de clases
Asociación La asociación expresa una conexión bidireccional entre objetos Una asociación es una abstracción de la relación existente en los enlaces entre los objetos
Ejemplo:
Asociación (Gp:) Persona (Gp:) Compañía (Gp:) trabaja-para (Gp:) nombre s. s. (Gp:) nombre dirección (Gp:) jefe (Gp:) Administra (Gp:) empleado (Gp:) * (Gp:) * (Gp:) emplea-a (Gp:) 0.. 1 (Gp:) 0.. 1 (Gp:) 0.. 1 (Gp:) * (Gp:) marido (Gp:) casado-con (Gp:) mujer
Especificación de multiplicidad (mínima…máxima)
1 Uno y sólo uno 0..1 Cero o uno M..N Desde M hasta N (enteros naturales) * Cero o muchos 0..* Cero o muchos 1..* Uno o muchos (al menos uno)
La multiplicidad mínima >= 1 establece una restricción de existencia
Asociación
Asociación Cualificada Aerolínea Viajero nro_billete * 0..1 Tablero Ajedrez fila columna 1 1 Cuadro Reduce la multiplicidad del rol opuesto al considerar el valor del cualificador
La agregación representa una relación parte_de entre objetos
En UML se proporciona una escasa caracterización de la agregación
Puede ser caracterizada con precisión determinando las relaciones de comportamiento y estructura que existen entre el objeto agregado y cada uno de sus objetos componentes
Agregación
Caracterizaciones relacionadas con la multiplicidad Objeto Agregado Objeto Componente Máxima 1 ? disjunto > 1 ? no disjunto
Multiplicidad Máxima 1 ? univaluado > 1 ? multivaluado
Multiplicidad Mínima 0 ? flexible > 0 ? estricta Multiplicidad
Multiplicidad Mínima 0 ? nulos permitidos > 0 ? nulos no permitidos Agregación: Caracterización (mínc, máxc) (mína, máxa)
En UML sólo se distingue entre agregación y composición (aggregate composition), siendo esta última disjunta y estricta
Además se una agregación se podría caracterizar según:
¿Puede el objeto parte comunicarse directamente con objetos externos al objeto agregado? No => inclusiva Si => no inclusiva
¿Puede cambiar La composición del objeto agregado? Si => dinámica No => estática
Agregación: Caracterización
Ejemplos
Ejemplos
Ejemplos Cuenta Persona 1 * or Asociación excluyente Empresa * * Usuario Estación está-autorizado-en prioridad privilegios camb_privil Autorización * * Clase de asociación Polígono Punto contiene 3.. * 1 {ordenado} Agregación
Clases y Objetos Diagrama de Clases y Diagramas de Objetos pertenecen a dos vistas complementarias del modelo
Un Diagrama de Clases muestra la abstracción de una parte del dominio
Un Diagrama de Objetos representa una situación concreta del dominio
Las clases abstractas no son instanciadas
Generalización Permite gestionar la complejidad mediante un ordenamiento taxonómico de clases
Se obtiene usando los mecanismos de abstracción de Generalización y/o Especialización
La Generalización consiste en factorizar las propiedades comunes de un conjunto de clases en una clase más general
Nombres usados: clase padre – clase hija. Otros nombres: superclase – subclase, clase base – clase derivada
Las subclases heredan propiedades de sus clases padre, es decir, atributos y operaciones (y asociaciones) de la clase padre están disponibles en sus clases hijas
Generalización
La Generalización y Especialización son equivalentes en cuanto al resultado: la jerarquía y herencia establecidas
Generalización y Especialización no son operaciones reflexivas ni simétricas pero sí transitivas
Generalización
Generalización
La especialización es una técnica muy eficaz para la extensión y reutilización
Restricciones predefinidas en UML: disjunta – no disjunta total (completa) – parcial (incompleta)
Generalización
La noción de clase está próxima a la de conjunto
Dada una clase, podemos ver el conjunto relativo a las instancias que posee o bien relativo a las propiedades de la clase
Generalización y especialización expresan relaciones de inclusión entre conjuntos Generalización
Particionamiento del espacio de objetos => Clasificación Estática
Particionamiento del espacio de estados de los objetos => Clasificación Dinámica
En ambos casos se recomienda considerar generalizaciones/especializaciones disjuntas
Generalización
Un ejemplo de Clasificación Estática:
Generalización { estática }
Un ejemplo de Clasificación Dinámica:
Generalización { dinámica }
Extensión: Posibles instancias de una clase
Intensión: Propiedades definidas en una clase
int(A) ? int(B)
ext(B) ? ext(A) Generalización
Página anterior | Volver al principio del trabajo | Página siguiente |