Capítulo IV: UML (UnifiedModelingLanguage) Vistas (artefactos que representan un aspecto del sistema) Estructural: estructura lógica (Diagramas de clase y de casos de uso) Dinámico: Interacciones entre objetos (Diagramas de interacción, de actividades y máquinas de estado) Implementación: componentes (diagramas de componentes y despliegue) OMG y UML Clases en UML: rectángulo con tres compartimentos Nombre de la clase (Sustantivo y empieza por Mayúscula) Atributos (identificador y tipo; sustantivo y empieza por minúscula) Visibilidad nombre_atributo : tipo_atributo = valor inicial {`otras propiedades } Servicios (frase verbaly empieza por minúscula) Visibilidad nombre_servicio ( lista de parámetros ) : tipo de retorno {`otras propiedades }` <<analisis>> ImagenEspermatozoides RespuestaFrecuencia frecuenciainicio : float frecuenciafin : float intervalofrec : float modulo : vector<double> argumento : vector<double> CdgEspermatozoide cdg_x : float cdg_y : float getcdg_y( : void) : float getcdg_x( : void) : float setcdg_y(cdg : float) : void setcdg_x(cdg : float) : void Variantes del conceptos de clases(/2) Clases parametrizadas Contenedores (templete) ANSI C++ (STL) Java NO Clases instanciadas ListaPasajeros getdatopasajero(numpasajero : unsigned) : Pasajero iniciarlista( : void) : void <<const>> darnumeropasajeros( : void) : int setdatospasajero( : const Pasajero) : void Pasajero numdni : unsigned long nombre : std::string Clase instanciada de STL vector vector<pasajero> ListaPasajerosMFC getdatopasajero() iniciarlista() <<const>> darnumeropasajeros() setdatospasajero() <<const>> getdni( : void) : unsigned long Clase parametrizada setdni(dni : unsigned long) : void CList de las MFCs getnombre( : void) : std::string& setnombre(nom : const char) : void CList<PasajeroMFC,PasajeroMFC> Problema Galería de Cuadros PasajeroMFC numdni : unsigned long nombre : CString <<const>> getdni() setdni() getnombre() setnombre() Variantes del conceptos de clases(2/2) Interfases Especifica algunos servicios públicos del paquete Estereotipo <<interface>> Carece de atributos Relaciones entre cliente y servidor Cortafuegos C++ emplea las clases abstractas Palabra clave interface (JAVA y C#) CRespFrMFCDlg Cliente del paquete Visualizador Constructor privado Método de Fabricacion (GoF) <<interface>> IAdaptadorVisualizar <<abstract>> InicializarPlotXY() <<abstract>> PintarPlotXY() <<static>> factoriavisualizadores() AdaptadorVisualCNTGraph AdaptadorVisualCNTGraph() <<virtual>> InicializarPlotXY() <<virtual>> PintarPlotXY() Interfaz estable Solución tecnológica CNTGraph
Tipos de relaciones(/4) Asociaciones Relaciones de necesito-conocer Bidireccionales en AOO relaciones entre categorías conceptuales Unidireccionales en DOO Caminos de visibilidad y navegabilidad Lazo mortal Guía de asociación Un objeto de la clase A usa un servicio de un objeto de la clase B. Un objeto de la clase A crea un objeto de la clase B. Un objeto de la clase A tiene un atributo cuyos valores son objetos de la clase B o colecciones de objetos de la clase B. Un objeto de la clase A recibe un mensaje con un objeto de la clase B pasado como argumento. estudia las Asignatura Alumno notateoria..n3 +el que estudia +la materia Tipos de relaciones(2/4) Agregación Ruedas Tipo particular de asociación, del todo con las partes 3..5 Composición es una agregación ligada con la creación Motor Las partes no se pueden intercambiar Guía de asociación Existe un ensamblaje obvio del todo con las parte. Alguna propiedad del compuesto se propaga a las partes. El tiempo de vida de la parte está ligado al tiempo de vida del compuesto. Beneficios No en AOO Las operaciones como la copia y la eliminación que se aplican al todo a menudo se propagan a las partes. 4 Coche Puertas JuegoDados Dado 2 Tipos de relaciones(3/4) Generalización Pago cantidad : Dinero Factorizar conceptos (economía de palabras) Reglas 00% y Es un Subclases: La subclase tiene atributos adicionales. La subclase tiene asociaciones adicionales. La subclase funciona de manera diferente e interesante a la superclase o a otras subclases. Superclase Cuando las subclases potenciales representen variaciones de un concepto similar. Las subclases se ajustarán a las reglas del 00% y Es-un. Todas las subclases tienen el mismo atributo que se puede factorizar y expresarlo en la superclase. Todas las subclases tienen la misma asociación que se puede factorizar y relacionar con la superclase. Herencia Implementación de clases SW Problemas - Composición Sólo cuando proceden jerarquía de clases conceptuales PagoEnEfectivo PagoACrédito PagoConTarjeta 2
Ejemplos de generalización Ejemplos de generalización Tipos de relaciones(4/4) Dependencia Relación semántica entre dos o más elementos Un cambio en el servidor puede requerir cambios en el cliente. No se añaden atributos (diferencia respecto a la asociación). Cuando no es ni una asociación ni generalización. Realización Conexión entre el cliente y la interfaz Es un tipo de dependencia (se esconde la implementación) Relación cliente-servidor Calificador Asociaciones derivadas ClienteImpresora <<Interface>> Clases asociativas IImpresora enviartarea() Implem entación del servicio env iartarea() 3
Paquete(/2) Contenedor de: clases, paquetes, diagramas,.. Propósito: la organización de cosas que tengan algo en común. MFC (.NET) ActiveX-Bode VistaFrecuencia ELAI Visibilidad y espacio de nombres Fuera y dentro Identificación UML: paquete:nombre DominioFrecunc iaela Cómo particionar el dominio en paquetes Se encuentran en el mismo área de interés Están juntos en una jerarquía de clases Participan en los mismos caso de uso. Están fuertemente asociados. STL-ANSI C++ Paquete(2/2) Estabilidad del paquete Reducir las dependencias de otros paquetes Dependencias cíclicas Dependencias de paquetes estables Vigilar los paquetes muy utilizados y en fase de elaboración. Cuidado con las revisiones. Peligro: Paquetes con mucha responsables inestables Cohesión interna: Diseño: CR elevados Unidad de trabajo Númeroderelacionesinternas CR = Númerodetipos Vista de gestión : paquetes+dependencias Diagramas de casos de uso Interacciones con el exterior. Sólo para ayudar a comprenderlos. Importante son los documentos. Solicitar catálogo sabe donde hacer pedido, Relaciones pero hacer pedido no sabe de donde viene... Factorización Extensión <<extend>> Hacer Pedido Solicitar catálogo Generalización Vendedor Pago compras Obtener datos cliente Pedir producto Pago crédito Pago al contado 4
Cuestiones de UML estructural. Notación de UML sobre las clases. 2. Uso de las clases parametrizadas. Hágase un ejemplo sobre las pinturas de una galería de arte. 3. Defina un paquete sobre objetos geométricos, tales como cuadrado, rectángulo, triángulo,... Defina un interfase. 4. Defina una jerarquía de clases para los objetos geométricos del anterior pregunta. Presente las superclases y las subclases. 5. Cuando emplear una relación de asociación, agregación, composición, generalización y dependencia. 6. Cómo particionar la aplicación en paquetes. 7. Qué es la vista de gestión del modelo. 8. Relaciones en los diagramas de caso de uso. Motor..4 Piloto..2 Vendedor de billetes Avión Vuelo Reserva Avión militar Avión comercial Línea aérea Avión de carga Avión de pasajeros Dinero cantidad : float eltipomoneda : TipoDinero Dinero() Dinero(valor : float, eltipo : TipoDinero) Dinero(elValor : Dinero&) operator=(elvalor : Dinero&) : Dinero& setcantidad(lacantidad : float) : void getcantidad( : void) : float settipodinero(eltipo : TipoDinero) : void gettipodinero( : void) : TipoDinero 5