2012-03-10 12 views
15

Tengo una pregunta acerca de las asociaciones, para ser exactos Me pregunto acerca de las multiplicidades, entiendo esos, pero por ejemplo si me gustaría tener:UML asociación multiplicidad

---------   --------- 
|   |1  * |   | 
|CLASS |----------| STUDENT | 
|   |   |   | 
---------   --------- 

dosis que significa que en cualquier momento durante la existencia del sistema debe haber al menos 1 estudiante asignado a la clase, o esas multiplicidades deben ser verdaderas, si el sistema está funcionando normalmente.

Estoy haciendo esta pregunta, porque me preguntaba sobre el momento de la creación de un objeto. Primero creamos una clase vacía, luego la llenamos con los estudiantes. Durante un tiempo, la clase está vacía, pero solo durante la creación y el llenado, entonces tiene al menos un alumno. Porque si cambiara de 1 a 0..1 sugeriría que puede haber una clase vacía, no es falsa (este momento de poblar) pero luego no quiero permitir clases sin estudiantes.

EDIT: cambió 0 .. * a 0..1, debería ser como es ahora, disculpe la confusión.

Respuesta

9

dosis que significa que en CUALQUIER punto durante la existencia del sistema debe haber al menos 1 estudiante asignado a la clase, o esas multiplicidades deben ser verdaderas, si el sistema está funcionando normalmente.

Esa es una buena pregunta. Significa que, cuando el sistema está en un estado estable, cada estudiante DEBE estar asociado con exactamente una clase. Eso, a su vez, plantea otra pregunta: ¿qué constituye un "estado estable"? UML en general no formaliza esto. Intuitivamente, significa que no hay actividad en progreso que esté cambiando el estado activamente. Algunos perfiles de UML ponen más rigor alrededor de esto. Por ejemplo, UML ejecutable dice que el sistema puede violar las restricciones de cardinalidad mientras se está ejecutando la acción de un estado. Sin embargo, cuando la acción de estado se completa debe dejar el sistema en estado válido, es decir, donde se cumplen todas las restricciones de cardinalidad.

Las bases de datos proporcionan una buena analogía aquí. Las restricciones de base de datos (como las claves externas nulas &) deben ser verdaderas cuando el sistema es estable. Durante la ejecución de una transacción, las restricciones pueden violarse temporalmente. Sin embargo, cuando la transacción se complete, debe dejar el db en un estado válido.

Así que para su ejemplo como se muestra:

  • Es válido para una clase de existir sin estudiantes cuando el sistema es estable (* dice 0 o más - por lo que la clase no necesita tener ningún Estudiantes)
  • No es válido que un Estudiante exista sin ser asignado a una Clase cuando el sistema es estable ('1' significa exactamente uno). Entonces, cualquier "transacción" que crea el Estudiante también debe asociar al Estudiante con una Clase.

hth.

+0

Gracias por su respuesta :) – Andna

+0

De nada, buena pregunta. – sfinnie

0

No, * no significa que haya al menos un alumno en cada clase en cualquier momento. Pero en la otra dirección, mirando de Estudiante a Clase, la multiplicidad significa que cualquier estudiante está en exactamente una Clase.

Por motivos de modelado, es posible que desee cambiar la multiplicidad 1 también a *, pero esto depende de su contexto.

+0

Bien, pero ¿qué pasa con esto "en cualquier momento", esto también excluye la situación que describí (creación de un objeto), o son esas situaciones omitidas? – Andna

+0

Y sobre * - Creo que significa lo mismo que 0 .. *, al menos eso que dice en "UML destilado" – Andna

+0

@Andna depende de cómo tu editor UML interprete tu entrada ... deberías poder inspeccionar el diagrama y ver los límites superiores e inferiores reales para cada punto final. –

1

dosis que quiere decir que en cualquier momento durante la existencia del sistema debe haber al menos 1 estudiante asignado a la clase

Significa que hay exactamente una clase asignada a varios estudiantes.

Cada extremo de la asociación tiene un límite de multiplicidad superior y un límite de multiplicidad inferior, pero la mayoría de los editores de UML solo mostrarán un valor si los límites superior e inferior son los mismos. Si desea permitir (cero o uno) para muchos, puede escribir así:

0..1  * 
----------- 

Lo que realmente quiere aquí, probablemente, es una relación de muchos a muchos ... los estudiantes pueden ser de muchas clases y las clases pueden contener muchos estudiantes.

+0

aproximadamente 2 años después , tu respuesta respondió mi pregunta :) es por eso que hay 4 valores en multiplicidad. en hibernación, solo modelamos esto de uno a uno de uno a uno de muchos a uno, solo necesitamos 2 valores. – lovespring