🎃 Grandes descuentos en libros en línea, eformaciones y vídeos*. Código CALABAZA30. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. UML 2.5
  3. Modelado de objetos
Extrait - UML 2.5 Iniciación, ejemplos y ejercicios corregidos (5ª edición)
Extractos del libro
UML 2.5 Iniciación, ejemplos y ejercicios corregidos (5ª edición) Volver a la página de compra del libro

Modelado de objetos

Introducción

El objetivo del presente capítulo es dar a conocer las técnicas UML de modelado estático de objetos.

Dicho modelado se denomina estático porque no describe las interacciones o el ciclo de vida de los objetos, sino que los métodos se introducen desde un punto de vista estático, sin describir su encadenamiento.

Estudiaremos el diagrama de clases. Este diagrama contiene los atributos, métodos y asociaciones de los objetos. Como ya vimos en el capítulo Conceptos de la orientación a objetos, son las clases las que realizan la descripción.

Este diagrama es fundamental para el modelado de un sistema mediante objetos. De todos los diagramas UML, éste es el único obligatorio para ese tipo de modelado.

Veremos de qué manera el lenguaje OCL (Object Constraint Language o lenguaje de especificación orientado a objetos) puede extender el diagrama de clases para expresar con mayor riqueza las especificaciones. A continuación, el diagrama de objetos nos mostrará cómo ilustrar la modelización realizada en el diagrama de clases. Por último, descubriremos cómo describir objetos compuestos mediante un diagrama de estructura compuesta.

El uso del OCL, del diagrama de objetos o del diagrama de estructura compuesta es opcional, depende de las especificaciones del proyecto de modelado.

Conocer los objetos del sistema por descomposición

En el capítulo Modelado de la dinámica, estudiamos cómo descubrir los objetos desde un punto de vista dinámico. Primero presentamos los casos de uso en forma de diagrama de secuencias y luego enriquecimos dichos diagramas mediante el envío de mensajes para descubrir los objetos del sistema.

La descomposición de los mensajes hace aparecer los objetos del sistema, ya que conduce a mensajes más finos cuyo destinatario conviene buscar.

Otro posible planteamiento es la descomposición de la información contenida en un objeto. Con frecuencia, esta información es demasiado compleja para ser representada sólo por la estructura de un único objeto. A veces, también debe repartirse entre varios objetos.

Ejemplo

En el ejemplo del capítulo Modelado de la dinámica, el director busca los papeles (la información) de la yegua que desea vender en la base de datos de la granja de cría. La base constituye un objeto de granulado grueso compuesto a su vez por otros objetos, como los papeles de los caballos, las informaciones económicas o contables y los documentos de compraventa de los caballos. Los papeles de una yegua están compuestos, entre otras cosas, por la cartilla de vacunación y los papeles de sus crías. Los papeles de las crías se comparten con otros objetos como...

Representación de clases

1. La forma simplificada de representación de clases

Los objetos del sistema se describen mediante clases. Presentamos una forma simplificada de representación de las clases en UML en la figura 6.4. La representación consta de tres partes.

images/FIGUR64.PNG

Figura 6.4 - Representación simplificada de una clase en UML

La primera parte contiene el nombre de la clase.

Recordemos que el nombre de las clases se escribe en singular y está formado por un nombre común precedido o seguido de uno o varios adjetivos que lo califican. Dicho nombre es representativo del conjunto de objetos que forman la clase, representa la naturaleza de las instancias de una clase.

La segunda parte contiene los atributos. Éstos contienen a su vez la información de los objetos. El conjunto de atributos forma la estructura del objeto.

La tercera parte contiene los métodos, que corresponden a los servicios ofrecidos por el objeto y pueden modificar el valor de los atributos. El conjunto de métodos forma el comportamiento del objeto.

El número de atributos y métodos varía de acuerdo con la clase. No obstante, se desaconseja emplear un número elevado de atributos y métodos ya que, en general, éste refleja una mala concepción de la clase.

Ejemplo

La figura 6.5 muestra la clase Caballo como ejemplo de representación simplificada de una clase en UML.

images/FIGUR65.PNG

Figura 6.5 - La clase Caballo

Esta es la forma más simple de representación de las clases porque no hace aparecer las características de los atributos y de los métodos, a excepción de su nombre. Se utiliza a menudo en las primeras fases del modelado.

Antes de examinar las representaciones más completas, debemos abordar las nociones esenciales de encapsulación, tipo y firma de los métodos.

2. La encapsulación

Introdujimos el concepto de encapsulación en el capítulo Conceptos de la orientación a objetos. Algunos atributos y métodos no se exponen en el exterior del objeto, sino que son encapsulados y reciben el nombre de atributos y métodos privados del objeto.

UML, al igual que la mayoría de lenguajes modernos orientados a objetos, introduce tres posibilidades de encapsulación:

  • El atributo privado o el método privado: la propiedad no se expone fuera de la clase, ni tampoco...

Las asociaciones entre objetos

1. Los vínculos entre objetos

En el mundo real, muchos objetos están vinculados entre sí. Dichos vínculos corresponden a una asociación existente entre los objetos.

Ejemplos

  • El vínculo existente entre el potro Travieso y su padre;

  • El vínculo existente entre el potro Travieso y su madre;

  • El vínculo existente entre la yegua Jorgelina y el criadero de caballos al que pertenece;

  • El vínculo existente entre el criadero de caballos y su propietario.

En UML, estos vínculos se describen mediante asociaciones, de igual modo que los objetos se describen mediante clases. Un vínculo es un elemento de una asociación. Por consiguiente, una asociación vincula a las clases.

Los elementos de la asociación vinculan entre sí las instancias de las clases.

Las asociaciones tienen un nombre y, como ocurre con las clases, éste es un reflejo de los elementos de la asociación.

Ejemplos

  • La asociación padre entre la clase Descendiente y la clase Semental;

  • La asociación madre entre la clase Descendiente y la clase Yegua;

  • La asociación pertenece entre la clase Caballo y la clase CriaderoCaballos;

  • La asociación propietario entre la clase CriaderoCaballos y la clase Persona.

Las asociaciones que hemos estudiado hasta el momento a título de ejemplo establecen un vínculo entre dos clases. Estas asociaciones reciben el nombre de asociaciones binarias. Las asociaciones que vinculan tres clases se denomina asociaciones ternarias y aquellas que vinculan n clases reciben el nombre de asociaciones n-arias. En la práctica, la gran mayoría de asociaciones son binarias y las asociaciones cuaternarias y superiores prácticamente no se usan.

2. Representación de las asociaciones entre clases

La representación gráfica de una asociación binaria consiste en una línea continua que une las dos clases cuyas instancias se vinculan. Las clases se sitúan en los extremos de la asociación.

La figura 6.13 muestra la representación de una asociación binaria. El nombre de la asociación se indica encima de la línea.

images/FIGUR613.PNG

Figura 6.13 - Asociación binaria entre clases

Para señalar el sentido de lectura del nombre de la asociación con respecto al nombre de las clases, éste puede precederse del signo <...

Relación de generalización/ especialización entre clases

1. Las clases más específicas y las clases más generales

Una clase es más específica que otra si todas las instancias que la componen son a su vez instancias de la otra clase. La clase más especifica es una subclase de la otra clase. Esta última, más general, recibe el nombre de superclase.

La figura 6.39 muestra ambas clases así como la relación de generalización/especialización que las une.

images/FIGUR636.PNG

Figura 6.39 - Subclase y superclase

Ejemplo

El caballo es una especialización del équido, que a su vez es una especialización del animal. La zebra es otra especialización del équido. El resultado es la minijerarquía presentada en la figura 6.40.

images/FIGUR637.PNG

Figura 6.40 - Jerarquía de clases

2. La herencia

Las instancias de una clase son también instancias de su superclase o superclases. Por consiguiente, aprovechan los atributos y métodos definidos en la superclase, además de los atributos y métodos introducidos en la clase.

Esta facultad se conoce como herencia, es decir, una clase hereda los atributos y métodos de las superclases para que sus instancias se beneficien de ellos.

UML ofrece la posibilidad de representar los atributos y los métodos heredados en las subclases precediéndolas del símbolo ^.

Recordemos que los atributos y métodos privados de una superclase se heredan en sus subclases, pero no son visibles en ellas.

En la herencia, los métodos o atributos pueden redefinirse en la subclase. Esta redefinición se aplica principalmente a la herencia de las clases abstractas.

Ejemplo

Tal y como se muestra en la figura 6.41, los atributos y métodos de la clase Caballo se heredan en sus dos subclases.

La herencia significa que, al igual que un caballo de tiro, un caballo de carreras posee un nombre, un peso, una edad y puede caminar y comer.

images/FIGUR638.PNG

Figura 6.41 - Herencia de atributos y métodos

En la figura 6.42 aparece la misma jerarquía indicando los atributos y los métodos heredados que están precedidos del símbolo ^. También se han agregado el tipo y la encapsulación de los atributos y de los métodos.

images/06RI42V4.png

Figura 6.42 - Jerarquía que muestra los atributos y métodos heredados

3. Las clases...

Los diferentes estereotipos de clase

Un estereotipo sirve para especializar un elemento UML, como lo hacen los estereotipos de clase «abstract» e «interface». A continuación describimos los principales estereotipos de clase.

«abstract»: este estereotipo indica que una clase es abstracta.

«auxiliary»: se trata de una clase secundaria de un sistema. Las clases secundarias sirven de soporte a las clases principales.

«focus»: se trata de una clase principal de un sistema. Este estereotipo se opone al estereotipo «auxiliary».

«implementation class»: una clase de implementación proporciona la realización de una clase «type».

«type»: una clase «type» se corresponde con un tipo de datos abstracto que introduce atributos y métodos abstractos, pero sin proporcionar ninguna realización. Dicha clase es abstracta y se distingue de una interfaz por la introducción de atributos.

«interface»: este estereotipo precisa que una clase sea una interfaz.

«utility»: este estereotipo introduce la noción de clase utilitaria que solamente posee atributos de clase dotados de la propiedad {readOnly}, es decir, constantes así como métodos de clase. Dicha clase no puede ser instanciada.

«enumeration»: una enumeración es una clase particular que introduce un tipo...

Las clases template

Una clase concreta es un modelo que puede instanciarse para crear objetos. De forma análoga, una clase template es un modelo de clases. Posee parámetros que le confieren un aspecto genérico. Estos parámetros están tipados de forma similar a los parámetros de un método, utilizando todos los tipos disponibles. El principal tipo que encontramos es Type, un tipo estándar de UML, como Integer o String. Sirve para fijar el tipo de los atributos, de los parámetros de método, etc.

Type es una clase del metamodelo de UML. El metamodelo es un modelo UML donde los elementos descritos son elementos de UML. Contiene la descripción de las clases, de los tipos, de las asociaciones, de los atributos, de los métodos, etc. De este modo, la clase Type describe todos los tipos que se encuentran en un modelo UML, incluidos en el metamodelo. Las instancias de Type son tanto los tipos estándar de UML como las clases de cualquier modelo o metamodelo. Por ejemplo, Integer, String, la clase Caballo son instancias de Type. La clase del metamodelo Class que describe las clases y la propia clase Type son también instancias de Type. Precisamos también que no es necesario conocer el metamodelo de UML para utilizar las clases template.

El valor de estos parámetros está fijado por una relación de enlace (binding) del template que describe el enlace entre una clase...

Los objetos o instancias

1. La representación de los objetos

El diagrama de clases es una representación estática del sistema. También puede mostrar los objetos, es decir, en un momento determinado, las instancias creadas y sus vínculos cuando el sistema está activo.

Las instancias se representan dentro de un rectángulo con su nombre subrayado y, eventualmente, el valor de uno o varios atributos.

El nombre de una instancia presenta la forma siguiente:

nombreInstancia : nombreClase 

El nombre de la instancia es opcional.

El valor del atributo presenta esta forma:

nombreAtributo = valorAtributo 

Ejemplo

La figura 6.58 muestra la instancia Jorgelina, instancia de la clase Caballo, cuya descripción se da en la figura 6.8.

images/06RI58V4.png

Figura 6.58 - Ejemplo de objeto: la llegua Jorgelina

2. La relación de instanciación

La relación de instanciación describe el vínculo que existe entre una instancia y su clase. Esta relación se describe en el nombre de la instancia cuyo sufijo es el nombre de la clase. También es posible precisar esta relación entre la instancia y su clase utilizando una relación de dependencia dotada del estereotipo «instanceOf». Esta última representación es, sin embargo, menos habitual.

Ejemplo

La figura 6.59 muestra la instancia Jorgelina y su clase Caballo. La relación de instanciación se indica de dos maneras....

Diagrama de estructura compuesta

1. La descripción de un objeto compuesto

La finalidad principal del diagrama de estructura compuesta es describir con precisión objetos compuestos. Estos diagramas no sustituyen a los diagramas de clases, sino que los completan.

En los diagramas de estructura compuesta, el objeto compuesto se describe mediante un clasificador, mientras que sus componentes se describen mediante las partes. Un clasificador y una parte están asociados a una clase, cuya descripción completa se realiza en un diagrama de clases.

Observemos el objeto compuesto descrito en el diagrama de clases de la figura 6.61. Posee un componente derivado de una composición fuerte y otro derivado de una agregación.

images/figure51.PNG

Figura 6.61 - Objeto compuesto

La figura 6.52 muestra el diagrama de estructura compuesta correspondiente a ese objeto. Los componentes están integrados dentro del clasificador que describe el objeto compuesto. El tipo de las partes es la clase del componente. La cardinalidad se indica entre corchetes. Su valor por defecto es uno. Los componentes derivados de agregaciones aparecen representados mediante una línea de puntos, los componentes derivados de composiciones fuertes aparecen representados mediante una línea continua.

images/figure52.PNG

Figura 6.62 - Diagrama de estructura compuesta

Ejemplo

La figura 6.63 muestra un ejemplo de diagrama de estructura compuesta en el que se describe un automóvil en tanto que objeto compuesto. El diagrama de clases correspondiente aparece representado abajo.

images/figure53.PNG

Figura 6.63 - Ejemplo de diagrama de estructura compuesta

En el diagrama de estructura compuesta, Motor, Carrocería y Rueda no son clases, sino partes. Las partes se consideran siempre dentro de clasificadores.

El diagrama de clases de la figura 6.64 muestra nuevamente un automóvil en tanto que objeto compuesto. Introduce la asociación vinculada entre las ruedas y los semiárboles que se ocupan de la transmisión entre el motor y las ruedas delanteras...

Conclusión

En el presente capítulo hemos estudiado los diagramas de clases. Las clases describen los atributos y los métodos de sus instancias, así como los atributos y métodos de clase.

Las asociaciones entre objetos son obligatorias al elaborar un diagrama de clases. Dichas asociaciones constituyen la base de la interacción de las instancias a través del envío de mensajes cuando el sistema está activo.

Las relaciones de herencia entre clases son, asimismo, indispensables, ya que favorecen la factorización de elementos comunes, permitiendo así reducir el tamaño del diagrama.

La expresión de las especificaciones en UML, en lenguaje natural o en OCL conduce a enriquecer aún más la semántica expresada en el diagrama.

Por último, hemos estudiado el diagrama de estructura compuesta que complementa el diagrama de clases ofreciendo una descripción más fina de los objetos compuestos.

Ejercicios

1. La jerarquía de los caballos

Tenemos las clases Yegua, Semental, Potro, Potranca, Caballo, CaballoMacho y CaballoHembra, así como las asociaciones padre y madre. Establezca la jerarquía de las clases haciendo figurar en ella ambas asociaciones.

Utilice las especificaciones {incomplete}, {complete}, {disjoint} y {overlapping}.

Introduzca la clase Manada. Establezca la asociación de composición entre esta clase y las clases ya introducidas.

2. Los productos para caballos

Modele los aspectos estáticos del texto siguiente en forma de diagrama de clases.

Una central de caballos vende diferentes tipos de productos para caballos: productos de mantenimiento, alimentación, equipamiento (para montar el caballo), herraje.

Un pedido contiene una serie de productos y especifica la cantidad de cada uno de ellos. En caso necesario, se puede elaborar un presupuesto antes de pasar el pedido. Si alguno de los productos no está en stock, a petición del cliente el pedido puede dividirse en varias entregas. Cada entrega da lugar a una factura.