Diagramas de clases de UML: Instrucciones

En Visual Studio Ultimate, puede utilizar un diagrama de clases de UML para describir los tipos de datos y sus relaciones con independencia de su implementación. El diagrama se utiliza para que la atención se centre en los aspectos lógicos de las clases en lugar de en su implementación. Si desea una demostración en vídeo, vea Modeling the Business Domain by using Class Diagrams.

Para crear un diagrama de clases UML, en el menú Arquitectura, haga clic en Nuevo diagrama.

Nota

En este tema se analizan los diagramas de clases de UML. Existe otro tipo de diagrama de clases, que se crea y utiliza para visualizar el código del programa. Para obtener más información, vea Diseñar y ver clases y tipos.

En este tema

Usar diagramas de clases de UML

Pasos básicos para dibujar diagramas de clases

Usar clases, interfaces y enumeraciones

Atributos y operaciones

Dibujar y utilizar asociaciones

Herencia

Tipos de plantilla

Definir los espacios de nombres con paquetes

Usar diagramas de clases de UML

Los diagramas de clases de UML pueden utilizarse para una gran variedad de propósitos:

  • Para proporcionar una descripción de los tipos que se utilizan en un sistema y se pasan entre sus componentes que no tenga nada que ver con su implementación.

    Por ejemplo, en el código .NET, el tipo Pedido de menú podría implementarse en la capa del negocio; en XML, en las interfaces entre los componentes; en SQL, en la base de datos, y en HTML, en la interfaz de usuario. Aunque estas implementaciones tengan un nivel de detalle diferente, la relación entre el tipo Pedido de menú y otros tipos, como Menú y Pago, es siempre la misma. El diagrama de clases de UML permite analizar estas relaciones con independencia de las implementaciones.

  • Para clarificar el glosario de términos que se utiliza en la comunicación entre la aplicación y los usuarios y en las descripciones de las necesidades de los usuarios. Para obtener más información, vea Crear modelos de los requisitos de los usuarios.

    Por ejemplo, piense en los casos de usuario, los casos de uso y otras descripciones de los requisitos de la aplicación de un restaurante. En este tipo de descripción, encontrará términos como Menú, Pedido, Comida, Precio, Pago, etc. Puede dibujar un diagrama de clases de UML en el que se definan las relaciones entre estos términos. De este modo, se reducirá el riesgo de inconsistencias en las descripciones de los requisitos, así como en la interfaz de usuario y los documentos de ayuda.

Relación con otros diagramas

Un diagrama de clases de UML normalmente se crea junto con otros diagramas de modelado para proporcionar descripciones de los tipos que utilizan. En cada caso, la representación física de los tipos no está implícita en ninguno de los diagramas.

Si dibujó:

Utilice un diagrama de clases de UML para describir:

Diagrama de actividades

Tipos de datos que pasan por un nodo de objeto.

Tipos de terminales de entrada (Input Pin) y de salida (Output Pin) de nodos de parámetros de actividad.

Para obtener más información, vea Diagramas de actividades UML: Instrucciones.

Diagrama de secuencia

Tipos de parámetros y valores devueltos de mensajes.

Tipos de líneas de vida. La clase de una línea de vida debe incluir las operaciones de todos los mensajes que puede recibir.

Para obtener más información, vea Diagramas de secuencia de UML: Instrucciones.

Diagrama de componentes

Interfaces de componentes, con un listado de sus operaciones.

También puede describir un componente completo como una clase.

Para obtener más información, vea Diagramas de componentes de UML: Instrucciones.

Diagrama de casos de uso

Tipos mencionados en las descripciones de los objetivos y los pasos de un caso de uso.

Para obtener más información, vea Diagramas de casos de uso de UML: Instrucciones.

Pasos básicos para dibujar diagramas de clases

Para obtener más información de referencia sobre los elementos de los diagramas de clases de UML, vea Diagramas de clases de UML: Referencia.

Nota

En Cómo: Modificar un modelo UML y los diagramas se describen en detalle los pasos para crear diagramas de modelado.

Para crear un diagrama de clases de UML

  1. En el menú Arquitectura, haga clic en Nuevo diagrama.

  2. En Plantillas, haga clic en Diagrama de clases UML.

  3. Especifique un nombre para el diagrama.

  4. En Agregar a proyecto de modelado, seleccione un proyecto de modelado existente de la solución o Crear un nuevo proyecto de modelado y, a continuación, haga clic en Aceptar.

    En el cuadro de herramientas Diagrama de clases UML aparece un nuevo diagrama de clases. El cuadro de herramientas contiene las relaciones y elementos necesarios.

Para dibujar un diagrama de clases de UML

  1. Para crear un tipo, haga clic en la herramienta Clase, Interfaz o Enumeración del cuadro de herramientas y, a continuación, haga clic en un espacio en blanco del diagrama.

  2. Para agregar atributos u operaciones a los tipos o agregar literales a una enumeración, haga clic en el título Atributos, Operaciones o Literales del tipo y presione ENTRAR.

    Puede escribir una firma, como por ejemplo f(x:Boolean):Integer. Para obtener más información, vea Atributos y operaciones.

    Para agregar rápidamente varios elementos, presione ENTRAR dos veces al final de cada elemento. Puede utilizar las teclas de dirección para subir y bajar la lista.

  3. Para expandir o contraer un tipo, haga clic en el icono de botón de contenido adicional situado en la parte superior izquierda. También puede expandir y contraer la sección Atributos y Operaciones de una clase o interfaz.

  4. Para dibujar vínculos de asociación, herencia o dependencia entre los tipos, haga clic en la herramienta de relación adecuada, a continuación, en el tipo de origen y, por último, en el tipo de destino.

  5. Para crear tipos en un paquete, cree un paquete mediante la herramienta Paquete y, a continuación, cree los tipos y paquetes nuevos en el paquete. También puede copiarlos con el comando Copiar y pegarlos después en un paquete.

  6. Cada diagrama es una vista de un modelo que comparten otros diagramas del mismo proyecto. Para ver una vista de árbol del modelo completo, haga clic en Ver, elija Otras ventanas y, a continuación, haga clic en Explorador de modelos UML.

Usar clases, interfaces y enumeraciones

Hay tres tipos estándar de clasificadores disponibles en el cuadro de herramientas. En este documento, se les denomina tipos.

Clase, enumeración e interfaz

  • Utilice las clases (1) para representar datos o tipos de objetos para la mayor parte de los propósitos.

  • Utilice las interfaces (2) en contextos en los que es necesario diferenciar entre interfaces puras y clases concretas que tienen implementaciones internas. Esta diferencia resulta útil cuando el propósito del diagrama es describir una implementación de software. Resulta menos útil, sin embargo, cuando se modelan datos pasivos o cuando se definen contextos que se utilizan para describir los requisitos del usuario.

  • Utilice una enumeración (3) para representar un tipo que tiene un número limitado de valores literales, por ejemplo Stop y Go.

    • Agregue los valores literales a la enumeración. Asigne a cada uno un nombre diferente.

    • Si lo desea, también puede proporcionar un valor numérico para cada valor literal. Haga clic con el botón secundario del mouse en el literal de la enumeración, haga clic en Propiedades y, a continuación, escriba un número en el campo Value de la ventana Propiedades.

Asigne un nombre único a cada tipo.

Obtener tipos de otros diagramas

Puede hacer que los tipos de otro diagrama aparezcan en su diagrama de clases de UML.

Otro tipo de diagrama

Cómo obtener tipos del otro diagrama

Diagrama de clases de UML

Puede hacer que una clase aparezca en varios diagramas de clases de UML. Cuando haya creado una clase en un diagrama, arrastre la clase del Explorador de modelos UML al otro diagrama.

Esto resulta útil si desea que cada diagrama se concentre en un grupo de relaciones determinado.

Por ejemplo, puede mostrar las asociaciones entre un Pedido de menú y el Menú del restaurante en un diagrama y las asociaciones entre Pedido de menú y Pago en otro diagrama.

Diagrama de componentes

Si ha definido los componentes en un diagrama de componentes, puede arrastrar un componente del Explorador de modelos UML al diagrama de clases. Este componente aparecerá como una clase. Para obtener más información, vea Diagramas de componentes de UML: Instrucciones.

Diagrama de secuencia de UML

Puede crear clases e interfaces a partir de las líneas de vida de un diagrama de secuencia y, a continuación, arrastrar la clase del Explorador de modelos UML a un diagrama de clases de UML. Cada línea de vida de un diagrama de secuencia representa una instancia de un objeto, componente o actor.

Para crear una clase a partir de una línea de vida, haga clic con el botón secundario del mouse en la línea de vida y, a continuación, haga clic en Crear clase o Crear interfaz. Para obtener más información, vea Diagramas de secuencia de UML: Instrucciones.

Atributos y operaciones

Un atributo (4) es un valor con nombre que todas las instancias de un tipo pueden tener. Cuando se obtiene acceso a un atributo, no se modifica el estado de la instancia.

Una operación (5) es un método o función que las instancias del tipo pueden realizar. Puede devolver un valor. Si su propiedad isQuery es true, no se puede modificar el estado de la instancia.

Para agregar un atributo u operación a un tipo, haga clic con el botón secundario del mouse en el tipo, elija Agregar y, a continuación, elija Atributo u Operación.

Para ver sus propiedades, haga clic con el botón secundario del mouse en el atributo u operación y, a continuación, haga clic en Propiedades. Las propiedades aparecen en la ventana Propiedades.

Para ver las propiedades de los parámetros de una operación, en la propiedad Parameters, haga clic en [...]. Aparece un nuevo cuadro de diálogo Propiedades.

Para obtener información detallada sobre todas las propiedades que puede establecer, consulte los temas siguientes:

Tipos de atributos y operaciones

Los tipos de atributo u operación y los tipos de parámetro pueden ser uno de los que se detallan a continuación:

  • (ninguno): un tipo puede dejarse sin especificar en la firma omitiendo el signo de dos puntos anterior (:).

  • Uno de los tipos primitivos estándar: Booleano, Entero, Cadena.

  • Un tipo que esté definido en el modelo.

  • Un valor parametrizado de un tipo de plantilla, con el formato Plantilla<Parámetro>. Vea Tipos de plantilla.

También puede escribir el nombre de un tipo que aún no haya definido en el modelo. El nombre aparecerá en Tipos sin especificar en el Explorador de modelos UML.

Nota

Si posteriormente define una clase o interfaz con ese nombre en el modelo, los atributos y operaciones anteriores todavía harán referencia al elemento en Tipos sin especificar. Si desea cambiarlos para que hagan referencia a la nueva clase, deberá visitar cada atributo u operación y restablecer el tipo, seleccionando la nueva clase en el menú desplegable.

Tipos múltiples

Puede establecer la multiplicidad de cualquier tipo de parámetro, atributo u operación.

Los valores permitidos son los siguientes:

Multiplicidad

El atributo, parámetro o valor devuelto contiene:

[1]

Un valor del tipo especificado. Éste es el valor predeterminado.

[0..1]

Null o un valor del tipo especificado.

[*]

Una colección con un número de instancias del tipo especificado.

[1..*]

Una colección de al menos una instancia del tipo especificado.

[n..m]

Una colección de entre n y m instancias del tipo especificado.

Si la multiplicidad es mayor que 1, también puede establecer estas propiedades:

  • IsOrdered: si es true, la colección tiene un orden definido.

  • IsUnique: si es true, no hay ningún valor duplicado en la colección.

Visibilidad

La visibilidad indica si se puede obtener acceso al atributo u operación fuera de la definición de clase. Los valores permitidos son los siguientes:

Name

Forma abreviada

Significado

Public

+

Accesible desde todos los demás tipos.

Private

-

Solamente se puede obtener acceso a la definición interna de este tipo.

Package

~

Solamente se puede obtener acceso dentro del paquete que contiene este tipo y en los paquetes que lo importan explícitamente. Vea Definir espacios de nombres y paquetes.

Protected

#

Solamente se puede obtener acceso a este tipo y sus tipos heredados. Vea Herencia.

Establecer la firma de un atributo u operación

La firma de un atributo u operación es una colección de propiedades entre las que se incluyen la visibilidad, el nombre, los parámetros (en las operaciones) y el tipo.

Puede escribir directamente una firma en el diagrama. Haga clic en el atributo u operación para seleccionarlo y, a continuación, vuelva a hacer clic.

Escriba la firma con el formato:

visibility attribute-name : Type

-O bien-

visibility operation-name (parameter1 : Type1, ...) : Type

Por ejemplo:

+ AddItem (item : MenuItem, quantity : Integer) : Boolean

Utilice la forma abreviada de visibilidad. El valor predeterminado es + (public).

Los tipos pueden ser tipos definidos en el modelo, tipos estándar, como Entero o Cadena, o el nombre de un nuevo tipo que no se haya definido todavía.

Nota

Si escribe un nombre sin tipo en una lista de parámetros, especificará el nombre del parámetro, en lugar de su tipo. En este ejemplo, MenuItem e Integer resultan ser los nombres de dos parámetros con tipos no especificados:

AddItem(MenuItem, Integer) /* parameter names, not types! */

Para establecer la multiplicidad de un tipo en una firma, escriba la multiplicidad entre corchetes tras el nombre de tipo, por ejemplo:

+ AddItems (items : MenuItem [1..*])
+ MenuContent : MenuItem [*]

Si el atributo u operación es estático, su nombre aparecerá subrayado en la firma. Si es abstracto, el nombre aparecerá en cursiva.

Sin embargo, las propiedades Is Static e Is Abstract solo pueden establecerse en la ventana Propiedades.

Firma completa

Al modificar la firma de un atributo u operación, algunas propiedades adicionales pueden aparecer al final de la línea y después de cada parámetro. Aparecen entre llaves {...}. Puede editar o agregar estas propiedades. Por ejemplo:

+ AddItems (items: MenuItem [1..*] {unique, ordered})
+ GetItems (filter: String) : MenuItem [*] {ordered, query}

Estas propiedades son las siguientes:

En la firma

Propiedad

Significado

unique

Is Unique

No hay valores duplicados en la colección. Se aplica a tipos cuya multiplicidad es mayor que 1.

ordered

Is Ordered

La colección es una secuencia. Si es false, no está definido el primer elemento. Se aplica a tipos cuya multiplicidad es mayor que 1.

query

Is Query

La operación no cambia el estado de la instancia. Solo se aplica a las operaciones.

/

Is Derived

El atributo se calcula a partir de los valores de otros atributos o asociaciones.

"/" precede al nombre de un atributo. Por ejemplo:

/TotalPrice: Integer

Normalmente, la firma completa solamente aparece en el diagrama mientras se está editando. Al finalizar la edición, las propiedades adicionales quedan ocultas. Si desea ver la firma completa en todo momento, haga con el botón secundario del mouse en el tipo y, a continuación, haga clic en Mostrar firma completa.

Dibujar y utilizar asociaciones

Utilice una asociación para representar cualquier tipo de vinculación entre dos elementos, con independencia del modo en que esta vinculación se implemente en el software. Puede utilizar, por ejemplo, una asociación para representar un puntero en C#, una relación de una base de datos o una referencia cruzada que asocie una parte de un archivo XML con otra. Puede representar una asociación entre objetos en el mundo real, como la tierra y el sol. La asociación no indica cómo se representa el vínculo, solo que existe la información.

Propiedades de una asociación

Después de crear una asociación, establezca sus propiedades. Haga clic con el botón secundario del mouse en la asociación y, a continuación, haga clic en Propiedades.

Además de las propiedades de toda la asociación, cada rol, es decir, cada extremo de la asociación, tiene algunas propiedades específicas. Para verlas, expanda las propiedades First Role y Second Role.

Algunas propiedades de cada uno de los roles pueden verse directamente en el diagrama. Son las siguientes:

  • El nombre del rol. Aparece en el extremo correspondiente de la asociación del diagrama. Se puede especificar en el diagrama o en la ventana Propiedades.

  • Multiplicity, cuyo valor predeterminado es 1. También aparece en el diagrama situado junto al extremo correspondiente de la asociación.

  • Aggregation. Aparece en un extremo del conector y tiene forma de diamante. Puede utilizarse para indicar que las instancias del rol que se están agregando poseen o contienen instancias del otro rol.

  • Is Navigable. Si es true solamente en uno de los roles, aparece una flecha en la dirección navegable. Puede utilizarse para indicar la navegabilidad de vínculos y relaciones de base de datos en el software.

Para obtener todos los detalles sobre estas y otras propiedades, vea Propiedades de las asociaciones de diagramas de clases de UML.

Cuando se dibuja una asociación, tiene una flecha en un extremo, lo que significa que la asociación es navegable en esa dirección. Esto resulta útil si el diagrama de clases representa las clases de software y las asociaciones representan punteros o referencias. Sin embargo, cuando se usa un diagrama de clases para representar entidades y relaciones o conceptos de negocio, es menos pertinente representar la navegabilidad. En este caso, podría ser preferible dibujar las asociaciones sin flechas. Puede hacerlo si establece la propiedad Is Navigable en ambos extremos de la asociación en true. Para simplificar esto, puede descargar el ejemplo de código UML Domain Modeling.

Atributos y asociaciones

Una asociación es una manera gráfica de mostrar un atributo. Por ejemplo, en lugar de crear una clase Restaurante con un atributo de tipo Menú, puede dibujar una asociación entre Restaurante y Menú.

Cada nombre de atributo se transforma en un nombre de rol. Aparece en el extremo opuesto al tipo propietario de la asociación. Observe, por ejemplo, myMenu en la ilustración.

Por lo general, resulta más conveniente utilizar los atributos solo en aquellos tipos que no se van a dibujar en el diagrama, como los tipos primitivos.

Atributos y asociación equivalentes

Herencia

Utilice la herramienta Herencia para crear las relaciones siguientes:

  • Una relación de generalización entre un tipo especializado y un tipo general.

    -O bien-

  • Una relación de realización entre una clase y una interfaz que implementa.

No se pueden crear bucles en las relaciones de herencia.

Generalización

La generalización significa que el tipo que se especializa o el tipo derivado heredan los atributos, las operaciones y las asociaciones del tipo general o tipo base.

El tipo general aparece en el extremo de la relación con la punta de flecha.

Las operaciones y atributos heredados no suelen mostrarse en los tipos especializados. Sin embargo, pueden agregarse operaciones heredadas a la lista de operaciones del tipo especializado. Esto resulta útil si desea invalidar algunas de las propiedades de una operación en el tipo especializado o si desea indicar que el código que se va a implementar debería hacerlo.

Para invalidar la definición de una operación en un tipo especializado

  1. Haga clic en la relación de generalización.

    Aparecerá resaltada junto a una etiqueta inteligente de acción.

  2. Haga clic en la etiqueta de acción y, a continuación, en Invalidar operaciones.

    Aparece el cuadro de diálogo Invalidar operaciones.

  3. Seleccione las operaciones que desea que aparezcan en el tipo especializado y, a continuación, haga clic en Aceptar.

Las operaciones que seleccionó aparecen ahora en el tipo especializado.

Realización

La realización significa que una clase implementa los atributos y operaciones especificados por la interfaz. La interfaz se encuentra en el extremo del conector que tiene la flecha.

Al crear un conector de realización, las operaciones de la interfaz se replican automáticamente en la clase que se realiza. Si se agregan nuevas operaciones a una interfaz, estas operaciones se replicarán en las clases que se realizan.

Después de crear una relación de realización, puede transformarla en una notación circular. Haga clic con el botón secundario del mouse en la relación y elija Mostrar como círculo.

De este modo, puede mostrar las interfaces que una clase implementa sin llenar los diagramas de clases con vínculos de realización. También puede mostrar la interfaz y las clases que la realizan en diagramas independientes.

Realización mostrada con conector y círculo

Tipos de plantilla

Puede definir un tipo genérico o un tipo de plantilla que otros tipos o valores puedan parametrizar.

Por ejemplo, puede crear un Diccionario genérico parametrizado por tipos de valor y clave:

Clase de plantilla con dos parámetros

Para crear un tipo de plantilla

  1. Cree una clase o interfaz. Este objeto pasará a ser el tipo de plantilla. Asígnele el nombre apropiado, por ejemplo Dictionary.

  2. Haga clic con el botón secundario del mouse en el nuevo tipo y, a continuación, haga clic en Propiedades.

  3. En la ventana Propiedades, en el campo Template Parameters, haga clic en [...].

    Aparecerá el cuadro de diálogo Editor de colecciones de parámetros de plantillas.

  4. Haga clic en Agregar.

  5. Establezca la propiedad de nombre en el nombre de un parámetro del tipo de plantilla, por ejemplo, Key.

  6. Establezca Tipo de parámetro. El valor predeterminado es Clase.

  7. Si desea que el parámetro acepte solamente clases derivadas de una clase base determinada, establezca Valor restringido en la clase base que desee.

  8. Agregue tantos parámetros como necesite y, a continuación, haga clic en Aceptar.

  9. Agregue atributos y operaciones al tipo de plantilla del mismo modo que lo haría en otras clases.

    Puede utilizar parámetros cuyo tipo sea Clase, Interfaz o Enumeración en la definición de atributos y operaciones. Por ejemplo, si utiliza las clases de parámetros Key y Value, puede definir esta operación en Dictionary:

    Get(k : Key) : Value

    Puede utilizar un parámetro cuyo tipo Entero sea un límite de multiplicidad. Por ejemplo, el valor entero máximo de un parámetro podría utilizarse para definir la multiplicidad de un atributo como [0..max].

Una vez creados los tipos de plantilla, puede utilizarlos para definir los enlaces de la plantilla:

Clase enlazada de la plantilla de diccionario

Para utilizar un tipo de plantilla

  1. Cree un nuevo tipo, por ejemplo, AddressTable.

  2. Haga clic con el botón secundario del mouse en el nuevo tipo y, a continuación, haga clic en Propiedades.

  3. En la propiedad Template Binding, seleccione el tipo de plantilla, por ejemplo Dictionary, en la lista desplegable.

  4. Expanda la propiedad Template Binding.

    Aparecerá una fila para cada parámetro del tipo de plantilla.

  5. Establezca cada parámetro en un valor apropiado. Por ejemplo, establezca el parámetro Key en una clase denominada Name.

Paquetes

Puede ver los paquetes en un diagrama de clases de UML. Un paquete es un contenedor de otros elementos del modelo. Puede crear cualquier elemento dentro de un paquete. En el diagrama, los elementos incluidos en el paquete se desplazarán al mover el paquete.

Puede utilizar el control de expandir y contraer para ocultar o mostrar el contenido del paquete.

Para obtener más información, vea Definir espacios de nombres y paquetes.

Vea también

Referencia

Diagramas de secuencia UML: Referencia

Conceptos

Cómo: Modificar un modelo UML y los diagramas

Diagramas de clases de UML: Referencia

Crear modelos de los requisitos de los usuarios

Diagramas de componentes de UML: Referencia

Diagramas de casos de uso de UML: Referencia

Diagramas de componentes de UML: Referencia

Otros recursos

Video: Modeling the Business Domain by using Class Diagrams

Video: Revealing Responsibilities by using Class Diagrams