64
1 UML Diagramas de Clases (UML ilustrado) Universidad de Los Andes Demián Gutierrez Marzo 2011

UML Diagramas de Clases - CodeCompiling

Embed Size (px)

Citation preview

Page 1: UML Diagramas de Clases - CodeCompiling

1

UMLDiagramas de Clases

(UML ilustrado)

Universidad de Los AndesDemián Gutierrez

Marzo 2011

Page 2: UML Diagramas de Clases - CodeCompiling

2

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 distintasclases y objetos del sistema

Las clases y objetos del sistemay su estructura interna

Se concentran en los elementos del sistema de forma independiente del tiempo

(Muestran aspectos estáticos y no dinámicos)

Page 3: UML Diagramas de Clases - CodeCompiling

3

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)

Page 4: UML Diagramas de Clases - CodeCompiling

4

Diagramas de Clases

Advertencia

Page 5: UML Diagramas de Clases - CodeCompiling

5

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...

Page 6: UML Diagramas de Clases - CodeCompiling

6

Diagramas de Clases

¿Qué es un Dominio de Aplicación?

¿Qué es un Modelo de Dominio?

Page 7: UML Diagramas de Clases - CodeCompiling

7

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

Page 8: UML Diagramas de Clases - CodeCompiling

8

Diagramas de Clases

¿Qué es una Clase?

Page 9: UML Diagramas de Clases - CodeCompiling

9

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?

Page 10: UML Diagramas de Clases - CodeCompiling

10

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

Page 11: UML Diagramas de Clases - CodeCompiling

11

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!

Page 12: UML Diagramas de Clases - CodeCompiling

12

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; }

public double norm() { return Math.sqrt(r * r + i * i); }}

El código es Java ;-)

Page 13: UML Diagramas de Clases - CodeCompiling

13

Diagramas de Clases(¿Que es una Clase?)

Visibilidad:- Privado

~ Paquete# Protegido+ Público

Nombre Atributo

Valor por Defecto

Tipo de Dato

Multiplicidad

Tipo de Retorno

Parámetros de Entrada

Nombre del Método

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

Page 14: UML Diagramas de Clases - CodeCompiling

14

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 ...

Page 15: UML Diagramas de Clases - CodeCompiling

15

Diagramas de Clases

¿qué es un objeto?

¿qué es una instancia?

¿qué es instanciar?

Page 16: UML Diagramas de Clases - CodeCompiling

16

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”

Page 17: UML Diagramas de Clases - CodeCompiling

17

Diagramas de Clases

public class Persona {

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

public 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

Page 18: UML Diagramas de Clases - CodeCompiling

18

Diagramas de Clases

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”);

Crear In

stancias (In

stanciar)

Page 19: UML Diagramas de Clases - CodeCompiling

19

Diagramas de Clases(Parametrizables / Abstractas / Uti l itarias)

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)

Page 20: UML Diagramas de Clases - CodeCompiling

20

Diagramas de Clases(Parametrizables / Abstractas / Uti l itarias)

public class Lista<Tipo> {

public void insertar (Tipo t) { /* código */ }

public void eliminar (Tipo t) { /* código */ }

public Tipo eliminar (int pos) { /* código */ }

public Tipo obtener (int pos) { /* código */ }

public Iterador iterador () { /* código */ }}// La clase se usa de la siguiente forma:Lista<int> listaDeEnteros = new Lista<int>();Lista<Persona> listaDePersonas = new Lista<Persona>();

Page 21: UML Diagramas de Clases - CodeCompiling

21

Diagramas de Clases(Parametrizables / Abstractas / Uti l itarias)

public abstract class 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 public abstract double getArea(); public abstract double getPerimetro(); public abstract double getRectCont(); public abstract double getDibujar();}

Page 22: UML Diagramas de Clases - CodeCompiling

22

Diagramas de Clases(Especial ización / Generalización / Herencia)

Jerarquía de Clases: Relación ES-UN(A),

abstracciones de generalización /

especialización de clases

Herencia: Propiedad que tienen las clases de heredar

de sus superclases estructura y/o comportamiento (Simple /

Múltiple)

Page 23: UML Diagramas de Clases - CodeCompiling

23

Diagramas de Clases(Especial ización / Generalización / Herencia)

Herencia:

Disjunta / Traslapada

Total / Parcial

Page 24: UML Diagramas de Clases - CodeCompiling

24

Diagramas de Clases(Especial ización / Generalización / Herencia)

public abstract class Figura { public abstract double calcArea (); public abstract void dibujar (Canvas canvas);}

public class Rectangulo extends Figura { // ...}

public class Cuadrado extends Rectangulo { // ...}

public class Elipse extends Figura { // ...}

public class Circulo extends Elipse { // ...}

Page 25: UML Diagramas de Clases - CodeCompiling

Mayo,2008 EISULA. Dpto. De Computación. Isabel Besembel C. Base de Datos. Sem. A-08. 25

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.

• Reescritura o sobrecarga: permite nombrar código diferente con el mismo nombre para más de una clase de objetos.

• Encadenamiento tardío: permite seleccionar el código adecuado al objeto definido en la invocación del método.

Persona

-oid: OID-nombre: Cadena(64)[1]-direccion: Cadena(128)[0..1]-telefono: Cadena(16)[0..1]

+modifica()+despliega()

Trabajador

-cargo: TipoCargo[1]-sueldoActual: Moneda[0..1]

+despliega()

Preparador

-fechaConcurso: Fecha[1]

+despliega()

Estudiante

-carrera: TipoCarrera[1]

+despliega()

Page 26: UML Diagramas de Clases - CodeCompiling

26

Relaciones (Vínculos)

¿Asociaciones?¿1:1, 1:N y N:M?

Eso se puede vermejor con un ejemplo

Page 27: UML Diagramas de Clases - CodeCompiling

27

Vínculo / RelaciónTrabaja En / Tiene

Relaciones (Vínculos)1:N

Departamentode Control

Departamentode Computación

Profesores Departamentos

Departamentode Investigaciónde Operaciones

¿Cuántos profesores puedo tener en el conjunto de entidades “Profesores”?

¿Y en “Departamentos”?

¿Con cuantos profesores puede estar asociado un departamento?

¿Y al contrario?

Page 28: UML Diagramas de Clases - CodeCompiling

28

Vínculo / RelaciónDicta / Es dictada por

Relaciones (Vínculos)N:M

Programación10

Bases de Datos

Profesores Materias

Programación20

¿Cuántos profesores puedo tener en el conjunto de entidades “Profesores”?

¿Y en “Materias”?

¿Con cuantos profesores puede estar asociado una materia? ¿Y al

contrario?

Page 29: UML Diagramas de Clases - CodeCompiling

29

Relaciones (Vínculos)1:1

Vínculo / RelaciónEs novia de / Es novio de

Chicas Chicos

¿Cuántos muchachos puedo tener en el conjunto de entidades “Chicos”?

¿Y en “Chicas”?

¿Con cuantos Chicos puede estar asociados (ser novios) de una Chica

en particular? ¿Y al contrario?

Page 30: UML Diagramas de Clases - CodeCompiling

30

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?

Page 31: UML Diagramas de Clases - CodeCompiling

31

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 sólo a un departamento) private Departamento departamentoRef;}

Page 32: UML Diagramas de Clases - CodeCompiling

32

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;}

Page 33: UML Diagramas de Clases - CodeCompiling

33

Diagramas de Clases(Asociaciones)

public class Estudiante { // Una lista de EstAsigRelacion (Una clase relación) 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 relación) private List<EstAsigRelacion> estAsigRelacionList;}

Page 34: UML Diagramas de Clases - CodeCompiling

34

Diagramas de Clases(Asociaciones)

Una relación muchos a muchos se puede ver como

dos relaciones uno a muchos

Page 35: UML Diagramas de Clases - CodeCompiling

35

Diagramas de Clases(Asociaciones)

public class Departamento {

// Una referencia a una secretaria // (Un departamento tiene sólo una secretaria) private Secretaria secretariaRef;}

// ...

public class Secretaria {

// Una referencia a un departamento // (Una secretaria pertenece sólo a un departamento) private Departamento departamentoRef;}

Page 36: UML Diagramas de Clases - CodeCompiling

36

Diagramas de Clases(Asociaciones)

public class Estudiante { // Una lista de Nota (Una clase asociación) private List<Nota> notaList;}

public class Nota {

// Datos de la asociación private double nota; private int asistencias

// referencias cruzadas a // las dos clases relacionadas private Estudiante estudianteRef; private Seccion seccionRef;}

public class Seccion { // Una lista de Nota (Una clase asociación) private List<Nota> notaList;}

Page 37: UML Diagramas de Clases - CodeCompiling

37

Diagramas de Clases(Asociaciones / Navegabil idad)

Navegabilidad: Representan relaciones estructurales entre las clases (la forma en que están relacionadas entre si las

clases)

Indefinido

Navegable

NO navegable

Navegable por ambos lados

Page 38: UML Diagramas de Clases - CodeCompiling

38

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

Composición: Es una forma más fuerte de la agregación, en la que el todo no puede

existir sin sus partes

¿Cómo se implementan?¿Cuál es la diferencia con las asociaciones?

Page 39: UML Diagramas de Clases - CodeCompiling

39

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

Composición: El todo no puede existir sin las partes

(Ejemplo Anterior)

Composición: Las partes no pueden existir sin el todo

En contradicción con el ejemplo anterior:

¿La parte (La rueda) puede existir sin el

todo?

Page 40: UML Diagramas de Clases - CodeCompiling

40

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

Composición: ¡Las partes NO pueden ser compartidas por

varios todos!

Agregación: ¡Las partes pueden ser compartidas por

varios todos!

Peor aún...

Page 41: UML Diagramas de Clases - CodeCompiling

41

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

Page 42: UML Diagramas de Clases - CodeCompiling

42

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

Page 43: UML Diagramas de Clases - CodeCompiling

43

Diagramas de Clases

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

Page 44: UML Diagramas de Clases - CodeCompiling

44

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

<<interface>> es un estereotipoEditorGrafico es una clase que usa la interfaz

Idibujable, independientemente que la

implemente un Círculo o cualquier otra clase

(Polimorfismo)

Page 45: UML Diagramas de Clases - CodeCompiling

45

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

Page 46: UML Diagramas de Clases - CodeCompiling

46

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 getCentro() { /* de circulo */ } public void setCentro(...) { /* de circulo */ }

public double getRadio() { /* de circulo */ } public void setRadio(...) { /* de circulo */ }}

Page 47: UML Diagramas de Clases - CodeCompiling

47

Diagramas de Clases(Interfaces / Realizaciones)

import java.awt.Rectangle;

public interface IGeometrico {

public double getArea();

public double getPerimetro();

public Rectangle getRectCont();}

public interface IDibujable { public void dibujar();}

Page 48: UML Diagramas de Clases - CodeCompiling

48

Diagramas de Clases(Interfaces / Realizaciones)

List<IDibujable> elementosDibujar;

// ...

for (IDibujable dibujable : elementosDibujar) { // No importa si dibujable es // 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!

Algunos de estos son círculos, otros son rectángulos, estrellas, líneas,

etcétera...Pero todos

implementan la interfaz IDibujable

Page 49: UML Diagramas de Clases - CodeCompiling

49

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

Page 50: UML Diagramas de Clases - CodeCompiling

50

Diagramas de Clases

Ejemplos

Page 51: UML Diagramas de Clases - CodeCompiling

51

Diagramas de Clases(Un ejemplo conceptual)

Modelo de Dominio

Page 52: UML Diagramas de Clases - CodeCompiling

52

Diagramas de Clases(Un ejemplo conceptual)

Page 53: UML Diagramas de Clases - CodeCompiling

53

Diagramas de Clases(Un ejemplo conceptual)

Modelo de Dominio

Page 54: UML Diagramas de Clases - CodeCompiling

54

Diagramas de Clases(Un ejemplo conceptual)

Modelo de Dominio

Page 55: UML Diagramas de Clases - CodeCompiling

55

Diagramas de Clases(Arquitectura de las clases GUI de CLEDA)

ArquitecturaDiseño OO

Page 56: UML Diagramas de Clases - CodeCompiling

56

Diagramas de Clases(Arquitectura del motor de Workflow CledaFlow)

ArquitecturaDiseño OO

Page 57: UML Diagramas de Clases - CodeCompiling

57

Diagramas de Clases

A nivel de implementación

Page 58: UML Diagramas de Clases - CodeCompiling

58

class Dependencias

Dependencia

Escuela

Departamento

InstitutoDeInvestigación

CentroDeInvestigación

LaboratorioDeInvestigación

Postgrado

Facultad/ Núcleo

+tieneDepartamentos 1..*

+tieneEscuelas

1..*

+tieneInstitutos

*

+tieneCentros

*

+tieneLabs

*

+tienePostgrados

*

Diagramas de Clases(Modelo Conceptual)

Page 59: UML Diagramas de Clases - CodeCompiling

59

class películas

Película

- titulo: string = Desconocido- año: char = 0000- duracion: float = 0.0- tipo: TipoPelicula

+ nuevaPelicula() : void- setTitulo(string) : void+ getTitulo() : string- setAño(char) : void+ getAño() : char- setDuracion(float) : void+ getDuracion() : float+ modificaPelicula() : void+ despliegaPelicula() : void+ eliminaPelicula() : void

«enumeration»TipoPelicula

«enum» drama suspenso acción comedia

Estudio

- 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[]

+produce

* producción

+producidaPor

1..*

Diagramas de Clases(Modelo de Implementación)

Page 60: UML Diagramas de Clases - CodeCompiling

60

class Préstamo de equipos

Dependencia

Departamento

Dependencia

Escuela

Personal

Profesor Equipo

Estudiante

Persona

SolicitudDeProfesor SolicitudDeEstudiante

-tieneDepartamentos

1..*

-controladoPor1

-controla *

-profesores 1..*

-secretariaDe 1

-secretaria

1

-secretariaDe1

-secretaria

1

-estudiantes 1..*

-solicitadoPor

*

-solicita

*

-solicita

*

-solicitadoPor

*

-autorizadoPor1 -autoriza *

Diagramas de Clases

Page 61: UML Diagramas de Clases - CodeCompiling

61

class Geometría

DatoGeométrico

- color: TipoColor

«enumeration»TipoColor

«enum» rojo verde negro

«enumeration»TipoRelleno

«enumeration»TipoSombra

Polígono

- relleno: TipoRelleno- sombra: TipoSombra

Punto

- x: float- y: float

Línea

Rectángulo

- ancho: int- largo: int

Polilínea

Arco

- anguloDeInicio: double- anguloDeBarrido: double

-esquinaSuperiorIzquierda

1

-líneas

2..* {ordenado}

-líneas3..*

{ordenado, hasta línea final = de línea inicial}

-de 1

-líneas * -líneas *

-hasta1

Diagramas de Clases

Page 62: UML Diagramas de Clases - CodeCompiling

62

Diagramas de Clases

Lecturas recomendadas:

http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/

(En Inglés)

Page 63: UML Diagramas de Clases - CodeCompiling

63

REFERENCIAS

Martin Fowler, UML Distilled, Pearson Addison-

Wesley 2da. Edición

Booch, Rumbaugh, Jacobson, El Lenguaje Unificado de Modelado,

Pearson Addison-Wesley 1ra. Edición

Page 64: UML Diagramas de Clases - CodeCompiling

64

Gracias

¡Gracias!