2012-02-29 5 views

Respuesta

9

El título no tiene el 100% de sentido completo tal como está escrito. Hay clases de singleton, pero en realidad no hay relaciones de singleton. Cualquier relación se puede asignar a una multiplicidad en cada extremo, por lo que si se refiere a one-to -una relación, todo lo que haces es asignar multiplicidad 1 en ambos extremos.

Las clases también pueden tener multiplicidades. No suele ver esto usado, excepto en un caso: singletons.

Cuando se trata de A tener o contener o hacer referencia a B, hay básicamente tres niveles de hermeticidad en UML.

La agregación (punta de flecha romboidal no llena) implica que la contención no es exclusiva y que el objeto contenido no comparte ningún aspecto de su ciclo de vida con el objeto que lo contiene. En la implementación, esto es típicamente un puntero.

La composición (punta de flecha romboidal llena) implica que el objeto contenido se destruye cuando el objeto que lo contiene. Hacer que esto funcione generalmente significa que la contención es exclusiva. En la implementación, este suele ser un puntero cuyo destructor se llama en el destructor de la clase contenedora (aunque no se puede crear en el constructor de la clase que lo contiene).

La asociación dirigida o el atributo de miembro (lo mismo en UML) implica que el objeto contenido es parte del estado, o un componente si se quiere, del objeto que lo contiene. En la implementación, esto normalmente significa que la referencia no es un puntero, o si el objeto contenido se co-crea y destruye con el objeto que lo contiene.

La agregación de un singleton es perfectamente admisible (incluso de varias clases diferentes), porque la agregación es, por definición, no exclusiva.

La composición es un poco dudosa, a menos que la clase contenedora también sea un singleton.

La asociación de atributos/dirigidos es probablemente incorrecta. Si la clase contenedora es un singleton, no tiene sentido hacer que la clase contenida sea singleton también, ya que eso está implícito. Y si la clase contenida se usa como miembro en dos clases diferentes, no puede ser un singleton.

Además de lo anterior, también puede agregar todas las relaciones de uso que desee. Esto es común en todo diseño e implica que la clase en el origen de la relación llama a los métodos en la clase en el objetivo final.

enter image description here

1

También hay una agregación con un cuadrado abierto en lugar de un cuadrado lleno. La apertura significa que la primera instancia no hace la otra (pero todavía tiene una relación has-a).

1

Puede fingir que es la agregación , pero la verdad es esta: los singletons no tienen nada que ver con el código orientado a objetos. Son una forma de estado global (al igual que las variables globales).

Es posible que desee considerar un enfoque diferente al problema.

PS algunos materiales que podrían ayudar:

4

yo diría que, técnicamente, sí, se puede tener una variable miembro que es un puntero a un objeto Singleton y lo llaman agregación; sin embargo, usar el término de agregación no tiene mucho significado una vez que se escribe el código. Para todos los efectos, es solo una asociación.

Sin embargo, el uso de una asociación de agregación en un diagrama puede o no ayudar a un espectador del diagrama a comprenderlo. Eso probablemente dependa de a quién se lo muestre y de lo que puedan entender en términos de agregación.

Para contestar realmente la pregunta del título (utilizando información de la Guía del usuario UML (2ª edición):

______________________   ______________________ 
|     |   |     1| 
| AggregatingClass |   | SingletonClass | 
|____________________|  0..1|____________________| 
|     |<>--------|     | 
|____________________|   |____________________| 
|     |   |     | 
|____________________|   |____________________| 

(Nota del 1 en la esquina superior derecha de la caja de la clase Singleton indicando cardinalidad.)

+0

me di cuenta de que nadie había realmente responder a la pregunta del título! –

+1

... y después de mi último comentario, ¡todavía no había recibido respuesta! He actualizado mi diagrama y lo respondí correctamente. Leí mal 'relación singleton' como' patrón singleton'. @ahj –

Cuestiones relacionadas