Your SlideShare is downloading. ×
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
UML y los diagramas de clases
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

UML y los diagramas de clases

2,741

Published on

Published in: Technology
2 Comments
8 Likes
Statistics
Notes
No Downloads
Views
Total Views
2,741
On Slideshare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
0
Comments
2
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. UML y los Diagramas de Clases Javier Garzás (Actualizado Enero 2007)
  • 2. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Diagramas de Clases §  Dentro de los métodos OO, es la técnica central y, en la mayoría de los casos, la más importante. §  Un diagrama de clases describe: §  Los tipos de objetos en el sistema §  Las relaciones estáticas que existen entre ellos §  Los atributos y operaciones de las clases §  Las restricciones a las clases y a sus asociaciones.
  • 3. Conceptos básicos y de notación
  • 4. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Diagrama de Clases Existen 3 formas de ver un diagrama de clases (Cook & Daniels 1994) Conceptual: representan conceptos de dominio, relacionados con las clases del mismo. Puede no existir un “mapeo” directo. Independientes y con poco detalle. Especificación: donde se buscan las interfaces software (aún no la implementación) Implementación: con máximo nivel de detalle Poco recomendables, difíciles de mantener
  • 5. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Clases... Notación Gráfica §  En UML las clases se representa mediante un rectángulo que puede estar dividido en tres partes. Perro # raza # colorPelo # nombre + guardarHueso() + marcaTerritorio() + orinar() Atributos Nombre Servicios
  • 6. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Clases... Encapsulación §  Algunas ventajas: -  Se protegen los datos. -  Se posibilita una reducción del acoplamiento §  Los atributos de una clase NUNCA, NUNCA, NUNCA deben ser accesibles por objetos de otra clase.
  • 7. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Clases... Encapsulación §  Los niveles de encapsulación están heredados de los niveles de C++: -  “-” Privado: es el más fuerte. Esta parte es totalmente invisible (excepto para los “friends” en terminología C++) -  “#” Protegido: visibles para los friends y para las clases hijas de una superclase. -  “+” Pública: visibles a todas las clases.
  • 8. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Clases... Encapsulación §  Ejemplo: Reglas de visibilidad + Atributo público : int # Atributo protegido : int - Atributo privado : int + "Operación pública" # "Operación protegida" - "Operación privada"
  • 9. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Clases... Encapsulación §  Heurística: Perro # raza + colorPelo # nombre + guardarHueso() + marcaTerritorio() + orinar() !
  • 10. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Estereotipos @  Creados por Wirfs - Brock (1990) @  Sugieren cierto nivel de responsabilidad a las clases @  Jacobson en 1994 clasificó las clases con tres clasificadores (boudary, control y entity), bien aplicados son los coordinators de Wirfst - Brock @  En UML se muestran entre comillas españolas <<>>, pero también pueden definirse mediante iconos especiales. @  Definen muchas de las restricciones de UML
  • 11. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Clases Abstractas §  Las clases y servicios abstractos se notan mediante formato itálico §  También puede usarse la restricción {abstract}, junto al nombre de la clase, evitándose así el escribir en itálica §  Las asociaciones entre una clase “cliente” y un tipo (como es una clase abstracta o una interface) se representan mediante dependencias:
  • 12. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Interfaces §  Son clases sin ninguna implementación. Declaran operaciones (servicios) pero NI métodos NI atributos. Pueden declararse mediante clases abstractas que no tienen ningún método. §  Existen dos posibles notaciones: @  Mediante un estereotipo <<interface>> @  Simbolizando el estereotipo mediante un circulo.
  • 13. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Interfaces §  Como las clases abstractas, son tipos y, por tanto, sus clientes se relacionan por dependencias. §  La clase que implementa una interfaz (subtipos) se relaciona mediante “refinamiento” (existen dos notaciones para el refinamiento).
  • 14. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Clases Abstractas e Interfaces ClaseAbstracta ClaseQueImplementa OtraInterface ClienteDeUnTipo UnaClaseInterface < <Interfac e>>
  • 15. Relaciones entre Clases
  • 16. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Relaciones entre clases §  Los enlaces a nivel de objetos pueden verse en el mundo de las clases §  Las dos principales relaciones estáticas son:    Asociación    Generalización
  • 17. Asociación
  • 18. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Asociación §  Representan relaciones entre instancias de clases §  Desde la perspectiva conceptual representan relaciones entre clases. Perro Amo
  • 19. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases §  Nombre §  Rol(es) §  Multiplicidad 1 Uno y sólo uno 0..1 Cero o uno M..N De M a N (enteros naturales) * De cero a varios 0..* De cero a varios 1..* De uno a varios La multiplicidad puede establecer restricciones de existencia para los objetos de las clases asociadas Elementos de una Asociación
  • 20. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Elementos de una Asociación Perro Amo 10..* es_detiene Posesión 0..* 1 EquipoFutbol Jugador 2211 juega lo_forman 22
  • 21. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Asociación y los estratos del diseño En las asociaciones también se notan las diferentes formas de ver un diagrama de clases (conceptual, especificación implementación), así, en fases cercanas al diseño, por lo general... •  Se definen direccionalidades •  Se decide la forma de implementar las cardinalidades: • A n mediante Vectores. • A 1, 0 mediante apuntadores. • Etc.
  • 22. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Implementación de Asociaciones AmoPerro 1..*1..* Public class Amo { Vector misPerros = new Vector(); ... misPerros.addElement(new Perro(“Kika”); ... }
  • 23. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Asociación Cualificada §  Un objeto y un cualificador identifican a un único objeto en la asociación (forma una clave compuesta) §  Reduce la multiplicidad del rol opuesto. La nueva multiplicidad es 0 ó 1 (si hay mapeo para todos los valores del dominio del cualificador) Aerolínea Viajeronro_viajero * 0..1 Tablero Ajedrez fila columna 1 1 Cuadro
  • 24. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases §  Representa un objeto compuesto por otros objetos §  Relación parte_de §  Podemos tener agregaciones (paso por referencia) y composiciones (paso por valor) Caso especial… la Agregación Camada Cachorros Polígono Punto contiene 3.. *1 {ordenado}
  • 25. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Asociaciones de clase §  Aparecen cuando la propia asociación tiene atributos §  Son raras y poco frecuentes §  ¿Os recuerda en algo a los E/R de Chen? Goles Jugador P artido 0..*22 Juega 22 0..*
  • 26. Jerarquías
  • 27. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Jerarquías de Clases Animal Perro Pastores Compañia Caza Defensa Caniche +General +Específico
  • 28. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Jerarquías de Clases §  Una posible clasificación: §  Particionamiento del espacio de objetos Especialización Estática §  Particionamiento del espacio de estados de los objetos Especialización Dinámica
  • 29. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Jerarquías de Clases §  En la Especialización Estática §  El objeto es instancia desde su creación de la subclase y la superclase en las que fue creado. §  Esta pertenencia es inmutable §  Un objeto sólo puede ser instancia de una subclase en una Especialización Estática
  • 30. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Jerarquías de Clases §  En la Especialización Dinámica: §  Un objeto puede migrar durante su vida entre las distintas subclases de la especialización. §  La migración puede definirse en función de su estado o de los eventos que le acontezcan
  • 31. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Jerarquías de Clases §  Un ejemplo de Especialización Estática: Perro Caniche PastorAlemán
  • 32. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Jerarquías de Clases §  Un ejemplo de Especialización Dinámica: Perro Cachorro Adulto
  • 33. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Jerarquías de Clases §  Puede haber más de una especialización estática o dinámica a partir de la misma superclase Telefono M ovil Fijo Correcto Estropeado
  • 34. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Jerarquías de Clases §  Clasificación no equilibrada: vehiculo terrestre ca mio n coche Harley Davidson
  • 35. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Cómo no usar la herencia Manzana Tarta TartaDe Manzana
  • 36. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Regla de herencia: “Es_un” Regla #1: El ES_UN “Nunca haga que B herede de A a no ser que pueda argumentarse de alguna forma que se puede ver toda instancia de la clase B como instancia de la clase A” Todo B es_un A Problema: Es condición necesaria pero no suficiente ¿Es toda cuenta de ahorros una cuenta corriente?
  • 37. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases ¿Tener o Ser? §  Para decidir entre las dos posibles relaciones entre módulos, la regla es: § “Tener”, para asociaciones. § “Es”, para la herencia. Fácil elección ¿no?
  • 38. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases ¿Tener o Ser? §  Por ejemplo: §  Todo Alumno de este curso es un Consultor de Altran §  En todo alumno de este curso hay un consultor de Altran §  Todo alumno de este curso tiene un cierto componente de consultor de Altran… ¡EL ES puede parafrasearse SIEMPRE como TIENE! ¿Y al contrario?
  • 39. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Entonces… ¿cómo saber qué aplicar? Regla #2: Del Cambio “Nunca modele una relación mediante herencia si los componentes objeto correspondientes pudieran tener que ser modificados en tiempo de ejecución”
  • 40. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Regla del cambio §  Recordemos que la herencia es una relación entre clases §  Si B hereda de A, todo objeto de B es un objeto A. §  Los objetos NO pueden modificar la anterior propiedad… ¡es una relación estructural! §  La relación “tiene” permite el dinamismo en tiempo de ejecución.
  • 41. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Regla del Polimorfismo Regla #3: Del Polimorfismo “La herencia es adecuada para describir estructuras donde los componentes más generales pueden tener la necesidad de asociarse a otros más específicos”
  • 42. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Ejercicio §  Se pretende modelar en UML un sistema para crear ventanas gráficas en una interfaz de usuario. §  Este sistema debe contemplar: §  La posibilidad de que las ventanas creadas se ejecuten en distintas plataformas (Linux, Windows, etc.). §  Que los clientes de estas ventanas estén mínimamente acoplados a una ventana concreta. Las ventanas podrán ser frames, windows, etc.
  • 43. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Solución 1 Ventana VentanaGeneral Ventana Plataforma Com ponentes Genericos de cualquier ventana Componentes específicos de una ventana para una plataforma (UNIX, Windows, etc.) Existen diferentes variantes de esta clase, una para cada plataform a, todas con el m ism o nom bre y alm acenadas en distintos directorios, tom andose en cada caso la adecuada
  • 44. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Problemas a la solución 1 §  Se puede violar una de las reglas anteriores… una vez que una ventana es una ventana “Linux” NUNCA dejará de serlo §  Esto puede no ser tan malo… las ventanas Linux no creo que pretendan transformarse en Windows §  Pero si en vez de plataformas fuesen formatos (*.pdf, *.ppt o *.ps) la cosa podría se mas sería
  • 45. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Solución 2 VentanaGeneral VentanaLinux Ventana VentanaWindows
  • 46. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Problemas a la solución 2 §  ¿Y si ahora queremos una ventana para OS/ 2? !
  • 47. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Solución 3 VentanaGeneral VentanaLinuxVentanaWindows Ventana ImplementacionesVentana §  De todas formas no habría hecho falta pensar nada… es una versión del pattern Bridge (Gamma et al 95)
  • 48. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Regla de la Taxomanía Regla #4: De la Taxomanía “Al heredar, una clase debe introducir una característica, redeclarar una característica heredada o añadir un nuevo comportamiento”
  • 49. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Ejemplo de una Taxomanía Persona Hombre Mujer Joven Medio Anciano Rubio Moreno Castaño El propósito de la herencia es ayudar a manejar la complejidad y no introducir complejidad al modelado. Los niveles inútiles son contraproducentes … §  Gestionar los prestamos de la biblioteca de Altran
  • 50. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Primar la simplicidad Persona - m ujer : Boole an - edad : Integer - colorPelo : Integer §  Para el anterior caso hubiese bastado con:
  • 51. Diagramas de Objetos
  • 52. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Diagramas de Objetos §  Los Diagramas de Clases y los Diagramas de Objetos pertenecen a dos vistas complementarias del modelo §  Un Diagrama de Clases muestra la abstracción de una parte del dominio §  Un Diagrama de Objetos representa una situación concreta del dominio §  Cada objeto es instancia de una clase. §  Ciertas clases (clases abstractas) no pueden ser instanciadas
  • 53. Javier Garzás, Proceso de desarrollo OO con UML – Diagramas de Clases Diagramas de Objetos §  Cada enlace es instancia de una relación §  Los enlaces vinculan objetos, las asociaciones vinculan clases §  Los Diagramas de objetos que contienen objetos y enlaces son instancias de los Diagramas de Clases que contienen clases y asociaciones §  Debe existir coherencia entre ambos

×