miércoles, 28 de abril de 2010

Relaciones entre clases

Tipos de relaciones que se pueden dar entre clases:

- Unidireccional: en un único sentido.


- Bidireccionales: en ambos sentidos (sin flecha).

Lo normal es que sean bidireccionales.


Relación de asociación:

Cuando se establece una relación entre objetos, en términos de programación orientada a objetos se dice que se produce una asociación.

El papel o rol que juega cada clase en la relación siempre va a indicarse gráficamente en los extremos de la relación.


Multiplicidad de una asociación:

Indicara el grado con el que una clase se asocia a otra, por ejemplo, cuántas conexiones van a existir entre un objeto de la clase A con un objeto de la clase B y viceversa, a esto se le llama “cardinalidad”.

La cardinalidad entre dos clases, al igual que el Rol que la clase juega en la relación, la vamos a representar gráficamente en los extremos de la relación.
Los diferentes tipos de cardinalidad que podemos indicar en una relación son:
• Uno a uno (1,1): un objeto de tipo A se relaciona uno a uno con objetos de tipo B.
• Uno a muchos (1,*): indica que un objeto A puede relacionarse con uno o varios objetos de tipo B.
• Muchos a muchos (*): indica un objeto de tipo A puede relacionarse con varios objetos de tipo B.
• Opcional (0,1): Indica que el objeto de tipo A puede estar o no relacionado con un objeto de tipo B.
• Opcional múltiple (0,*): Otro tipo de cardinalidad opcional pero en este caso se da que un objeto de tipo A puede estar ninguna o muchas veces relacionado con objetos de tipo B.
• Número fijo (n): En este caso indicamos un número de veces concreto que se relaciona un objeto de tipo A con objetos de tipo B.


Grado de una asociación:

Se determina por el número de clases conectadas por la misma asociación. Las asociaciones pueden ser:
- Asociaciones binarias: las que solo relacionan dos clases.
- Asociaciones terciarias: Las que relacionan tres clases.
- Asociaciones n-Anarias: donde se relacionan “n” clases.


Asociaciones Reflexivas:

Son las que relacionan distintos objetos de una misma clase. Un ejemplo:

Los ocupantes de un automóvil. Aquí podemos establecer relaciones entre objetos de la misma clase de la siguiente forma: un ocupante puede ser conductor del automóvil y habrá otros ocupantes que pueden ser pasajeros del automóvil.

Atributos de liga o asociación:

Este tipo de atributos son los que no pertenecen a ninguna de las clases que se asocian sino que son atributos de la asociación que hay entre ellas, es decir son propiedad de la asociación.

Establecemos atributos sobre las relaciones cuando el atributo no pertenece a ninguna de las clases que participan en la relación y sí a la relación.


Relación de agregación:

En este tipo de relaciones el objeto base (el que agrega a otros) utiliza a otros objetos para su funcionamiento. Es un tipo de relación dinámica, en donde el tiempo de vida del objeto incluido es independiente del que lo incluye ya que estos pueden existir sin que el objeto base exista.

Un ejemplo de agregación puede ser el siguiente: Una Red de Computadoras se puede considerar un ensamblado, donde las Computadoras son sus componentes.

En esta relación el objeto utilizado es independiente del que lo usa.


Relación de composición:

En este tipo de relación se da a entender que el objeto base se construye a partir de otros objetos incluidos. Es un tipo de relación estática, en donde el tiempo de vida de los objetos incluidos está condicionado por el tiempo de vida del objeto que los incluye, ya que éstos forman parte de él.

Un ejemplo de composición sería: Un Ordenador como ensamblado, donde el microprocesador y el disco duro son sus componentes.
• El microprocesador y el disco duro son partes del Ordenador, y a diferencia de la agregación, no pueden ser compartidos entre distintos Ordenadores a la vez.
• No tiene mucho sentido que el microprocesador y el disco duro existan de manera independiente al ordenador, por lo cual la composición refleja de manera importante, el concepto de propiedad.

Herencia: Generalización y especialización

Las clases con atributos y operaciones comunes se pueden organizar de forma jerárquica, mediante la herencia.

La herencia es una abstracción importante para compartir similitudes entre clases, donde todos los atributos y operaciones comunes a varias clases se pueden compartir por medio de la superclase, también llamada clase base, que es una clase más general.

Un ejemplo: las clases Reptil, Anfibio y Mamífero. Todas estas son subclases de la superclase Animal, de la que derivan. La superclase tendrá una serie de atributos y operaciones comunes a todas las subclases (Reptil, Anfibio y Mamífero), mientras que en las subclases encontraremos atributos y operaciones específicos de cada tipo de animal. Por tanto se puede establecer que las subclases hereden de la superclase, ya que los atributos y operaciones de ésta son comunes a todas ellas.

De todo esto se deduce:
• La superclase generaliza a sus subclases.
• Las subclases especializan a la superclase.
• El proceso de Especialización es inverso al de Generalización.
• Una instancia de una subclase, es también una instancia de su superclase. Esto quiere decir que cuando creamos un objeto de tipo Anfibio, éste contiene la información definida en él y también la heredada de la superclase Animal. Por eso decimos que es una instancia de ambas clases.
Cuando utilizamos la herencia tenemos que tener en cuenta que los nombres de atributos y operaciones deben ser únicos en la jerarquía de herencia.


Relaciones de dependencias:

Representa un tipo de relación muy particular, en la que una clase es instanciada y en la que su instanciación es dependiente de otro objeto/clase.

Es una relación de uso, es decir una clase usa a otra, que la necesita para su cometido. Se representa con una flecha discontinua que va desde la clase utilizadora a la clase utilizada.

No hay comentarios:

Publicar un comentario