Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diagramas de Clases
(UML ilustrado)
Diagramas de Clases
(Qu Muestran?)
La estructura esttica 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 estticos y no dinmicos)
2
Diagramas de Clases
(Para qu Sirven?)
Realizar la abstraccin de un dominio y formalizar el
anlisis de los conceptos relacionados al mismo
(Modelo de Dominio)
(...o de cualquier tipo de conceptos)
Definir / Documentar una solucin de diseo, es
decir, la estructura del sistema que se va a
implementar en trminos de clases y objetos
Definir / Documentar modelado
de datos
Diagramas de Clases
Advertencia
Nota Importante
El hecho de que exista cierta caracterstica en un
diagrama (ej: la declaracin de mtodos) no significa
que de forma obligatoria se deba usar, simplemente
son herramientas que estn disponibles.
Cuando usted arregla algo, no usa todas las
herramientas de su caja de herramientas, slo usa lo
que necesita para realizar el trabajo.
Igual ocurre con UML y las herramientas de modelado,
use slo las herramientas (diagramas / constructos)
que necesita para una situacin particular y no sobre
use las herramientas, tratando de usarlas slo porque
si...
5
Diagramas de Clases
Qu es un
Dominio de
Aplicacin?
Qu es un Modelo
de Dominio?
6
Diagramas de Clases
Diagramas de Clases
Qu es una Clase?
Diagramas de Clases
(Que es una Clase?)
Clase / Clasificador: Definicin de la estructura y el
comportamiento de un conjunto de objetos que tienen
(comparten) el mismo patrn estructural y de
comportamiento
Un ejemplo de una clase nmero complejo:
Diagramas de Clases
(Atributos y Objetos)
Atributos:
Propiedades relevantes de un clase
Representan su estructura
Pueden ser simples o compuestos
Mtodos:
Comportamiento asociado a una
clase
10
Diagramas de Clases
Diagramas de Clases
(Que es una Clase?)
public class ComplexNumber {
private double r;
private double i;
public ComplexNumber(double r, double i) {
this.r = r;
this.i = i;
}
El cdigo es
Java ;-)
12
Diagramas de Clases
(Que es una Clase?)
Visibilidad:
- Privado
~ Paquete
# Protegido
+ Pblico
Valor por
Defecto
Tipo de Dato
Nombre
Atributo
Nombre del
Mtodo
Multiplicidad
Parmetros
de Entrada
Tipo de
Retorno
13
Diagramas de Clases
(Que es una Clase?)
Para los Atributos:
[visibilidad] [/] nombre [:tipo] [multiplicidad] [=valor por
omisin] [{propiedad}]
Para los Mtodos:
[visibilidad] nombre [(lista de parmetros)] [{propiedad}]
Donde un parmetro es:
[direccin (in/out/inout)] nombre: tipo [multiplicidad] [=valor por
omisin]
Las propiedades pueden una o mas de las siguientes:
readOnly, isQuery, Concurrent, Guarded, Sequential, etctera
... 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
Instanciacin / Instanciar:
Proceso de generacin o creacin de
las instancias (objetos) de una clase
pedro = new Persona()
Objeto:
Representacin de algo que se
describe mediante un identificador,
una estructura y un comportamiento.
Instancia de una Clase
16
Diagramas de Clases
public class Persona {
private
private
private
private
String
char
Date
String
nombre;
sexo;
fechaNac;
profesion;
public Persona(
String nombre, char sexo, Date fechaNac, String profesion) {
this.nombre
= nombre;
this.sexo
= sexo;
this.fechaNac = fechaNac;
this.profesion = profesion;
}
17
Diagramas de Clases
7, 1988), Actor
4, 1980), Ceramista);
);
);
1, 1977), Ingeniero);
18
Diagramas de Clases
(Parametrizables / Abstractas / Utilitarias)
Clases Parametrizables: Plantillas
de clases que se pueden
parametrizar con uno o ms tipos
de datos segn sea necesario
(Clases Genricas)
Clases Abstractas: Clases que no
tienen implementacin para todos
los mtodos definidos
Clases Utilitarias: Clases que
contienen libreras de funciones
(no interesa mucho la
implementacin)
19
Diagramas de Clases
(Parametrizables / Abstractas / Utilitarias)
public class Lista<Tipo> {
public void
insertar (Tipo t)
{ /* cdigo */ }
public void
eliminar (Tipo t)
{ /* cdigo */ }
public Tipo
eliminar (int pos)
{ /* cdigo */ }
public Tipo
obtener
{ /* cdigo */ }
(int pos)
}
// 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)
public
public
public
public
abstract
abstract
abstract
abstract
double
double
double
double
getArea();
getPerimetro();
getRectCont();
getDibujar();
21
Diagramas de Clases
(Especializacin / Generalizacin / Herencia)
Jerarqua de Clases:
Relacin ES-UN(A),
abstracciones de
generalizacin /
especializacin de clases
22
Diagramas de Clases
(Especializacin / Generalizacin / Herencia)
Herencia:
Disjunta / Traslapada
Total / Parcial
23
Diagramas de Clases
(Especializacin / Generalizacin / Herencia)
public abstract class Figura {
public abstract double calcArea ();
public abstract void
dibujar (Canvas canvas);
}
Polimorfismo:
Vista lgica o
estructural
se puede usar el
mismo nombre para la definicin de un
mtodo en varias clases sin importar la
relacin entre las mismas.
Persona
-oid: OID
-nombre: Cadena(64)[1]
-direccion: Cadena(128)[0..1]
-telefono: Cadena(16)[0..1]
Reescritura o
sobrecarga: permite nombrar
cdigo diferente con el mismo nombre
para ms de una clase de objetos.
Encadenamiento tardo:
+modifica()
+despliega()
Trabajador
Estudia
-cargo: TipoCargo[1]
-sueldoActual: Moneda[0..1]
-carrera: Tipo
+despliega()
+despliega()
Preparador
-fechaConcurso: Fecha[1]
+despliega()
Mayo,2008
25
Relaciones (Vnculos)
Asociaciones?
1:1, 1:N y N:M?
Eso se puede ver
mejor con un ejemplo
26
Relaciones (Vnculos)
1:N
Vnculo / Relacin
Trabaja En / Tiene
Departamento
de Control
Departamento
de Investigacin
de Operaciones
Departamento
de Computacin
Profesores
Departamentos
27
Relaciones (Vnculos)
N:M
Vnculo / Relacin
Dicta / Es dictada por
Programacin
10
Programacin
20
Bases de Datos
Profesores
Materias
28
Relaciones (Vnculos)
1:1
Vnculo / Relacin
Es novia de / Es novio de
Chicas
Chicos
Diagramas de Clases
(Asociaciones)
Asociaciones: Representan relaciones estructurales entre
las clases (la forma en que estn relacionadas entre si las
clases)
Cmo se implementan?
30
Diagramas de Clases
(Asociaciones)
public class Departamento {
// Una lista de profesores
// (Un departamento tiene muchos profesores)
private List<Profesor> profesorList;
}
// ...
public class Profesor {
// Una referencia a un departamento
// (Un profesor pertenece slo a un departamento)
private Departamento departamentoRef;
}
31
Diagramas de Clases
(Asociaciones)
public class Estudiante {
// Una lista de asignaturas
// (Un estudiante tiene muchas asignaturas)
private List<Asignatura> asignaturaList;
}
// ...
public class Asignatura {
// Una lista de estudiantes
// (Una asignatura tiene muchos estudiantes)
private List<Estudiante> estudianteList;
}
32
Diagramas de Clases
(Asociaciones)
public class Estudiante {
// Una lista de EstAsigRelacion (Una clase relacin)
private List<EstAsigRelacion> estAsigRelacionList;
}
public class EstAsigRelacion {
// referencias cruzadas a las dos clases relacionadas
private Estudiante estudianteRef;
private Asignatura asignaturaRef;
}
public class Asignatura {
// Una lista de EstAsigRelacion (Una clase relacin)
private List<EstAsigRelacion> estAsigRelacionList;
}
33
Diagramas de Clases
(Asociaciones)
Una relacin
muchos a muchos
se puede ver como
dos relaciones uno a
muchos
34
Diagramas de Clases
(Asociaciones)
public class Departamento {
// Una referencia a una secretaria
// (Un departamento tiene slo una secretaria)
private Secretaria secretariaRef;
}
// ...
public class Secretaria {
// Una referencia a un departamento
// (Una secretaria pertenece slo a un departamento)
private Departamento departamentoRef;
}
35
Diagramas de Clases
(Asociaciones)
public class Estudiante {
// Una lista de Nota (Una clase asociacin)
private List<Nota> notaList;
}
public class Nota {
// Datos de la asociacin
private double nota;
private int asistencias
// referencias cruzadas a
// las dos clases relacionadas
private Estudiante estudianteRef;
private Seccion seccionRef;
Diagramas de Clases
(Asociaciones / Navegabilidad)
Navegabilidad: Representan relaciones estructurales entre
las clases (la forma en que estn relacionadas entre si las
clases)
Navegable por
ambos lados
Navegable
NO
navegable
Indefinido
37
Diagramas de Clases
(Agregacin / Composicin)
Agregacin: Es una relacin
en la que una de las clases
representa un todo y la otra
representa parte de ese todo
Cmo se implementan?
Cul es la diferencia con las asociaciones?
38
Diagramas de Clases
(Agregacin / Composicin)
Composicin: Las partes no
pueden existir sin el todo
Composicin: El todo no
puede existir sin las partes
En contradiccin con el
ejemplo anterior:
(Ejemplo Anterior)
La parte (La
rueda) puede
existir sin el
todo?
39
Diagramas de Clases
(Agregacin / Composicin)
Peor an...
Agregacin: Las partes
pueden ser compartidas por
varios todos!
40
Diagramas de Clases
(Agregacin / Composicin)
Precise semantics of shared aggregation varies by
application area and modeler
41
Diagramas de Clases
(Dependencia)
Dependencia: Relacin en la que una clase necesita
(requiere) a otra para poder funcionar
La clase
persona
depende de la
clase telfono
42
Diagramas de Clases
Qu / Cul es la
Interfaz de una clase?
43
Diagramas de Clases
(Interfaces / Realizaciones)
Interfaz: Clase asociada que describe su comportamiento
visible. Conjunto de mtodos que describen el comportamiento
visible de una clase
EditorGrafico es una clase
que usa la interfaz
Idibujable,
independientemente que la
implemente un Crculo o
cualquier otra clase
(Polimorfismo)
<<interface>> es un estereotipo
44
Diagramas de Clases
(Interfaces / Realizaciones)
La interfaz IGeometrico es
implementada / realizada tanto
por Crculo como por
Rectngulo
45
Diagramas de Clases
(Interfaces / Realizaciones)
import java.awt.Point;
import java.awt.Rectangle;
public class Circulo implements IGeometrico, IDibujable {
private double centro;
private double radio;
public double
getArea()
{ /* de IGeometrico */ }
public double
getPerimetro() { /* de IGeometrico */ }
public Rectangle getRectCont() { /* de IGeometrico */ }
public void dibujar()
{ /* de IDibujable */ }
public Point
public void
{ /* de circulo */ }
{ /* de circulo */ }
getCentro()
setCentro(...)
{ /* de circulo */ }
{ /* de circulo */ }
46
Diagramas de Clases
(Interfaces / Realizaciones)
import java.awt.Rectangle;
public interface IGeometrico {
public double getArea();
public double getPerimetro();
}
Diagramas de Clases
(Interfaces / Realizaciones)
List<IDibujable> elementosDibujar;
// ...
Algunos de estos
son crculos, otros
son rectngulos,
estrellas, lneas,
etctera...
Pero todos
implementan la
interfaz IDibujable
Diagramas de Clases
(Que es una Clase?)
qu es acoplamiento?
qu es cohesin?
el acoplamiento ms bajo posible y la cohesin ms alta
posible suele ser el objetivo de todo arquitecto, diseador
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
Diseo OO
55
Diagramas de Clases
(Arquitectura del motor de Workflow CledaFlow)
Arquitectura
Diseo OO
56
Diagramas de Clases
A nivel de
implementacin
57
Diagramas de Clases
(Modelo Conceptual)
class Dependencias
+tieneEscuelas
Escuela
1..*
+tieneDepartamentos 1..*
Departamento
Dependencia
Facultad/ Ncleo
+tieneInstitutos
*
InstitutoDeI nvestigacin
+tieneCentros
*
CentroDeInvestigacin
+tieneLabs
*
LaboratorioDeInvestigacin
+tienePostgrados
*
Postgrado
58
Diagramas de Clases
(Modelo de Implementacin)
class pelculas
enumeration
TipoPelicula
Pelcula
-
+
+
+
+
+
+
+
nuevaPelicula() : void
setTitulo(string) : void
getTitulo() : string
setAo(char) : void
getAo() : char
setDuracion(float) : void
getDuracion() : float
modificaPelicula() : void
despliegaPelicula() : void
eliminaPelicula() : void
Estudio
enum
drama
suspenso
accin
comedia
+produce
*
+producidaPor
produccin
1..*
nombre: string
ciudad: string
direccion: string
dirWeb: string
fechaFundacion: date
pais: string
telefonos: Lista
+
+
+
+
+
+
+
+
+
+
+
nuevoEstudio() : void
modificaEstudio() : void
cierraEstudio() : void
despliegaEstudio() : Estudio[]
setNombre(string) : void
setCiudad(string) : 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
Dependencia
Escuela
1
-secretariaDe
1
SolicitudDeEstudiante
SolicitudDeProfesor
-estudiantes 1..*
-profesores 1..*
Profesor
-solicitadoPor
-solicita
-autorizadoPor -autoriza *
-solicita
Equipo
-controla
-controladoPor
-secretaria
-solicitadoPor
Estudiante
Personal
-secretaria
1
Persona
60
Diagramas de Clases
class Geometra
enumeration
TipoColor
enumeration
TipoRelleno
Polgono
-
DatoGeomtrico
enumeration
TipoSombra
relleno: TipoRelleno
sombra: TipoSombra
3..*
-lneas
enum
rojo
verde
negro
color: TipoColor
Punto
-esquinaSuperiorIzquierda
x: float
y: float
-de
-lneas
-hasta
Arco
Rectngulo
ancho: int
largo: int
anguloDeInicio: double
anguloDeBarrido: double
-lneas *
Lnea
-lneas
2..*
{ordenado}
Polilnea
61
Diagramas de Clases
Lecturas recomendadas:
http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/
(En Ingls)
62
REFERENCIAS
Booch, Rumbaugh,
Jacobson, El Lenguaje
Unificado de Modelado,
Pearson Addison-Wesley
1ra. Edicin
63
Gracias
Gracias!
64