Está en la página 1de 9

Profesor: Ing. Fabián H.

Carrera Programación II
Instituto de Tecnología ORT Nº 2
UML - Diagrama de Clases

UML (Unified Modeling Language)


Notación del Diagrama de Clases
La notación que se presenta a continuación es la propuesta en UML – Unified Modeling
Language (Booch, Jacobson, Rumbaugh -1997), es sólo la versión simplificada de la notación
de UML para dibujar diagramas de clases. Es simplificada ya que no se intenta mostrar todos
los parámetros pasados a los métodos.

Introducción
El modelado de un sistema implica identificar las cosas que son importantes desde un cierto
punto de vista particular. Estas cosas forman el vocabulario del sistema que se está modelando.
Por ejemplo, si estamos construyendo una casa, las paredes, puertas, ventanas, armarios y
luces son algunas de las cosas importantes desde la perspectiva de un propietario. Cada una
de estas cosas puede ser separada del resto.

Cada una de ellas tiene un conjunto de propiedades. Las paredes tienen una altura y un ancho
y son consistentes. Las puertas también tienen una altura y un ancho y también son
consistentes, pero tienen el comportamiento adicional que permite abrirlas en una dirección.
Las ventanas son similares a las puertas en que ambas son aberturas en las paredes, pero las
ventanas y las puertas tienen propiedades ligeramente diferentes.
Las ventanas normalmente se diseñan para que se pueda mirar a través de ellas en vez de
atravesarlas.
Las paredes, puertas y ventanas no suelen encontrarse aisladas, así que también hay que
considerar cómo encajan juntas instancias específicas de cada una de ellas. Las cosas que se
han identificado y las relaciones que se establecen entre ellas se verán afectadas por el uso
que se pretende dar a cada habitación de la casa, como se espera que sea la circulación de
una habitación a otra y aspecto general y el estilo que se quieren lograr con esa disposición.

Las personas involucradas estarán interesadas en diferentes cosas. Por ejemplo el plomero se
interesará por cosas como los desagües, el carpintero por las puertas y ventanas.

En UML, todas las cosas se modelan como clases. Una clase es una abstracción de las cosas
que forman parte del vocabulario. Una clase no es un objeto individual, sino que representa un
conjunto de objetos. Así se puede pensar conceptualmente en “pared” como una clase de
objetos con ciertas propiedades comunes, como altura, longitud, grosor, si es maestra o no, etc.
También se puede pensar en instancias individuales de paredes, como “la pared de la esquina
sur de mi despacho”.

UML proporciona una representación gráfica para las clases, que permite resaltar las partes
más importantes de una abstracción: su nombre, sus atributos y sus operaciones.

-1-
Profesor: Ing. Fabián H. Carrera Programación II
Instituto de Tecnología ORT Nº 2
UML - Diagrama de Clases

Nombre
Figura
Atributos
origen
Operaciones mover ()
redimensionar
() Responsabilidades

CLASES - Términos y conceptos


Una clase es una descripción de un conjunto de objetos que comparten los mismos atributos,
operaciones, relaciones y semántica.

Nombres
Cada clase debe tener un nombre que la distinga de otras clases.
En la práctica los nombres de las clases suelen ser cortos o expresiones nominales extraídas
del vocabulario del sistema que se está modelando. Normalmente, en el nombre de la clase se
pone mayúsculas la primera letra de cada palabra, como Cliente o SensorTemperatura.
Gráficamente el nombre de la clase se ubica en el compartimiento superior del rectángulo
utilizado para representar la clase.

Atributos
Un atributo es una propiedad de una clase identificada con un nombre, que describe un rango
de valores que pueden tomar las instancias de la propiedad. Una clase puede tener cualquier
número de atributos o no tener ninguno. Un atributo representa alguna propiedad del elemento
que se está modelando que es compartida por todos los objetos de esa clase. Por ejemplo,
toda pared tiene una altura, un ancho y un grosor; se podrían modelar los clientes de forma que
cada uno tenga un nombre, una dirección, un teléfono y una fecha de nacimiento. En un
momento dado, un objeto de una clase tendrá valores específicos para cada uno de los
atributos de su clase.

Gráficamente los atributos se listan en un compartimiento justo debajo del nombre de la clase.

Cliente
Atributos
nombre
dirección
teléfono
fechaNacimiento

-2-
Profesor: Ing. Fabián H. Carrera Programación II
Instituto de Tecnología ORT Nº 2
UML - Diagrama de Clases
El nombre de un atributo puede ser texto, igual que el nombre de una clase. En la práctica, el
nombre de un atributo es un nombre corto o una expresión nominal que representa alguna
propiedad de la clase que engloba. Normalmente, se pone en mayúsculas la primera letra de
cada palabra de un atributo, excepto la primera, como nombre o esMaestra.

Operaciones
Una operación es la implementación de un servicio que puede ser requerido a cualquier
elemento de la clase para que muestre un comportamiento. En otras palabras, una operación
es una abstracción de algo que se puede hacer a un objeto y que es compartido por todos los
objetos de la clase. Una clase puede tener cualquier número de operaciones o ninguna.

Rectángulo
Operaciones
añadir()
ampliar()
mover()
estáVacio()

Gráficamente las operaciones se listan en un compartimiento debajo de los atributos.


El nombre de una operación puede ser texto, al igual que el nombre de una clase. En la práctica
el nombre de una operación es un verbo corto o una expresión verbal que representa un
comportamiento de la clase que la contiene. Normalmente, se pone en mayúsculas la primera
letra de cada palabra en el nombre de la operación excepto la primera letra, como mover o
estáVacio.

Responsabilidades
Una responsabilidad es un contrato o una obligación de una clase. Al crear una clase, se está
expresando que todos los objetos de esa clase tienen el mismo tipo de estado y el mismo tipo
de comportamiento. Una clase Pared es responsable de saber sobre su altura, ancho y grosor;
una clase AgenteFraudes, que se podría encontrar en una aplicación de tarjetas de crédito, es
responsable de procesar pedidos y determinar si estos son legales, sospechosos o
fraudulentos; una clase SensorTemperatura es responsable de medir la temperatura y disparar
una alarma si ésta alcanza un punto determinado.

Una clase puede tener cualquier número de responsabilidades, aunque en la práctica cada
clase bien estructurada si tiene al menos una responsabilidad y a lo sumo unas pocas.

-3-
Profesor: Ing. Fabián H. Carrera Programación II
Instituto de Tecnología ORT Nº 2
UML - Diagrama de Clases

AgenteFraudes
Responsabilidades

Responsabilidades
* determinar el riesgo de un pedido de cliente
*manejar criterios de fraude específicos del
cliente

Las responsabilidades son solo texto libre. En la práctica, una responsabilidad aislada se
escribe como una frase, una sentencia o un párrafo corto.

Técnicas comunes de modelado


Las clases se utilizan normalmente para modelar abstracciones extraídas del problema que se
intenta resolver. Cada una de estas abstracciones es parte del vocabulario del sistema, es
decir, ellas representan el conjunto de los elementos que son importantes para los usuarios y
los implementadores. Por eso es importante modelar el vocabulario de un sistema.

Para modelar el vocabulario de un sistema:

• Hay que identificar aquellas cosas que utilizan los usuarios o programadores para
describir el problema o la solución.

• Para cada abstracción, hay que identificar un conjunto de responsabilidades. Hay que
asegurarse de que cada clase está claramente definida y que las responsabilidades se
encuentran bien repartidas entre todas las clases.

• Hay que proporcionar los atributos y operaciones necesarios en cada clase para cumplir
esas responsabilidades.

Hay que recordar que cada clase debe corresponderse con una abstracción tangible o
conceptual en el dominio del usuario.

Ejemplo
Cuales serían las clases de un sistema de ventas: las que se ven a simple vista son Cliente,
Pedido y Producto. Existen otras abstracciones extraídas del vocabulario del problema, como
Envío (para seguir la pista de los pedidos), Factura (para facturar los pedidos) y Almacén
(donde se encuentran los pedidos antes del envío).
También hay una abstracción relacionada con la solución, Transacción, que se aplica a los
pedidos y envíos.

-4-
Profesor: Ing. Fabián H. Carrera Programación II
Instituto de Tecnología ORT Nº 2
UML - Diagrama de Clases

Almacén
Cliente Producto
nombre
id
dirección
nombre
teléfono
precio
fechaNacimiento
Factura ubicación

Transacción Envío
acciones

commit ()
Pedido
rollBack() artículo * mantener la información relativa a
tuvoExito() cantidad productos enviados por un pedido
* seguir la pista del estado y localización
de los productos enviados

Estructuración de una Clase


Se habla de una clase bien estructurada, cuando:
• Proporciona una abstracción precisa de algo extraído del vocabulario del dominio del
problema o del dominio de la solución

• Contiene un pequeño conjunto bien definido de responsabilidades, y las lleva a cabo


todas ellas muy bien.

• Es comprensible y sencilla, a la vez que es extensible y adaptable

RELACIONES
Al realizar las abstracciones, uno se da cuenta que muy pocas clases se encuentran aisladas.
En vez de ello, la mayoría colaboran con otras de varias maneras. Por lo tanto, al modelar un
sistema, no sólo hay que identificar los elementos que conforman el vocabulario del sistema,
también hay que modelar como se relacionan estos elementos entre sí.
En el modelamiento orientado a objetos hay tres tipos de relaciones especialmente importante:
dependencias, que representan relaciones de uso entre clases, generalizaciones, que
conectan clases generales con sus especializaciones; y asociaciones, que representan
relaciones estructurales entre objetos.

Introducción
Al construir una casa, cosas como paredes, puertas, ventanas, armarios y luces formarán parte
de nuestro vocabulario. Sin embargo, ninguna de esas cosas se encuentran aisladas. Las
paredes limitan con otras paredes. Las puertas y las ventanas se colocan en las paredes para
hacer aberturas para la gente y la luz. Los muebles y las luces están físicamente adyacentes a
las paredes y techos. Las paredes, las puertas, los armarios y las luces se pueden agrupar para
formar cosas más complejas, tales como habitaciones.
Además de las relaciones estructurales entre estas cosas, también aparecerán otros tipos de
relaciones. Por ejemplo, seguro que la casa tiene ventanas, pero probablemente sean de varios
tipos diferentes. Puede haber grandes ventanales que no se abran, así como pequeñas
ventanas en la cocina que sí lo hagan. Algunas ventanas se abrirán hacia arriba y abajo; otras,
como las ventanas que den al patio, se abrirán de izquierda a derecha. Algunas ventanas
tendrán una única capa de cristal; otras la tendrán doble. Sin importar sus diferencias, hay
algunas cualidades comunes a todas las ventanas: todas son una abertura en una pared, y
todas están diseñadas para dejar pasar la luz, el aire y, a veces, gente.

-5-
Profesor: Ing. Fabián H. Carrera Programación II
Instituto de Tecnología ORT Nº 2
UML - Diagrama de Clases
En UML, las formas en que las cosas se conectan entre sí, bien lógica o físicamente, se
modelan como relaciones. En el modelado orientado a Objetos hay tres clases de relaciones
muy importantes: dependencias, generalizaciones y asociaciones.

Las dependencias son relaciones de uso. Por ejemplo, las tuberías dependen del calentador
para calentar el agua que conducen.

Las generalizaciones conectan clases generales con otras mas especializadas en lo que se
conoce como relaciones clases subclase/superclase o hijo/padre. Por ejemplo, un mirador es
un tipo de ventana con grandes hojas de cristal fijas; una ventana patio es un tipo de ventana
con hojas de cristal que se abren de lado a lado.

Las asociaciones son relaciones estructurales entre instancias. Por ejemplo, las habitaciones
constan de paredes y otras cosas; las paredes a su vez pueden contener puertas y ventanas;
las tuberías pueden atravesar las paredes.

UML proporciona una representación gráfica para cada uno de estos tipos de relaciones, como
se muestra por la figura. Esta notación permite visualizar relaciones independientemente de
cualquier lenguaje de programación específico, y de forma que permite destacar las partes más
importantes de una relación: su nombre, los elementos que conecta y sus propiedades.

Ventana dependencia

abrir() Evento
cerrar()
mover()
dibujar()
manejarEvento()

generalización

VentanaConsola CuadroDiálogo asociación Control

Términos y conceptos
Una relación es una conexión entre elementos. En el modelado orientado a objetos, las tres
relaciones más importantes son las dependencias, las generalizaciones y las asociaciones.
Gráficamente, una relación se representa como una línea, usándose diferentes tipos de líneas
para diferenciar los tipos de relaciones.

Dependencia
Una dependencia es una relación de uso que declara que un cambio en la especificación de un
elemento (por ejemplo, la clase Evento) puede afectar a otro elemento que la utiliza (por
ejemplo, la clase Ventana), pero no necesariamente a la inversa. Gráficamente, una
dependencia se representa como una línea discontinua dirigida hacia el elemento del cual se
depende. Las dependencias se usarán cuando se quiera indicar que un elemento utiliza a otro.

Nota: Una dependencia puede tener un nombre, aunque es raro que se necesiten los nombre, a
menos que se tenga un modelo con muchas dependencias y haya que referirse a ellas o
distinguirlas

-6-
Profesor: Ing. Fabián H. Carrera Programación II
Instituto de Tecnología ORT Nº 2
UML - Diagrama de Clases
Importante!!!! Las dependencias sólo deben ser usadas cuando la relación que se esté
modelando no sea estructural

Generalización
Una generalización es una relación entre un elemento general (llamado superclase o padre) y
un caso más específico de ese elemento (llamado subclase o hijo). La generalización se llama
a veces relación “es-un-tipo-de”: un elemento (como la clase Mirador) es-un-tipo-de un
elemento más general (por ejemplo la clase Ventana).
Una clase hija hereda las propiedades de sus clases padres, especialmente sus atributos y sus
operaciones. A menudo (no siempre) el hijo añade atributos y operaciones a los que hereda de
sus padres. Una operación de un hijo con la misma signatura que una operación del padre
redefine la operación del padre; esto se conoce como polimorfismo. Gráficamente, la
generalización se representa como una línea dirigida continua, con una gran punta de flecha
vacía, apuntando al padre, como se muestran en la figura siguiente. Las generalizaciones se
utilizarán cuando se quieran mostrar relaciones padre/hijo.

Figura

origen
mover()
cambiarTamaño()
dibujar()

Rectángulo Círculo Polígono


esquina: Punto radio: float puntos: Lista
dibujar

Cuadrado

Nota: Una generalización puede tener un nombre, aunque es raro que se necesiten los
nombres, a menos que se tenga un modelo con muchas generalizaciones y haya que referirse a
ellas o distinguirlas.

Una clase con un único padre se dice que utiliza herencia simple; una clase con más de un
padre se dice que utiliza herencia múltiple.

Asociación
Una asociación es una relación estructural que especifica que los objetos de un elemento están
conectados con los objetos de otro. Dada una asociación entre dos clases, se puede navegar
desde un objeto de una clase hasta un objeto de la otra clase, y viceversa. Es legal que ambos
extremos de una asociación estén conectados a la misma clase. Esto significa que, dado un
objeto de una clase, se puede conectar con otros objetos de la misma clase. Una asociación
que conecta exactamente dos clases se dice binaria. Aunque no es frecuente, se pueden tener
asociaciones que conecten más de dos clases; éstas son llamadas asociaciones n-arias.
Gráficamente, una asociación se representa como una línea continua que conecta la misma o
diferentes clases. Las asociaciones se utilizarán cuando se quieran representar relaciones
estructurales.

Aparte de esta forma básica, hay cuatro adornos que se aplican a las asociaciones.

-7-
Profesor: Ing. Fabián H. Carrera Programación II
Instituto de Tecnología ORT Nº 2
UML - Diagrama de Clases
Nombre: Una asociación puede tener un nombre, que se utiliza para describir la
naturaleza de la relación. Para que no haya ambigüedad en su significado, se puede dar
una dirección al nombre por medio de una flecha que apunte en la dirección en la que
se pretende que sea el nombre.
Trabaja para 
Persona Empresa

Rol: Cuando una clase participa en una asociación, tiene un rol específico que juega en
la asociación; un rol es simplemente la cara que la clase de un extremo de la asociación
presenta a la clase del otro extremo. La misma clase puede jugar el mismo o diferentes
roles en otras asociaciones.

Empleado Patrón
Persona Empresa

Multiplicidad: Una asociación representa una relación estructural entre objetos. En


muchas situaciones de modelado, es importante señalar cuántos objetos pueden
conectarse a través de una instancia de una asociación. Cuando se indica una
multiplicidad en un extremo de una asociación, se está especificando que, para cada
objeto de la clase en el extremo opuesto debe haber tantos objetos en este extremo. Se
puede indicar una multiplicidad de exactamente uno (1), cero a uno (0..1), muchos
(0..*), o uno o más (1..*). Incluso se puede indicar un número exacto (por ejemplo, 3).

1..* *
Persona Empresa

Agregación: Una asociación normal entre dos clases representa una relación
estructural entre iguales, es decir, ambas clases están conceptualmente en el mismo
nivel, sin ser ninguna más importante que la otra. A veces, se desea modelar una
relación “todo/parte”, en la cual una clase representa una cosa grande (el “todo”), que
consta de elementos más pequeños (las “partes”). Este tipo de relación se denomina
agregación, la cual representa una relación del tipo “tiene-un”, o sea, un objeto del todo
tiene objetos de la parte. En realidad, la agregación es sólo un tipo especial de
asociación y se especifica añadiendo a una asociación normal un rombo vacío en la
parte del todo, como se muestra en la siguiente figura:

Empresa

*
Departamento

Otras Características
Las dependencias simples, sin adornos, las generalizaciones y las asociaciones con nombres,
multiplicidades y roles son las características mas frecuentes que se necesitan al crear las
abstracciones. De hecho, para la mayoría de los modelos que uno construya, la forma básica
de estas relaciones será todo lo que se necesite para mostrar la semántica más importante de
las relaciones.

-8-
Profesor: Ing. Fabián H. Carrera Programación II
Instituto de Tecnología ORT Nº 2
UML - Diagrama de Clases
Cuando se modela con relaciones de asociaciones, se están modelando clases que son del
mismo nivel. Dada una asociación entre dos clases, ambas dependen de la otra de alguna
forma, y se puede navegar en ambas direcciones. Mientras que una dependencia es una
relación de uso y la generalización es una relación es-un-tipo-de, una asociación especifica un
camino estructural a través del cual interactúan los objetos de las clases implicadas.

-9-