Clase 12a uml_clases

1,036 views
869 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,036
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
76
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Clase 12a uml_clases

  1. 1. 1UMLDiagramas de Clases(UML ilustrado)Universidad de los AndesDemián GutierrezNoviembre 2012
  2. 2. 2Diagramas de Clases(¿Qué Muestran?)La estructura estática del sistema modelado¿simple verdad?¿estructura estática?
  3. 3. 3Diagramas de Clases(¿Qué Muestran?)Se concentran en los elementos del sistemade forma independiente del tiempo(muestran aspectos estáticos y no dinámicos)¿estructura estática?
  4. 4. 4Diagramas de Clases(¿Qué Muestran?)Las clases,las interfaces / atributos de las clases,las relaciones que existen entre las distintasclases del sistemaComparar el software con la ingeniería civil esla peor analogía que puede existir...Pero si se hace tal comparación, losdiagramas de clases serían lo más cercano alos planos estructurales de un ingeniero civil
  5. 5. 5Diagramas de Clases(¿Para qué Sirven?)Realizar la abstracción de un dominio yformalizar los conceptos relacionados almismo (Conceptos / Modelo de Dominio)Definir / Documentar una solución dediseño: la estructura del sistema en términosde clases, objetos y relacionesDefinir / Documentar modelos de datos, enespecial modelos de datos orientados aobjetos (función similar los diagramas ERE)Menorniveldeabstracciónsiempre es necesario conocer el nivel de abstracciónde un diagrama para poder interpretarlo correctamenteimplementaciónconceptos
  6. 6. 6Diagramas de Clases(Programación Orientada a Objetos)La mayoría de los conceptosque se presentan en lassiguientes transparenciasestán relacionados con losconceptos de programaciónorientada a objetos (POO)
  7. 7. 7Diagramas de Clases(Programación Orientada a Objetos)¿Qué es una Clase?
  8. 8. 8Diagramas de Clases(Notación Básica)Clase / Clasificador: Definición de la estructura y elcomportamiento de un conjunto de objetos que tienen(comparten) el mismo patrón estructural y decomportamientoUn ejemplo de una clase “número complejo”:Base de Datos:¿No les suena esto al concepto de tipo de entidad?
  9. 9. 9Diagramas de Clases(Atributos y Métodos)Atributos:Propiedades relevantes de un claseRepresentan su estructuraPueden ser simples o compuestos(primitivos u otras clases)Métodos:Comportamiento asociado a unaclase,“Contrato” asociado a una claseuna clase tiene:¿contrato?luego hablamosde esto
  10. 10. 10Diagramas de Clases(Diagramas de Clases y Código)A nivel de implementación,la relación que existe entre elcódigo y una clase en UMLes muy importante¡Necesito que hablemos elmismo idioma!
  11. 11. 11Diagramas 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 esJava ;-)
  12. 12. 12Diagramas de Clases(Notación Avanzada)Visibilidad:- Privado~ Paquete# Protegido+ PúblicoNombreAtributoValor porDefectoTipo de DatoMultiplicidadTipo deRetornoParámetrosde EntradaNombre delMétodoBase de Datos:Generalmente, cuando se desarrolla un modelo dedatos no se utiliza toda esta complejidad.Por ejemplo, generalmente no se definen métodos
  13. 13. 13Diagramas de Clases(Notación Avanzada)Para los Atributos:[visibilidad] [/] nombre [:tipo] [multiplicidad] [=valor poromisió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 poromisión]Las propiedades pueden una o mas de las siguientes:readOnly, isQuery, Concurrent, Guarded, Sequential, etcétera... o cualquier otra predefinida ...
  14. 14. 14Diagramas de Clases¿Clases y Objetos?Clases y Objetos¿qué es un objeto?
  15. 15. 15Diagramas de Clases¿Clases y Objetos?Clases y Objetos¿qué es una instancia?¿qué es instanciar?
  16. 16. 16Diagramas de Clases¿Clases y Objetos?Instancia:Manifestación concreta de unaabstracción, que puede tener unestado y a la que se le puede aplicarun conjunto de operacionesInstanciación / Instanciar:Proceso de generación o creación deinstancias (objetos) de una clasepedro = new Persona()Objeto:Manifestación concreta de una clase(abstracción)
  17. 17. 17Diagramas 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 muyimportante entre unObjeto y una Clase
  18. 18. 18Diagramas 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”);CrearInstancias(Instanciar)
  19. 19. 19Diagramas de Clases(Parametrizables / Abstractas)Clases Parametrizable:Clases que se puedenparametrizar con uno o más tiposde datos según sea necesarioGenerics en Java,Templates en C++Clases Abstractas:Clases que no tieneninstrumentados / implementadostodos sus métodos
  20. 20. 20Diagramas 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>();
  21. 21. 21Diagramas 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ónpublic abstract double getArea();public abstract double getPerimetro();public abstract double getRectCont();public abstract double getDibujar();}
  22. 22. 22Diagramas de Clases(Herencia / Especialización / Generalización)Generalización:Relación de tipo ES-UN(A), abstracciones degeneralización / especialización de clasesHerencia:Propiedad que tienen lasclases de heredar de sussuper-clases estructuray/o comportamiento(Simple / Múltiple)
  23. 23. 23Diagramas de Clases(Herencia / Especialización / Generalización)Clase PadreClase HijaRelación deHerencia(“es una”)¿Herencia Simple o Múltiple?
  24. 24. 24Diagramas 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->PersonaHerencia Múltiple:Preparador->Empleado->Estudiante¿Cuáles sonVálidos?
  25. 25. 25Diagramas de Clases(Herencia / Especialización / Generalización)public abstract class Figura {public abstract double calcArea ();public abstract void dibujar (Canvas canvas);}public class Rectanguloextends Figura {// ...}public class Cuadradoextends Rectangulo {// ...}public class Elipseextends Figura {// ...}public class Circuloextends Elipse {// ...}
  26. 26. 26Diagramas de Clases(Herencia / Especialización / Generalización)Herencia:Disjunta / TraslapadaTotal / Parcialesto se usa principalmente en el modelado de datosla mayoría de los lenguajes de programación no lo permiten
  27. 27. 27Relaciones (Vínculos)¿asociaciones / relaciones?¿1:1, 1:N y N:M?se puede vermejor con un ejemplo
  28. 28. 28Relaciones (Vínculos)1:NDepartamentode ControlDepartamentode ComputaciónProfesores DepartamentosDepartamentode Investigaciónde Operaciones¿Con cuántos profesores puede estar asociado un departamento?¿Y al contrario?Vínculo / RelaciónTrabaja En / Tiene
  29. 29. 29Vínculo / RelaciónDicta / Es dictada porRelaciones (Vínculos)N:MProgramación10Bases de DatosProfesores MateriasProgramación20¿Con cuántos profesores puede estar asociado una materia?¿Y al contrario?
  30. 30. 30Relaciones (Vínculos)1:1Vínculo / RelaciónEs novia de / Es novio deChicas Chicos¿Con cuántos Chicos está asociada una Chica en particular?¿Y al contrario?
  31. 31. 31Diagramas 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?
  32. 32. 32Diagramas 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;}
  33. 33. 33Diagramas 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;}
  34. 34. 34Diagramas de Clases(Relaciones / Vínculos / Asociaciones)N:M¿hay otra forma de implementarlo?
  35. 35. 35Diagramas de Clases(Relaciones / Vínculos / Asociaciones)Una relación muchos a muchos se puede vercomo dos relaciones uno a muchos
  36. 36. 36Diagramas 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 relacionadasprivate Estudiante estudianteRef;private Asignatura asignaturaRef;}public class Asignatura {// Una lista de EstAsigRelacion (Una clase relación)private List<EstAsigRelacion> estAsigRelacionList;}
  37. 37. 37Diagramas 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ónprivate double nota;private int asistencias// referencias cruzadas a// las dos clases relacionadasprivate Estudiante estudianteRef;private Seccion seccionRef;}public class Seccion {// Una lista de Nota (Una clase asociación)private List<Nota> notaList;}
  38. 38. 38Diagramas 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;}
  39. 39. 39Diagramas de Clases(Asociaciones / Navegabilidad)Navegabilidad:Permite definir qué lado de la asociación esaccesible desde el otro ladoIndefinidoNavegableNOnavegableNavegable porambos lados
  40. 40. 40Diagramas de Clases(Agregación / Composición)“una asociación normal entre dos clases representa unarelación estructural entre iguales, es decir, ambas clasesestá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 tipotodo/parte, en la cual una de las clases representa un todoy la otra una parte del todo”*
  41. 41. 41Diagramas de Clases(Agregación / Composición)Agregación:Es una relación en la que una de las clases representa untodo y la otra representa parte de ese todoUna agregación representa una relación de tipo “tiene un”
  42. 42. 42Diagramas de Clases(Agregación / Composición)“Precise semantics of shared aggregation varies byapplication area and modeler”**Tomado de la versión 2.2 del estándar de UMLCuidado:En muchos casos las agregaciones (y lascomposiciones como veremos más adelante), puedenser fuente de mucha confusión
  43. 43. 43Diagramas 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 todoEl todo es responsable del ciclo de vida de las partesobjeto“compuesto”objeto“componente”
  44. 44. 44Diagramas de Clases(Agregación / Composición)compositeobjectcomposedobject“the composite object has responsibility for the existenceand 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
  45. 45. 45Diagramas de Clases(Agregación / Composición)Composición: ¡Las partes NOpueden ser compartidas porvarios todos!Agregación: ¡Las partespueden ser compartidas porvarios todos!peor aún¿No hay una aparente contradicción entreRectángulo, Circulo y la composición con Punto?
  46. 46. 46Diagramas de Clases(Agregación / Composición)En realidad, si se piensa en términos deinstancias no hay ninguna contradicción
  47. 47. 47Diagramas de Clases(Dependencia)Dependencia:Relación en la que una clase necesita (requiere) a otra para poderfuncionar (esto no implica necesariamente una asociación)La clase personadepende de laclase teléfonoSi se borra unalas clases de ladependencia,¿en qué caso seproduce un errorde compilación?
  48. 48. 48Diagramas de Clases¿qué es una interfaz?¿cuál es la Interfaz deuna clase?
  49. 49. 49Diagramas de Clases(Interfaces / Realizaciones)Interfaz (desde el punto de vista de POO):Todas los métodos y atributos públicos que exporta una claseEl “contrato” por medio del cual se accede/utiliza una claseInterfaz (desde el punto de vista de UML):Clase/Tipo asociado que describe (no implementa) uncomportamiento público/visible
  50. 50. 50Diagramas de Clases(Interfaces / Realizaciones)La interfaz IGeometrico esimplementada / realizada tantopor Círculo como porRectánguloDesde el punto de vista dePOO, tanto Círculo comoRectángulo son objetos de tipoIGeometrico“Contrato”“Contrato”
  51. 51. 51Diagramas 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 sonVálidos?
  52. 52. 52Diagramas de Clases(Interfaces / Realizaciones)<<interface>> es un estereotipoEditorGrafico es una claseque usa la interfazIdibujable,independientemente que laimplemente un Círculo ocualquier otra clase(Polimorfismo)¡El acto de magia de las interfaces y el polimorfismo!
  53. 53. 53Diagramas 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 */ }}
  54. 54. 54Diagramas 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();}
  55. 55. 55Diagramas 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úndibujable.dibujar();}¡El acto de magia de las interfaces y el polimorfismo!Algunos de estosson círculos, otrosson rectángulos,estrellas, líneas,etcétera...Pero todosimplementan lainterfaz IDibujable
  56. 56. 56Gracias¡Gracias!

×