El Diagrama de Clases es el diagrama principal para el análisis y diseño. Un diagrama de clases presenta las clases del sistema con sus relaciones estructurales y de herencia. La definición de clase incluye definiciones para atributos y operaciones.
Cada clase se representa en un rectángulo con tres compartimientos:
- nombre de la clase
- atributos de la clase
- operaciones de la clase
Los atributos de una clase no deberían ser manipulables directamente por el resto de objetos. Por esta razón se crearon niveles de visibilidad para los elementos que son:
(-) Privado : es el más fuerte. Esta parte es totalmente invisible (excepto para clases friends en terminología C++) .
(#) Los atributos/operaciones protegidos están visibles para las clases friends y para las clases derivadas de la original.
(+) Los atributos/operaciones públicos son visibles a otras clases (cuando se trata de atributos se está transgrediendo el principio de encapsulación).
Relaciones entre clases:
Los enlaces entre objetos pueden representarse entre las respectivas clases y sus formas de relación son:
Asociación y Agregación (vista como un caso particular de asociación)
Generalización/Especialización.
Las relaciones de Agregación y Generalización forman jerarquías de clases.
Asociación:
La asociación expresa una conexión bidireccional entre objetos. Una asociación es una abstracción de la relación existente en los enlaces entre los objetos. Puede determinarse por la especificación de multiplicidad (mínima...máxima)
Agregación:
La agregación representa una relación parte_de entre objetos. En UML se proporciona una escasa caracterización de la agregación. Esta relación puede ser caracterizada con precisión determinando las relaciones de comportamiento y estructura que existen entre el objeto agregado y cada uno de sus objetos componentes.
Una agregación se podría caracterizar según:Puede el objeto parte comunicarse directamente con objetos externos al objeto agregado? No => inclusiva Si => no inclusiva Puede cambiar La composición del objeto agregado? Si => dinámica No => estática
Diagrama de Clases y 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. Las clases abstractas no son instanciadas.
Generalización:
Permite gestionar la complejidad mediante un ordenamiento taxonómico de clases, se obtiene usando los mecanismos de abstracción de Generalización y/o Especialización. La Generalización consiste en factorizar las propiedades comunes de un conjunto de clases en una clase más general. Los nombres usados: clase padre - clase hija. Otros nombres: superclase - subclase, clase base - clase derivada. Las subclases heredan propiedades de sus clases padre, es decir, atributos y operaciones (y asociaciones) de la clase padre están disponibles en sus clases hijas. La Generalización y Especialización son equivalentes en cuanto al resultado: la jerarquía y herencia establecidas. Generalización y Especialización no son operaciones reflexivas ni simétricas pero sí transitivas. La especialización es una técnica muy eficaz para la extensión y reutilización.
La noción de clase está próxima a la de conjunto. Dada una clase, podemos ver el conjunto relativo a las instancias que posee o bien relativo a las propiedades de la clase. Generalización y especialización expresan relaciones de inclusión entre conjuntos.
Enfocado a nuestro problema.
Por ejemplo en nuestro caso, tenemos identificadas las clases de Personal, Nota, Productos y Proveedores, pero de la clase Nota se desprenden dos subclases que son Tarjeta de crédito y Efectivo. Por lo que esta están agregadas con el diagrama de clase Nota, mientras que esta última está relacionada con el diagrama de clase Personal y con el diagrama de clase Productos, ambas asociasiones son del tipo uno a muchos. El diagrama de clase Productos está ligado con el de Proveedores, tambien con una asociación uno a muchos.