Documente Academic
Documente Profesional
Documente Cultură
Diagramas de Clases
(UML ilustrado)
Evolución Ágil
Demián Gutierrez
Noviembre 2012
1
Diagramas de Clases
(¿Qué Muestran?)
¿simple verdad?
¿estructura estática?
2
Diagramas de Clases
(¿Qué Muestran?)
¿estructura estática?
3
Diagramas de Clases
(¿Qué Muestran?)
Las clases,
las interfaces / atributos de las clases,
las relaciones que existen entre las distintas
clases del sistema
6
Diagramas de Clases
(Programación Orientada a Objetos)
7
Diagramas de Clases
(Notación Básica)
Base de Datos:
¿No les suena esto al concepto de tipo de entidad? 8
Diagramas de Clases
(Atributos y Métodos)
Métodos: ¿contrato?
Comportamiento asociado a una luego hablamos
clase, de esto
“Contrato” asociado a una clase
9
Diagramas de Clases
(Diagramas de Clases y Código)
A nivel de implementación,
la relación que existe entre el
código y una clase en UML
es muy importante
private double r;
private double i;
El código es
Java ;-)
11
Diagramas de Clases
(Notación Avanzada)
Visibilidad:
- Privado
~ Paquete Valor por
# Protegido Defecto
+ Público
Tipo de Dato
Nombre
Atributo Multiplicidad
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 12
Diagramas de Clases
(Notación Avanzada)
Clases y Objetos
¿qué es un objeto?
14
Diagramas de Clases
¿Clases y Objetos?
Clases y Objetos
¿qué es una instancia?
¿qué es instanciar?
15
Diagramas de Clases
¿Clases y Objetos?
Instancia:
Manifestación concreta de una
abstracción, que puede tener un
estado y a la que se le puede aplicar
un conjunto de operaciones
Objeto:
Manifestación concreta de una clase pedro = new Persona()
(abstracción)
Instanciación / Instanciar:
Proceso de generación o creación de
instancias (objetos) de una clase
16
Diagramas de Clases
¿Clases y Objetos?
public class Persona {
public Persona(
String nombre, char sexo, Date fechaNac, String profesion) {
this.nombre = nombre;
this.sexo = sexo;
this.fechaNac = fechaNac;
this.profesion = profesion;
}
}
18
Diagramas de Clases
(Parametrizables / Abstractas)
Clases Parametrizable:
Clases que se pueden
parametrizar con uno o más tipos
de datos según sea necesario
Generics en Java,
Templates en C++
Clases Abstractas:
Clases que no tienen
instrumentados / implementados
todos sus métodos
19
Diagramas de Clases
(Parametrizables / Abstractas)
public class Lista<Tipo> {
21
Diagramas de Clases
(Herencia / Especialización / Generalización)
Generalización:
Relación de tipo ES-UN(A), abstracciones de
generalización / especialización de clases
Herencia:
Propiedad que tienen las
clases de heredar de sus
super-clases estructura
y/o comportamiento
(Simple / Múltiple)
22
Diagramas de Clases
(Herencia / Especialización / Generalización)
Clase Padre
Clase Hija
Relación de
Herencia
(“es una”)
24
Diagramas de Clases
(Herencia / Especialización / Generalización)
Herencia:
Disjunta / Traslapada
Total / Parcial
¿asociaciones / relaciones?
¿1:1, 1:N y N:M?
se puede ver
mejor con un ejemplo
27
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
Programación
10
Programación
20
Bases de Datos
Profesores Materias
Chicas Chicos
Asociaciones:
Representan relaciones estructurales entre las clases
(la forma en que están relacionadas entre si las clases)
¿cómo se implementan? 31
Diagramas de Clases
(Relaciones / Vínculos / Asociaciones)
public class Departamento {
// ...
32
Diagramas de Clases
(Relaciones / Vínculos / Asociaciones)
public class Estudiante {
// ...
33
Diagramas de Clases
(Relaciones / Vínculos / Asociaciones)
N:M
34
Diagramas de Clases
(Relaciones / Vínculos / Asociaciones)
36
Diagramas de Clases
(Relaciones / Vínculos / Asociaciones)
// Datos de la asociación
private double nota;
private int asistencias
// referencias cruzadas a
// las dos clases relacionadas
private Estudiante estudianteRef;
private Seccion seccionRef;
}
// ...
38
Diagramas de Clases
(Asociaciones / Navegabilidad)
Navegabilidad:
Permite definir qué lado de la asociación es
accesible desde el otro lado
Navegable por
ambos lados
Navegable
NO
navegable Indefinido
39
Diagramas de Clases
(Agregación / Composición)
*Booch, Rumbaugh, Jacobson, El Lenguaje Unificado de Modelado, Pearson Addison-Wesley 1ra. Edición 40
Diagramas de Clases
(Agregación / Composición)
Agregación:
Es una relación en la que una de las clases representa un
todo y la otra representa parte de ese todo
Una agregación representa una relación de tipo “tiene un”
41
Diagramas de Clases
(Agregación / Composición)
Cuidado:
En muchos casos las agregaciones (y las
composiciones como veremos más adelante), pueden
ser fuente de mucha confusión
Composición:
Es una forma más fuerte de la agregación, en la que
las partes no pueden existir sin el todo
El todo es responsable del ciclo de vida de las partes
objeto objeto
“compuesto” “componente”
43
Diagramas de Clases
(Agregación / Composición)
composite composed
object object
Dependencia:
Relación en la que una clase necesita (requiere) a otra para poder
funcionar (esto no implica necesariamente una asociación)
Si se borra una
las clases de la
dependencia,
¿en qué caso se
produce un error
de compilación?
La clase persona
depende de la
clase teléfono
47
Diagramas de Clases
48
Diagramas de Clases
(Interfaces / Realizaciones)
49
Diagramas de Clases
(Interfaces / Realizaciones)
La interfaz IGeometrico es
implementada / realizada tanto
por Círculo como por
Rectángulo “Contrato”
¿Cuáles son
Válidos?
52
Diagramas de Clases
(Interfaces / Realizaciones)
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Rectangle;
List<IDibujable> elementosDibujar;
Algunos de estos
son círculos, otros
// ... son rectángulos,
estrellas, líneas,
etcétera...
for (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();
}
¡Gracias!
56