56
1 UML Diagramas de Clases (UML ilustrado) Universidad de los Andes Demián Gutierrez Noviembre 2012

Clase 12a uml_clases

Embed Size (px)

Citation preview

Page 1: Clase 12a uml_clases

1

UMLDiagramas de Clases

(UML ilustrado)

Universidad de los AndesDemián GutierrezNoviembre 2012

Page 2: Clase 12a uml_clases

2

Diagramas de Clases(¿Qué Muestran?)

La estructura estática del sistema modelado

¿simple verdad?

¿estructura estática?

Page 3: Clase 12a uml_clases

3

Diagramas de Clases(¿Qué Muestran?)

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

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

¿estructura estática?

Page 4: Clase 12a uml_clases

4

Diagramas de Clases(¿Qué Muestran?)

Las clases,

las interfaces / atributos de las clases,

las relaciones que existen entre las distintasclases del sistema

Comparar el software con la ingeniería civil esla peor analogía que puede existir...

Pero si se hace tal comparación, los diagramas de clases serían lo más cercano a los planos estructurales de un ingeniero civil

Page 5: Clase 12a uml_clases

5

Diagramas de Clases(¿Para qué Sirven?)

Realizar la abstracción de un dominio y formalizar los conceptos relacionados al mismo (Conceptos / Modelo de Dominio)

Definir / Documentar una solución de diseño: la estructura del sistema en términos

de clases, objetos y relaciones

Definir / Documentar modelos de datos, en especial modelos de datos orientados a

objetos (función similar los diagramas ERE)

Men

or n

ivel de ab

str acción

siempre es necesario conocer el nivel de abstracciónde un diagrama para poder interpretarlo correctamente

imp

lem

enta

ció

nco

nc

ep

tos

Page 6: Clase 12a uml_clases

6

Diagramas de Clases(Programación Orientada a Objetos)

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)

Page 7: Clase 12a uml_clases

7

Diagramas de Clases(Programación Orientada a Objetos)

¿Qué es una Clase?

Page 8: Clase 12a uml_clases

8

Diagramas de Clases(Notación Básica)

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 9: Clase 12a uml_clases

9

Diagramas de Clases(Atributos y Métodos)

Atributos:

Propiedades relevantes de un claseRepresentan su estructura

Pueden ser simples o compuestos (primitivos u otras clases)

Métodos:

Comportamiento asociado a una clase,

“Contrato” asociado a una clase

una clase tiene:

¿contrato?luego hablamos

de esto

Page 10: Clase 12a uml_clases

10

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

¡Necesito que hablemos el mismo idioma!

Page 11: Clase 12a uml_clases

11

Diagramas de Clases(Diagramas de Clases y Código)

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 12: Clase 12a uml_clases

12

Diagramas de Clases(Notación Avanzada)

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 13: Clase 12a uml_clases

13

Diagramas de Clases(Notación Avanzada)

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 14: Clase 12a uml_clases

14

Diagramas de Clases¿Clases y Objetos?

Clases y Objetos

¿qué es un objeto?

Page 15: Clase 12a uml_clases

15

Diagramas de Clases¿Clases y Objetos?

Clases y Objetos

¿qué es una instancia?

¿qué es instanciar?

Page 16: Clase 12a uml_clases

16

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

Instanciación / Instanciar:

Proceso de generación o creación de instancias (objetos) de una clase

pedro = new Persona()

Objeto:

Manifestación concreta de una clase (abstracción)

Page 17: Clase 12a uml_clases

17

Diagramas de Clases¿Clases y Objetos?

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 unObjeto y una Clase

Page 18: Clase 12a uml_clases

18

Diagramas de Clases¿Clases y Objetos?

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

stanc ias (In

s tanciar )

Page 19: Clase 12a uml_clases

19

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

Page 20: Clase 12a uml_clases

20

Diagramas de Clases(Parametrizables / Abstractas)

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: Clase 12a uml_clases

21

Diagramas de Clases(Parametrizables / Abstractas)

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: Clase 12a uml_clases

22

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)

Page 23: Clase 12a uml_clases

23

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

Clase Padre

Clase Hija

Relación de Herencia

(“es una”)

¿Herencia Simple o Múltiple?

Page 24: Clase 12a uml_clases

24

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

01) Persona p1 = new Persona();02) Persona p2 = new Estudiante();03) Persona p3 = new Empleado();04) Persona p4 = new Preparador();05) Empleado e1 = new Empleado();06) Empleado e2 = new Preparador();07) Estudiante s1 = new Estudiante(); 08) Estudiante s2 = new Preparador();09) Preparador r1 = new Preparador();10) Empleado e3 = new Persona();11) Estudiante s3 = new Persona();12) Preparador r2 = new Persona();13) Preparador r3 = new Empleado();14) Preparador r4 = new Estudiante();

Herencia Simple: Estudiante->Persona

Herencia Múltiple: Preparador->Empleado->Estudiante

¿Cuáles son Válidos?

Page 25: Clase 12a uml_clases

25

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

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 26: Clase 12a uml_clases

26

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

Herencia:

Disjunta / Traslapada

Total / Parcial

esto se usa principalmente en el modelado de datosla mayoría de los lenguajes de programación no lo permiten

Page 27: Clase 12a uml_clases

27

Relaciones (Vínculos)

¿asociaciones / relaciones?¿1:1, 1:N y N:M?

se puede vermejor con un ejemplo

Page 28: Clase 12a uml_clases

28

Relaciones (Vínculos)1:N

Departamentode Control

Departamentode Computación

Profesores Departamentos

Departamentode Investigaciónde Operaciones

¿Con cuántos profesores puede estar asociado un departamento?¿Y al contrario?

Vínculo / RelaciónTrabaja En / Tiene

Page 29: Clase 12a uml_clases

29

Vínculo / RelaciónDicta / Es dictada por

Relaciones (Vínculos)N:M

Programación10

Bases de Datos

Profesores Materias

Programación20

¿Con cuántos profesores puede estar asociado una materia?¿Y al contrario?

Page 30: Clase 12a uml_clases

30

Relaciones (Vínculos)1:1

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

Chicas Chicos

¿Con cuántos Chicos está asociada una Chica en particular?¿Y al contrario?

Page 31: Clase 12a uml_clases

31

Diagramas de Clases(Relaciones / Vínculos / Asociaciones)

Asociaciones:

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

¿cómo se implementan?

Page 32: Clase 12a uml_clases

32

Diagramas de Clases(Relaciones / Vínculos / 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 33: Clase 12a uml_clases

33

Diagramas de Clases(Relaciones / Vínculos / 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 34: Clase 12a uml_clases

34

Diagramas de Clases(Relaciones / Vínculos / Asociaciones)

N:M

¿hay otra forma de implementarlo?

Page 35: Clase 12a uml_clases

35

Diagramas de Clases(Relaciones / Vínculos / Asociaciones)

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

Page 36: Clase 12a uml_clases

36

Diagramas de Clases(Relaciones / Vínculos / 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 37: Clase 12a uml_clases

37

Diagramas de Clases(Relaciones / Vínculos / 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 38: Clase 12a uml_clases

38

Diagramas de Clases(Relaciones / Vínculos / 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 39: Clase 12a uml_clases

39

Diagramas de Clases(Asociaciones / Navegabilidad)

Navegabilidad:

Permite definir qué lado de la asociación esaccesible desde el otro lado

Indefinido

Navegable

NO navegable

Navegable por ambos lados

Page 40: Clase 12a uml_clases

40

Diagramas de Clases(Agregación / Composició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”*

*Booch, Rumbaugh, Jacobson, El Lenguaje Unificado de Modelado, Pearson Addison-Wesley 1ra. Edición

“en algunos casos, se desea modelar una relación de tipo todo/parte, en la cual una de las clases representa un todo

y la otra una parte del todo”*

Page 41: Clase 12a uml_clases

41

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”

Page 42: Clase 12a uml_clases

42

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

“Precise semantics of shared aggregation varies by application area and modeler”*

*Tomado de la versión 2.2 del estándar de UML

Cuidado:En muchos casos las agregaciones (y las

composiciones como veremos más adelante), pueden ser fuente de mucha confusión

Page 43: Clase 12a uml_clases

43

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

Composición:

Es una forma más fuerte de la agregación, en la quelas partes no pueden existir sin el todo

El todo es responsable del ciclo de vida de las partes

objeto “compuesto”

objeto “componente”

Page 44: Clase 12a uml_clases

44

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

compositeobject

composedobject

“the composite object has responsibility for the existence and storage of the composed objects (parts)”

En este caso el estándar es más claro

*Tomado de la versión 2.2 del estándar de UML

Page 45: Clase 12a uml_clases

45

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

¿No hay una aparente contradicción entre Rectángulo, Circulo y la composición con Punto?

Page 46: Clase 12a uml_clases

46

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

En realidad, si se piensa en términos de instancias no hay ninguna contradicción

Page 47: Clase 12a uml_clases

47

Diagramas de Clases(Dependencia)

Dependencia:

Relación en la que una clase necesita (requiere) a otra para poder funcionar (esto no implica necesariamente una asociación)

La clase persona depende de la clase teléfono

Si se borra una las clases de la dependencia,

¿en qué caso se produce un error de compilación?

Page 48: Clase 12a uml_clases

48

Diagramas de Clases

¿qué es una interfaz?

¿cuál es la Interfaz de una clase?

Page 49: Clase 12a uml_clases

49

Diagramas de Clases(Interfaces / Realizaciones)

Interfaz (desde el punto de vista de POO):

Todas los métodos y atributos públicos que exporta una clase

El “contrato” por medio del cual se accede/utiliza una clase

Interfaz (desde el punto de vista de UML):

Clase/Tipo asociado que describe (no implementa) un comportamiento público/visible

Page 50: Clase 12a uml_clases

50

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

“Contrato”

“Contrato”

Page 51: Clase 12a uml_clases

51

Diagramas de Clases(Interfaces / Realizaciones)

01) IGeometrico g1 = new IGeometrico();02) IDibujable d1 = new IDibujable();03) IGeometrico g2 = new Rectangulo();04) IGeometrico g3 = new Circulo();05) IDibujable d2 = new Rectangulo();06) IDibujable d3 = new Circulo();06) g2.getArea();07) g2.dibujar();08) g2.getP1();

¿Cuáles son Válidos?

Page 52: Clase 12a uml_clases

52

Diagramas de Clases(Interfaces / Realizaciones)

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

Idibujable, independientemente que la

implemente un Círculo o cualquier otra clase

(Polimorfismo)

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

Page 53: Clase 12a uml_clases

53

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 54: Clase 12a uml_clases

54

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 55: Clase 12a uml_clases

55

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 56: Clase 12a uml_clases

56

Gracias

¡Gracias!