You are on page 1of 64

UML

Diagramas de Clases
(UML ilustrado)

Universidad de Los Andes


Demián Gutierrez
Marzo 2011
1
Diagramas de Clases
(¿ QuéMuestran?)

La estructura estática del sistema modelado


(piense en el plano estructural de un ingeniero civil)

Las relaciones que existen entre las distintas


clases y objetos del sistema

Las clases y objetos del sistema


y su estructura interna

Se concentran en los elementos del sistema de


forma independiente del tiempo
(Muestran aspectos estáticos y no dinámicos)
2
Diagramas de Clases
(¿ Para qué Sirven?)

Realizar la abstracción de un dominio y formalizar el


análisis de los conceptos relacionados al mismo
(Modelo de Dominio)
(...o de cualquier tipo de conceptos)

Definir / Documentar una solución de diseño, es


decir, la estructura del sistema que se va a
implementar en términos de clases y objetos

Definir / Documentar modelado de datos


(Cumplen la misma función en este sentido de los
diagramas ERE)
3
Diagramas de Clases

Advertencia

4
Nota Importante

El hecho de que exista cierta característica en un


diagrama (ej: la declaración de métodos) no significa
que de forma obligatoria se deba usar, simplemente
son herramientas que están disponibles.

Cuando usted arregla algo, no usa todas las


herramientas de su caja de herramientas, sólo usa lo
que necesita para realizar el trabajo.

Igual ocurre con UML y las herramientas de modelado,


use sólo las herramientas (diagramas / constructos)
que necesita para una situación particular y no “sobre
use” las herramientas, tratando de usarlas sólo porque
si...
5
Diagramas de Clases

¿Qué es un
Dominio de
Aplicación?

¿Qué es un Modelo
de Dominio? 6
Diagramas de Clases

La mayoría de los conceptos


que se presentan en las
siguientes transparencias
están relacionados con los
conceptos de programación
orientada a objetos (POO)
vistos en PR2
7
Diagramas de Clases

¿Qué es una Clase?

8
Diagramas de Clases
(¿ Que es una Clase?)

Clase / Clasificador: Definición de la estructura y el


comportamiento de un conjunto de objetos que tienen
(comparten) el mismo patrón estructural y de
comportamiento

Un ejemplo de una clase “número complejo”:

Base de Datos: ¿No les suena esto al concepto de


tipo de entidad? 9
Diagramas de Clases
(Atributos y Objetos)

Atributos:
Propiedades relevantes de un clase
Representan su estructura
Pueden ser simples o compuestos

Métodos:
Comportamiento asociado a una
clase

10
Diagramas de Clases

La relación que existe


entre el código y una
clase en UML es muy
importante

¡Necesito que hablemos


el mismo idioma!
11
Diagramas de Clases
(¿ Que es una Clase?)
p u b l i c c l a s s ComplexNumber {

p r i v a t e double r;
p r i v a t e double i;

p u b l i c ComplexNumber(double r, double i) {
t h i s . r = r;
t h i s . i = i;
}

p u b l i c double norm() {
retu rn Math.sqrt(r * r + i * i);
}
}

El código es
Java ;-)
12
Diagramas de Clases
(¿ Que es una Clase?)
Visibilidad:
- Privado
~ Paquete Valor por
Defecto
# Protegido
+ Público
Tipo de Dato

Nombre
Atributo Multiplicidad

Nombre del Parámetros Tipo de


Método de Entrada Retorno

Base de Datos: Generalmente, cuando se desarrolla


un modelo de datos no se utiliza toda esta
complejidad. Por ejemplo, generalmente no se
definen métodos 13
Diagramas de Clases
(¿ Que es una Clase?)

Para los Atributos:


[visibilidad] [/] nombre [:tipo] [multiplicidad] [=valor por
omisión] [{propiedad}]

Para los Métodos:


[visibilidad] nombre [(lista de parámetros)] [{propiedad}]
Donde un parámetro es:
[dirección (in/out/inout)] nombre: tipo [multiplicidad] [=valor por
omisión]

Las propiedades pueden una o mas de las siguientes:


readOnly, isQuery, Concurrent, Guarded, Sequential, etcétera
... o cualquier otra predefinida ...
14
Diagramas de Clases

¿qué es un objeto?
¿qué es una instancia?
¿qué es instanciar?

15
Conceptos de Objetos
(Diagramas de Clases)

Instancia:
Cada objeto que pertenece a una
clase

Instanciación / Instanciar:
Proceso de generación o creación de
las instancias (objetos) de una clase
pedro = new Persona()

Objeto:
Representación de algo que se
describe mediante un identificador,
una estructura y un comportamiento.
“Instancia de una Clase”
16
Diagramas de Clases

p u b l i c c l a s s Persona {

private String nombre;


private char sexo;
private Date fechaNac;
private String profesion;

p u b l i c Persona(
String nombre, char sexo, Date fechaNac, String profesion) {
this.nombre = nombre;
this.sexo = sexo;
this.fechaNac = fechaNac;
this.profesion = profesion;
}
}

Existe una diferencia muy


importante entre un Objeto y
una Clase
17
Diagramas de Clases

Crear Instancias (Instanciar)


Persona p1 = new Persona(
“Pedro”, 'M', new Date(16, 7, 1988), “Actor” );

Persona p2 = new Persona(


“Andrea”, 'F', new Date(14, 4, 1980), “Ceramista”);
Persona p3 = new Persona(
“María”, 'F', new Date(23, 11, 1960), “Médico” );

Persona p4 = new Persona(


“Luis”, 'M', new Date(12, 1, 1977), “Ingeniero”);

18
Diagramas de Clases
(Parametrizables / Abstractas / Utilitarias)

Clases Parametrizables: Plantillas


de clases que se pueden
parametrizar con uno o más tipos
de datos según sea necesario
(Clases Genéricas)

Clases Abstractas: Clases que no


tienen implementación para todos
los métodos definidos

Clases Utilitarias: Clases que


contienen librerías de funciones
(no interesa mucho la
implementación) 19
Diagramas de Clases
(Parametrizables / Abstractas / Utilitarias)
p u b l i c c l a s s Lista<Tipo> {

publ i c v o i d insertar (Tipo t)


{ /* código */ }

publ i c v o i d eliminar (Tipo t)


{ /* código */ }

publ i c Tipo eliminar (i nt pos)


{ /* código */ }

publ i c Tipo obtener (i nt pos)


{ /* código */ }

publ i c Iterador iterador ()


{ /* código */ }
}
// La clase se usa de la siguiente forma:
Lista<int> listaDeEnteros = new Lista<int>();
Lista<Persona> listaDePersonas = new Lista<Persona>(); 20
Diagramas de Clases
(Parametrizables / Abstractas / Utilitarias)

publ i c a b s t ra c t cl as s FiguraBase {

public void insertarEnCanvas(Canvas c) { /* código */ }


public void eliminarDeCanvas(Canvas c) { /* código */ }

// Los métodos siguientes son abstractos,


// es decir, no tienen implementación

publ i c abs t r act doubl e getArea();


publ i c abs t r act doubl e getPerimetro();
publ i c abs t r act doubl e getRectCont();
publ i c abs t r act doubl e getDibujar();
}

21
Diagramas de Clases
(Especialización / Generalización / Herencia)

Jerarquía de Clases: Herencia: Propiedad que


Relación ES-UN(A), tienen las clases de heredar
abstracciones de de sus superclases estructura
generalización / y/o comportamiento (Simple /
especialización de clases Múltiple)

22
Diagramas de Clases
(Especialización / Generalización / Herencia)

Herencia:
Disjunta / Traslapada
Total / Parcial

23
Diagramas de Clases
(Especialización / Generalización / Herencia)

p u b l i c a b s t ra c t c l a s s F i g u ra {
p u b l i c a b s t ra c t double calcArea ();
p u b l i c a b s t ra c t v o i d dibujar (Canvas canvas);
}

publ i c cl as s Rect ang ul o publ i c cl as s El i ps e


extends F i g u ra { extends F i g u ra {
// ... // ...
} }

publ i c cl as s Cuadrado publ i c cl as s Circulo


extends Rect ang ul o { ext ends El i ps e {
// ... // ...
} }
24
Vista lógica o
estructural
• Polimorfismo: se puede usar el
mismo nombre para la definición de un
método en varias clases sin importar la
relación entre las mismas. Persona

• Reescritura o
-oid: OID
-nombre: Cadena(64)[1]
-direccion: Cadena(128)[0..1]

sobrecarga: permite nombrar -telefono: Cadena(16)[0..1]


+modifica()
código diferente con el mismo nombre +despliega()

para más de una clase de objetos.


Trabajador

• Encadenamiento tardío:
Estudi
-cargo: TipoCargo[1]
-carrera: Tipo
-sueldoActual: Moneda[0..1]
permite seleccionar el código adecuado al +despliega()
+despliega()

objeto definido en la invocación del método.


Preparador
-fechaConcurso: Fecha[1]
+despliega()

Mayo,2008 EISULA. Dpto. De Computación. Isabel Besembel C. Base de Datos. Sem. A-08. 25
Relaciones (Vínculos)

¿Asociaciones?
¿1:1, 1:N y N:M?
Eso se puede ver
mejor con un ejemplo

26
Relaciones (Vínculos)
1:N
Vínculo / Relación
Trabaja En / Tiene

Departamento
de Control

Departamento
de Investigación
de Operaciones

Departamento
de Computación

Profesores Departamentos

¿Cuántos profesores puedo tener en el ¿Con cuantos profesores puede


conjunto de entidades “Profesores”? estar asociado un departamento?
¿Y en “Departamentos”? ¿Y al contrario? 27
Relaciones (Vínculos)
N:M
Vínculo / Relación
Dicta / Es dictada por

Programación
10

Programación
20

Bases de Datos

Profesores Materias

¿Cuántos profesores puedo tener en el ¿Con cuantos profesores puede


conjunto de entidades “Profesores”? estar asociado una materia? ¿Y al
¿Y en “Materias”? contrario? 28
Relaciones (Vínculos)
1:1
Vínculo / Relación
Es novia de / Es novio de

Chicas Chicos

¿Cuántos muchachos puedo tener en ¿Con cuantos Chicos puede estar


el conjunto de entidades “Chicos”? asociados (ser novios) de una Chica
¿Y en “Chicas”? en particular? ¿Y al contrario? 29
Diagramas de Clases
(Asociaciones)

Asociaciones: Representan relaciones estructurales entre


las clases (la forma en que están relacionadas entre si las
clases)

¿Cómo se implementan? 30
Diagramas de Clases
(Asociaciones)
p u b l i c c l a s s Departamento {

// Una lista de profesores


// (Un departamento tiene muchos profesores)
p r i v a t e List<Profesor> profesorList;
}

// ...

p u b l i c c l a s s Profesor {

// Una referencia a un departamento


// (Un profesor pertenece sólo a un departamento)
p r i v a t e Departamento departamentoRef;
}

31
Diagramas de Clases
(Asociaciones)
p u b l i c c l a s s Estudiante {

// Una lista de asignaturas


// (Un estudiante tiene muchas asignaturas)
p r i v a t e List<Asignatura> asignaturaList;
}

// ...

p u b l i c c l a s s Asignatura {

// Una lista de estudiantes


// (Una asignatura tiene muchos estudiantes)
p r i v a t e List<Estudiante> estudianteList;
}

32
Diagramas de Clases
(Asociaciones)
p u b l i c c l a s s Estudiante {
// Una lista de EstAsigRelacion (Una clase relación)
pr i vat e List<EstAsigRelacion> estAsigRelacionList;
}

publ i c cl as s EstAsigRelacion {
// referencias cruzadas a las dos clases relacionadas
pr i vat e Estudiante estudianteRef;
pr i vat e Asignatura asignaturaRef;
}

publ i c cl as s Asignatura {
// Una lista de EstAsigRelacion (Una clase relación)
pr i vat e List<EstAsigRelacion> estAsigRelacionList;
}

33
Diagramas de Clases
(Asociaciones)

Una relación
muchos a muchos
se puede ver como
dos relaciones uno a
muchos

34
Diagramas de Clases
(Asociaciones)
p u b l i c c l a s s Departamento {

// Una referencia a una secretaria


// (Un departamento tiene sólo una secretaria)
pr i vat e Secretaria secretariaRef;
}

// ...

p u b l i c c l a s s Secretaria {

// Una referencia a un departamento


// (Una secretaria pertenece sólo a un departamento)
p r i v a t e Departamento departamentoRef;
}

35
Diagramas de Clases
(Asociaciones)

p u b l i c c l a s s Estudiante {
// Una lista de Nota (Una clase asociación)
p r i v a t e List<Nota> notaList;
}

p u b l i c c l a s s Nota {

// Datos de la asociación
p r i v a t e double nota;
p r i v a t e i n t asistencias

// referencias cruzadas a
// las dos clases relacionadas
p r i v a t e Estudiante estudianteRef;
p r i v a t e Seccion seccionRef;
}

p u b l i c c l a s s Seccion {
// Una lista de Nota (Una clase asociación)
p r i v a t e List<Nota> notaList;
}
36
Diagramas de Clases
(Asociaciones / Navegabilidad)

Navegabilidad: Representan relaciones estructurales entre


las clases (la forma en que están relacionadas entre si las
clases)

Navegable por
ambos lados

Navegable

NO
navegable
Indefinido
37
Diagramas de Clases
(Agregación / Composición)

Agregación: Es una relación Composición: Es una forma


en la que una de las clases más fuerte de la agregación,
representa un todo y la otra en la que el todo no puede
representa parte de ese todo existir sin sus partes

¿Cómo se implementan?
¿Cuál es la diferencia con las asociaciones? 38
Diagramas de Clases
(Agregación / Composición)

Composición: Las partes no Composición: El todo no


pueden existir sin el todo puede existir sin las partes
En contradicción con el (Ejemplo Anterior)
ejemplo anterior:

¿La parte (La


rueda) puede
existir sin el
todo?

39
Diagramas de Clases
(Agregación / Composición)

Peor aún...

Agregación: ¡Las partes Composición: ¡Las partes NO


pueden ser compartidas por pueden ser compartidas por
varios todos! varios todos!

49
Diagramas de Clases
(Agregación / Composición)

“Precise semantics of shared aggregation varies by


application area and modeler”

“Indicates that the property is aggregated compositely,


i.e., the composite object has responsibility for the
existence and storage of the composed objects (parts)”

Citas tomadas literalmente del Estándar de UML 41


Diagramas de Clases
(Dependencia)

Dependencia: Relación en la que una clase necesita


(requiere) a otra para poder funcionar

La clase
persona
depende de la
clase teléfono
42
Diagramas de Clases

¿Qué / Cuál es la
Interfaz de una clase?

43
Diagramas de Clases
(Interfaces / Realizaciones)

Interfaz: Clase asociada que describe su comportamiento


visible. Conjunto de métodos que describen el comportamiento
visible de una clase

EditorGrafico es una clase <<interface>> es un estereotipo


que usa la interfaz
Idibujable,
independientemente que la
implemente un Círculo o
cualquier otra clase
(Polimorfismo)

44
Diagramas de Clases
(Interfaces / Realizaciones)
La interfaz IGeometrico es
implementada / realizada tanto
por Círculo como por
Rectángulo

Desde el punto de vista de


POO, tanto Círculo como
Rectángulo son objetos de tipo
IGeometrico
45
Diagramas de Clases
(Interfaces / Realizaciones)
i mpor t java.awt.Point;
i mpor t java.awt.Rectangle;

publ i c c l a s s Circulo implements I Geomet r i co, I Di buj abl e {

p r i v a t e double centro;
p r i v a t e double radio;

public double getArea() { / * de IGeometrico */ }


public double getPerimetro() { / * de IGeometrico */ }
public Rectangle g e t R e c t C o n t( ) { /* de IGeometrico */ }
public v o i d d i b u j a r ( ) { /* de I D i b u j a b l e * / }

public Point getCentro() { /* de circulo */ }


public v o i d setCentro(...) { /* de circulo */ }
public double getRadio() { /* de circulo */ }
public v o i d setRadio(...) { /* de circulo */ }
}
6
4
Diagramas de Clases
(Interfaces / Realizaciones)

i mpor t java.awt.Rectangle;

publ i c i nt er f ace I Geomet r i co {

p u b l i c double getArea();

p u b l i c double getPerimetro();

p u b l i c Rectangle getRectCont();
}

public interface IDibujable {


p u b l i c v o i d dibujar();
}
47
Diagramas de Clases
(Interfaces / Realizaciones)

List<IDibujable> elementosDibujar;
Algunos de estos
son círculos, otros
// ... son rectángulos,
estrellas, líneas,
etcétera...
f o r (IDibujable dibujable : Pero todos
elementosDibujar) { implementan la
// No importa si dibujable es interfaz IDibujable
// un círculo, rectángulo, etcétera
// Los puedo manejar a todos igual
// porque tienen una interfaz en común
dibujable.dibujar();
}

¡El acto de magia de las interfaces y el polimorfismo!


48
Diagramas de Clases
(¿ Que es una Clase?)

¿qué es acoplamiento?
¿qué es cohesión?
el acoplamiento más bajo posible y la cohesión más alta
posible suele ser el objetivo de todo arquitecto, diseñador
de software o programador
lectura recomendada:
http://latecladeescape.com/w0/ingenieria-del-software/acoplamiento-y-cohesion.html

49
Diagramas de Clases

Ejemplos

50
Diagramas de Clases
(Un ejemplo conceptual)

Modelo de Dominio 51
Diagramas de Clases
(Un ejemplo conceptual)

52
Diagramas de Clases
(Un ejemplo conceptual)

Modelo de Dominio 53
Diagramas de Clases
(Un ejemplo conceptual)

Modelo de Dominio 54
Diagramas de Clases
(Arquitectura de las clases GUI de CLEDA)

Arquitectura
Diseño OO

55
Diagramas de Clases
(Arquitectura del motor de Workflow Cleda Flow)

Arquitectura
Diseño OO 56
Diagramas de Clases

A nivel de
implementación

57
Diagramas de Clases
(Modelo Conceptual)

class Dependencias

+tieneEscuelas
Escuela
1..*

+ ti eneDe pa rtamentos 1..*

Departamento Dependencia

Facultad/ Núcleo

+t ieneI nst it ut os
InstitutoDeInvestigación
*
+tieneCentros
CentroDeInvestigación
*
+tieneLabs
LaboratorioDeInvestigación
*
+tienePostgrados
Postgrado
*

58
Diagramas de Clases
(Modelo de Implementación)

class películas

Película «enumeration» Estudio


TipoPelicula
- titulo: string = Desconocido - nombre: string
- año: char = 0000 «enum» - ciudad: string
- duracion: float = 0.0 drama - direccion: string
- tipo: TipoPelicula suspenso - dirWeb: string
acción - fechaFundacion: date
+ nuevaPelicula() : void comedia - pais: string
- setTitulo(string) : void - telefonos: Lista
+ getTitulo() : string
- setAño(char) : void + nuevoEstudio() : void
+ getAño() : char +produce +producidaPor + modificaEstudio() : void
- setDuracion(float) : void + cierraEstudio() : void
+ getDuracion() : float * producción 1..* + despliegaEstudio() : Estudio[]
+ modificaPelicula() : void - setNombre(string) : void
+ despliegaPelicula() : void - setCiudad(string) : void
+ eliminaPelicula() : void - setDireccion(string) : void
- setDirWeb(string) : void
- setFechaFundacion(date) : void
- setPais(string) : void
- setTelefonos(Lista) : void
+ getNombre() : string
+ getCiudad() : string
+ getDireccion() : string
+ getDirWeb() : string
+ getFechaFundacion() : date
+ getPais() : string
+ getTelefonos() : string[]

59
Diagramas de Clases

class Préstamo de equipos

Dependencia -tieneDepartamentos Dependencia


Departamento 1..* Escuela

-secretariaDe 1 1
-secretariaDe
SolicitudDeProfesor SolicitudDeEstudiante

-estudiantes 1..*
-profesores 1..* -solicitadoPor -solicita -solicita -solicitadoPor
Estudiante
Profesor * * Equipo * *
1 -autorizadoPor -autoriza * -controla *

-controladoPor
1
-secretaria
Personal -secretaria
1
1

Persona

60
Diagramas de Clases

class Geometría

«enumeration»
TipoColor

«enumeration» «enumeration» DatoGeométrico «enum»


TipoRelleno TipoSombra - color: TipoColor rojo
verde
negro

Polígono Punto -esquinaSuperiorIzquierda Rectángulo Arco

- relleno: TipoRelleno - x: float 1 - ancho: int - anguloDeInicio: double


- sombra: TipoSombra - y: float - largo: int - anguloDeBarrido: double
-hasta
-de 1 1
-líneas * -líneas *
3..* -líneas -líneas
{ordenado, hasta línea final = de línea inicial} Línea Polilínea
2..* {ordenado}

61
Diagramas de Clases

Lecturas recomendadas:
http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/
(En Inglés)

62
REFERENCIAS

Martin Fowler, UML Booch, Rumbaugh,


Distilled, Pearson Addison- Jacobson, El Lenguaje
Wesley 2da. Edición Unificado de Modelado,
Pearson Addison-Wesley
1ra. Edición

63
Gracias

¡Gracias!

64