Notación Básica UML. Diagramas de Estructura Estática

Los diagramas de estructura estática los utilizaremos en dos fases:

  1. Modelo conceptual en la Fase de Análisis para modelar elementos del dominio.
  2. Diagrama de Clases en la Fase de Diseño, para presentar los elementos de la solución software.

En ambos casos se comparte la misma notación para los elementos que lo forman (clases y objetos) y las relaciones entre ambos (asociaciones)

Clases

Una clase se representan como un rectángulo dividido en tres partes (tres compartimentos).

  • En el compartimento superior, centrado, va el nombre de la clase.
  • El segundo compartimento contiene los atributos, en la forma: visibilidad nombreAtributo: tipo
  • El tercer compartimento contiene los métodos, en la forma: visibilidad nombreMétodo(parámetros): tipoRetorno.
  • Los parámetros van separados por comas y sólo se especifica el tipo.
  • Los constructores no tienen tipo de retorno.
  • La visibilidad, de atributos y métodos, puede ser:  – privado, + público, # protegido, ~ de paquete

Ejemplo:

Objetos

Se representa igual a una clase, debemos seguir la siguiente sintaxis nombre del objeto junto con el nombre de la clase subrarrayado.  Nombre del objeto: nombre de la clase

Ejemplo Objeto

Asociaciones

 Una asociación (relación entre dos clases) se representa como una línea continua entre dos Clases, y puede tener el nombre de la relación sobre esta línea. Ejemplo:

En el ejemplo anterior cada Carro tiene una relación con Conductor, pero también cada Conductor tienerelación con Carro. Esta es una relación en ambos sentidos.

  Para mostrar que la relación sólo tiene un sentido se muestra con una flecha que indica el sentidode la relación. Ejemplo:

Viaje

En este ejemplo un Pasajero conoce el Carro(o carroes) con el cual viaja, pero el Carrono tiene ninguna relación con los Pasajeros.

 Multiplicidad

 Es una restricción que se pone a una asociación, que limita el número de instancias de una clase que pueden tener esa asociación con una instancia de la otra clase.

En este caso las relaciones son:

- Un chofer tiene relación con cero o más autobuses.

- Un autobús tiene relación con uno o dos choferes.

- Una terminal de pasajero tiene relación con cero o muchos autobuses.

- Un autobús tiene relación con un terminal de pasajero.

 

Roles

Para indicar el papel que juega una clase en una asociación se puede especificar un nombre de rol.  Se representa en el extremo de la asociación junto a la clase que desempeña dicho rol.  Ejemplo:

Agregación

La agregación representa el objeto compuesto.  Durante el desarrollo de una aplicación se nos presentara la necesidad de crear objetos complejos que no encajan con los tipos de datos básicos que proveen los lenguajes: tipo caracteres, enteros, reales, entre otros. El símbolo de agregación es un diamante colocado en el extremo en el que está la clase que representa el todo.  Podemos trabajar con dos tipos de agregación: Agregación por Valor y Agregación por Referencia.

Agregación por contenido físico o por valor 

El contenedor contiene el objeto en sí. Cuando creamos un objeto contenedor, se crean también automáticamente los contenidos.  Ejemplo:

Agregación conceptual o por referencia 

Se tienen punteros a objetos. No hay un acoplamiento fuerte. Los objetos se crean y se destruyen dinámicamente.

En ambos casos la agregación se destaca por un rombo transparente.

 

Herencia

Como vimos en la primera entrega, la herencia es tomar características y funcionalidades definidas en otras clases. Ejemplo: Auto hereda de vehículo motorizado. Como grúa también hereda de vehículo automotor

Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes.

La relación de herencia se representa mediante un triangulo en el extremo de la relación que corresponde a la clase mas general o clase “padre”.  Al plantear una relación de herencia con varias clases subordinadas, dentro de un diagrama concreto,  no se hace necesario colocarlas todas, podemos representar con puntos suspensivos. Ejemplo:

Elementos Derivados

En algunas ocasiones nos encontramos con la posibilidad de calcular un valor de un elemento a partir de otros elementos presentes en el modelo.  Se incluye para dar mayor claridad al diseño.  Se representa con una barra / precediendo al nombre del elemento derivado.

En ambos casos la agregación se destaca por un rombo transparente.

 

Herencia

 

Como vimos en la primera entrega, la herencia es tomar características y funcionalidades definidas en otras clases. Ejemplo: Auto hereda de vehículo motorizado. Como grúa también hereda de vehículo automotor

Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes.

La relación de herencia se representa mediante un triangulo en el extremo de la relación que corresponde a la clase mas general o clase “padre”.  Al plantear una relación de herencia con varias clases subordinadas, dentro de un diagrama concreto,  no se hace necesario colocarlas todas, podemos representar con puntos suspensivos. Ejemplo:

Elementos Derivados

 En algunas ocasiones nos encontramos con la posibilidad de calcular un valor de un elemento a partir de otros elementos presentes en el modelo.  Se incluye para dar mayor claridad al diseño.  Se representa con una barra / precediendo al nombre del elemento derivado.

About these ads

38 comentarios en “Notación Básica UML. Diagramas de Estructura Estática

  1. Hola Eugenia! Gracias por el trabajo que te tomaste en publicar toda esta información.
    Te hago una consulta sobre algo que no me quedó claro:
    En el diagrama Ejemplo Objeto, mencionas que la forma de describir un objeto es nombre de objeto : clase (subrayada). En el ejemplo figuran dos objetos, sistema de frenos y sistema de combustible, ambos instancias de clase auto. La pregunta es, ¿el sistema de frenos y el sistema de combustible realmente son objetos de clase auto, siendo sus atributos son completamente diferentes?, tampoco comprendo el significado de las lineas que unen estos dos objetos con la clase auto.
    Gracias!

  2. Damian, en este caso lo que esta heredando de la clase auto es su comportamiento, no me queda muy claro es porque nombra los objetos como los atributos de la clase, pero para su pregunta si son objetos de auto, si lo son. y las flechas deben ser más representativo que otra cosa.

    • segun la especificacion uml la representación de objetos se debe realizar con el nombre subrayado de la clase e interponer los dos puntos (nombreObjeto : NombreClase) el nombre del objeto puede ser opcional ( :NombrClase) no olvidemos que el nombre de objeto siempre debe empezar con minusculas, obviamente todo esto en un diagrama de objetos, caso contrario asumimos que se trata de un diagrama de clases que contiene clases.

  3. En la gráfica donde está el automovil con Sistema de frenos, motor y sistema de combustible, no nos está haciendo una representación de una Herencia sino de una Agregación. En la Herencia se Heredan los atributos y los metodos, en este caso lo que hace la gráfica es mostrar a la clase automovil como un Todo que está compuesto de Motor, sistema de frenos y sistema de combustible. Estas tres ultimas clases componen a la clase Automovil, no estan siendo heredadas de esta. Poe ejemplo:

    La Clase Persona es un “Todo”, compuesta, por las clases: Piernas, Brazos, Cabeza, Tromco…
    Se que no es el mejor ejemplo, pero espero me puedas entender lo que te quiero decir…

    • Muy buenas tardes a todos. No sé si estoy mal en esto pero:
      1.- Creo que hay un pequeño error con una agregación que se define con un rombo hueco, en blanco, vacío, (lo que aquí el autor del artículo llama agregación conceptual o por referencia) y una composición el cual se representa por un rombo lleno, negro, (agregación por contenido físico o valor).

      A lo mejor yo estoy mal, pero el ejemplo que das Hansel Andrés Alarcón con lo del cuerpo humano es, según tengo entendido, un muy buen ejemplo de composición. Tengo entendido que la composición involucra “objetos” que no pueden existir sin lo que componen; a diferencia de la agregación en que los objetos pueden “vivir” o existir por sí solos si al objeto que son agregados “desaparece”.

      Si estoy mal por favor háganmelo saber, se los garadecere enormemente.

      Saludos

  4. Hola, no me quedó claro el tema “Agregación” por lo que agradezco se explique de otra forma.

    • UML especifica la agregación y la composición: ambas relaciones de tipo asociación todo/parte, en el caso de la agregación las partes pueden ser componentes de otras clases tanto así como sus instancias (objetos) la ausencia de una de ellas no compromete la existencia e integridad del todo, tampoco la ausencia del padre o contenedor compromete la integridad de las partes ya que estás son independientes del todo. la composición por el contrario representa una exclusividad fuerte entre las partes y el todo, si el todo deja de existir las partes también lo harán y viceversa, cabe indicar que uml especificar usar un rombo vacío para la agregación y un rombo solido o relleno para la composición.

      Ejemplo de Agregación : una clase que represente una nota de venta esta compuesta por componentes que pueden ser: el cliente, el detalle de la venta y los productos, en este caso el cliente y los productos (las partes) forman parte de la venta (el todo) si esta venta deja de existir los componentes cliente y producto no lo haran, inclusive pueden formar parte de otras clases.
      Ejemplo de Composición: una clase que represente al Producto puede estar formado por una clase llamada Stock (que especifique la cantidad disponible de productos y otra información adicional) si eliminamos el objeto producto de igual manera se eliminará su o sus componentes stock.

  5. Agregacion:
    Otro ejemplo puede ser un formulario (clase Form) que agrega una clase Timer (El timer se refresca cada xxx milisegundos) para mostrar una barra de avance por ejemplo
    1- Si la clase Timer está contenida dentro del Form es una agregacion por valor
    2- Si la clase Timer está definida en su propio archivo y debe instanciarse dentro de la clase Form es una agregación por Referencia ( al a instancia de Timer)

  6. Agregación: La relación entre las clases es débil. Estas pueden existir independientemente de la existencia de las otras. Ejemplo. Auto, Chófer. Se representa con el rombo vació.

    Composición: La relación es fuerte y la clase debe existir para que sus clases componentes existan. Ejemplo: Auto, Motor. Se representa con un rombo lleno o pintado.
    Pueden obtener mas información en el libro “UML y Patrones, de Craig Larman”.

    Acerca de la notoación UML para el tipo de encapsulamiento. Se debe anteponer al método o atributo. Entonces en la clase Auto, ver dentro del espacio de atributos “+marca: String” nos indica que es un atributo público. Si en cambio vemos “-marca: String” es un atributo y es privado. De la misma forma podemos obtener información de la clase por como se representa su nombre. Si es Auto subrayado, entonces la clase es estática. Si en cambio es en cursiva, es abstracta.

  7. Hola.

    Creo que el diagrama de Objetos donde se asocia la clase Auto y los objetos Sistema de Frenos y Combustible debería ser revisado. Ambos sistemas no son instancias de la clase Auto y por lo tanto su comportamiento no es girar o avanzar.

    Esto puede confundir a personas que recién estén incursionando en la POO.

    Saludos.

  8. Deberias editar tu post porque hay un error los conceptos de “herencia” y “Elementos derivados” estan repetidos. De todas formas me parece muy bueno tu trabajo porque esta muy bien explicvado. Gracias.

  9. Pingback: Notación básica en UML (para Programación Orientada a Objetos) | Blog de Camilo Rodríguez

  10. JToleda buena la explicación dejas un poco mas claro el asunto, para complementar en el mundo real por lo menos en .NET los objetos por Referencia son una copia de la dirección de los objetos que se pasa a las funciones o rutinas para trabajar con el y cualquier modificación afecta al objeto original, en cambio los objetos por valor crean un duplicado del objeto pero con una posición en memoria propia y cualquier cambio que se le haga no afecta al original.

  11. El ejemplo de Objetos, como que no está bien. Sistema de frenos y sistema de combustible no son objetos o instancias de la clase Auto; más bien son “partes”.

  12. Siempre e bueno tener varias ideas sobre un mismo tema y saber la opinión de otros y conocer varias cosas distintas de ese tema. me pareció chevere el articulo conocí varias cosas que ignoraba como la representación de una herencia por medio el triangulo

  13. Un poco mas de orden por favor, de explicar clases y objetos, te pasas directamente a las relaciones. Al menos un subtítulo,no?

  14. Ya voy enteniendo lo de UML. Gracias.

  15. La aplicación de la notación UML en caso de agregacion fisica esta mal aplicada, es un rombo de color negro y se llama composición, creo que deberias revisar el diagrama

  16. Buen articulo, solo tengo una duda me podrias apoyar de que autores o bibliografia obtuviste la información, para saber si en México se puede conseguir y a si complementarla….mucho te o agradecer :)

  17. El ejemplo de Objetos la verdad está bastante confuso, tanto que me remití a los comentarios para ver si era yo la que no entendía. Por favor para que mejores tu post, te recomiendo lo actualices, puede generar muchas dudas entre los que apenas están conociendo esto de la POO y UML. Saludos!

  18. hola a todos:

    veo como varios de uds se preguntan bastantes temas,en vez de dejar aclarACIONES se estan dejando dudas……no se confundan tanto y yo creo que deberian profundizar un poco mas las lecturas con internet ,,,,,,,,,,,,,pues leynedo otra vez lo mismo van a llegar a llo mismo ,lo ke si veoen estas lecturas es ke no estan empezando
    desde cero y ya dan por enterado que somos todos ingenieros de sistemas no se , ademas falta que se clarifiquen mas las ideas para poder responder a las evaluaciones,,,,,,o mejor seria leer wikipwdia
    gracias

  19. Agregación->(Ejemplo de la Empresa) no existe dependencia. El todo y las partes tienen un nexo débil y pueden existir independientemente uno del otro. Además, la parte no necesariamente puede estar relacionada con un único compuesto. Se la representa con el rombo hueco o sin pintar.

    Composición->(Ejemplo del auto)
    referencia a una asociación del tipo “todo-parte” o “Compuestos” y “Partes”. En la composición existe una dependencia mutua entre ambos. El compuesto no puede existir sin las partes, y las partes necesariamente deben estar unidas en un todo. Esta dependencia de existencia es lo que hace que el Todo cree y destruya las partes.
    Se simboliza en UML con el rombo pintado o relleno.

    Por otra parte tal y como dicen comentarios de fechas anteriores no tiene nada que ver los objetos del ejemplo auto – frenos pues los frenos son parte del auto y no es un objeto del mismo tipo de auto por lo que sugiero que se mejore el ejemplo

    Gracias.

  20. La verdad que yo recién empiezo,y sí… me confunde. O sea que eso como ejemplo de cómo representar objetos en diagramas UML no sirve… sino que es una representación de cómo una CLASE puede estar contenida en otra CLASE?

  21. Qué ejemplificación tan desastrosa. Entre más veo las entradas más me convenzo de que estamos ante un símil de código ofuscado, en el que la consigna parece ser “confunde y reinarás”. Lo lamento pero es mi percepción cuando veo el descuido en la edición y el contenido, partiendo del supuesto de que MVA lo dirige a uno hacia este blog con el propósito de dejar claros conceptos que son claves para PRINCIPIANTES.

  22. Gracias por la información. Siempre es de gran ayuda

  23. Una clase puede representarse de forma esquemática (plegada), con los detalles como atributos y operaciones suprimidos, siendo entonces tan solo un rectángulo con el nombre de la clase.
    Es una unidad atómica que integra estado y comportamiento. Se representa pormedio de una caja subdividida. En el compartimento superior aparece el nombre del objeto junto con el nombre de la clase subrayado, según la siguiente sintaxis:
    nombre_del_objeto: nombre_de_la_clase
    Las asociaciones entre dos clases se representan mediante una línea que las une. La multiplicidad es una restricción que se pone a una asociación, que limita el número de instancias posibles que una clase puede tener

  24. No me queda muy claro el concepto de Elementos Derivados, me podrias aclarar por favor ?…. Muchas gracias

  25. Hola Eugenia, muchísimas gracias , claro conciso , es un placer aprender contigo. Te doy mis sentida ehorabuena

  26. No entiendo la relación entre carro y pasajero y la relación entre carro y pasajero. Porque una es bidreccional y la otra no? Además no entiendo lo que expresa la relacion entre los dos objetos. Yo entiendo que un carro pertenece a un pasajero, y un pasajero puede tener uno o varios carros (no carroes xd), nose si es ese el significado de la relación.

  27. Perdon me refiero entre las relaciones carro y conductor, y carro y pasajero. Lo escribi mal.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s