Seguimos con las entradas sobre la vista estática y en la de hoy veremos la generalización, la herencia y la realización que son tipos de relaciones como vimos anteriormente. Espero que por el momento las entradas os estén resultando útiles y gratificantes. ¡Vamos a por esta!.
Generalización
Es una relación taxonómica (de inclusión) entre una descripción más general (padre) y otra más específica (hija) que se construye sobre ella y va extendiendo. Sus propósitos son:
- Principio de sustitución: Define las condiciones bajo las cuales una instancia de una clase (objeto) puede ser utilizado cuando se declara una variable conteniendo valores de una clase dada.
Esta parrafada viene a indicar la propiedad polimórfica de las operaciones que permiten que la clase padre puede tener varias clases hijas implementando cada una su propia variación de dicha operación. Las operaciones polimóricas pueden declararse en la clase padre sin necesidad de implementarla dando lugar, en este caso, a una operación abstracta.
- Herencia: Permite que una clase hija herede todas aquellas propiedades que le dejes sus clases antecesoras.
Herencia
- No se puede declarar un atributo más de de una vez con la misma signatura (directamente o heredado) ya que da lugar a modelos mal formados.
- Una operación puede ser declarada en más de un clasificador siempre que sea consistente (mismos parámetros, restricciones y significado).
- Un método vinculado a una descendiente sustituye a un método con la misma signatura declarado en cualquier antecesor. En cambio si dos o más copias de un método son heredadas por una clase (por herencia múltiple) entran en conflicto y el modelo está mal formado.
- Las restricciones sobre un elemento son la unión de las restricciones del propio elemento y sus antecesores.
- Cada operación heredada debe tener definido un método por herencia de un antecesor.
- En caso de tener una misma clase antecesora por más de una relación de herencia, sus características se heredarán solamente una vez.
- Si dos o más clases antecesoras declaran una característica con la misma signatura (es decir, se da una duplicidad en un atributo, operación o señal) se da un conflicto entre ellas y el modelo estará mal formado.
- Simple: Un objeto pertenece una clase directa solamente.
- Múltiple: Un objeto puede tener una o más clases directas de las cuales no tiene porque heredar. Las distintas combinaciones que pueden darse no han de llevar a un modelo mal formado, para ello se usa el discriminador, que indica una subtipificación. Varios subtipos pueden compartir el mismo discriminador.
- Estática: Un objeto no puede cambiar su clase tras su creación pues los atributos de las clases antecesoras son constantes. En otras palabras, no puede cambiar sus atributos y operaciones
- Dinámicas: Un objeto puede cambiar su clase directa pudiendo ganar o perder atributos y operaciones. En caso de perderlos, la información que contenían también se pierde y es irrecuperable. Esta clasificación a veces se denomina roles o tipos. Existe un patrón de modelado donde a cada objeto se le exige que tenga una clase inherente estática más uno o más roles que pueden ser añadidos o eliminados a lo largo de su vida. Esto permite que la clase inherente describa las propiedades fundamentales, y las clases de rol, las propiedades transitorias.
Hay que tener en cuenta también que las operaciones declaradas directamente en una clase han de tener un método definido.
Herencia múltiple
Si un clasificador tiene más de un padre, hereda de cada uno de ellos sus características (atributos, operaciones y señales). Tenemos que tener en cuenta las siguientes características de la herencia múltiple:
Fijaros que las características heredadas son aquellas que están marcadas como protegidas (#), en el ejemplo anterior, todas. Ya las características privadas (-) y públicas (+) no se pueden heredar, las primeras porque sólo pueden acceder a ellas la clase a la que pertenecen, y las segundas, porque pueden acceder a ellas cualquier clase.
Clasificaciones
Son relaciones entre un objeto y su tipo que surgen debido a las cualidades específicas de una determinada especialización de una clase. En la vista estática encontramos las siguientes (hay otras que iremos viendo en posteriores entradas):
Figura obtenida del libro UML gota a gota. |
Permite conectar un elemento del modelo con otro elemento del modelo que le proporciona su especificación de comportamiento que a menudo se encuentran en distintos modelos, pero no su estructura ni implementación. Aunque el uso de la realización está pensado para usarse con elementos de especificación, como las interfaces, hay que tener en cuenta que también pueden ser usados con elementos concretos de implementación (artefactos, etc) para indicar su especificación.
Hay dos tipos de interfaz:
- Proporcionada: La clase proporciona los servicios de la interfaz.
- Obligatoria: Usada por la clase para implementar su comportamiento interno.
Y hasta aquí la entrada de hoy. Si tenéis alguna duda usad los comentarios que intentaré contestaros a la mayor brevedad posible.
¡Gracias por leerme!
No hay comentarios:
Publicar un comentario