‒ Relaciones entre clases.
Dentro de un diagrama de clases en UML, se presentan las siguientes relaciones entre clases: Dependencia, Agregación, Composición, Generalización y Realización.
En los capítulos anteriores ya se vieron las relaciones de Generalización y Realización, pasaré a explicarlos para entender la diferencia con las otras.
Una Generalización es una relación de derivación en la cual una clase deriva de otro sus atributos y métodos. Su implementación se hace a través de la herencia, tal como se vio en los ejemplos sobre las clases TComplejo y TReal (Ver Capítulo 10.5), en donde TReal, deriva de TComplejo o dicho de otro modo TReal hereda los atributos y métodos de TComplejo. A esta relación se le puede asociar la frase “... es un ...”, ya que podemos decir que TReal es un TComplejo.
La Realización es una relación, en la cual una clase debe poner en practica o debe realizar el comportamiento especificado por otra clase, esta relación se puede implementar con clases abstractas, como en los ejemplos de las clases TComplejo y TNumero, (Ver Capítulo 11.3). La clase TComplejo con la clase TNumero, tienen un relación de realización. A esta relación se le puede asociar con la frase “... realiza lo que indica ...”, ya que podemos decir que TComplejo realiza lo que indica TNumero.
La Dependencia, es una relación que nos indica que una clase usa a otra clase, la forma de implementarlo consiste en hacer pasar como parámetro una instancia de la clase a los métodos de la clase que la necesiten, como se vio en el primer ejemplo de la clase TComplejo (Ver Capítulo 10.2), en donde se usa la misma clase TComplejo, para realizar las operaciones de Multiplicación y Adición, en el cuál el método Multiplicación tiene como parámetro a un objeto de la clase de TComplejo. A esta relación se le puede asociar con la frase “... usa un ...”, con lo que podemos decir siguiendo el ejemplo, que TComplejo usa una instancia de TComplejo.
La Agregación, es una relación en la que una clase tiene otra clase dentro de la clase. En esta relación la clase que contiene otras clases se conoce como clase contenedora. La clase que esta dentro de una clase contenedora, tiene un ciclo de vida independiente de la clase contenedora, es decir la instancia de esta clase no es destruido cuando una instancia de la clase contenedora es destruido. La forma de implementarlo es usando atributos que sean instancias u objetos de una clase. A este tipo de relaciones se les puede asociar con la frase “... tiene un ...”. Este tipo de relación no se vio en los capítulos anteriores, con lo que a continuación se da el siguiente ejemplo, este ejemplo es una versión modificada del ejemplo visto en en el capítulo 5.2, específicamente el 2do código fuente, pero antes se muestra la unidad ListaReales que usará el programa de ejemplo.
Este programa contiene una clase que implementa una tabla de frecuencias estadística, en donde dentro de esta clase se implementan las frecuencias absolutas (ni), frecuencias relativa (hi) y frecuencias acumuladas (Ni), que son instancias de la clase TListaReales. Como se puede observar las frecuencias de esta tabla es decir las instancias ni, hi, NiMenorQ, son creadas desde fuera de la instancia TablaFrecuencias, para luego ser introducidas a la instancia, con el uso de su constructor. Es importante entender esta particularidad ya que la siguiente relación que explicaré es muy similar a esta y sólo se diferencia en como se crean las instancias que están dentro de la clase contenedora que en este caso es la clase TTablaFrecuencias.
La Composición, es una relación muy similar a la agregación en la que una clase posee otra clase dentro de la clase. En esta relación la clase que esta dentro de una clase contenedora, no tiene un ciclo de vida independiente de la clase que lo contiene, es decir la instancia de esta clase es destruido cuando una instancia de la clase contenedora es destruido. La forma de implementarlo es igual que la agregación, pero las instancias son creadas generalmente con el constructor de la clase contenedora y destruidos cuando la instancia de la clase contenedora es destruido. A este tipo de relaciones se les puede asociar con la frase “... posee un ...”. Como ejemplo se tomara el código fuente anterior, pero modificando la clase TTablaFrecuencias, para que en este caso las frecuencias que son instancia de la clase TListaReales, se creen dentro de la instancia TablaFrecuencias.
Cómo se puede observar en este ejemplo, el constructor de la clase TTablaFrecuencias se encargará de crear las instancias de TListaReales.
Última revisión: 03/07/2014.