UML Class Diagram: come posso rappresentare generalizzazioni "ortogonali" (o multi-ereditarietà)?

1

Cerco di rappresentare in un diagramma di classe UML il seguente oggetto e caratteristiche:

  • L'oggetto: un sistema (ad esempio un dispositivo elettronico) che può essere di tipo A, B o C
  • Se il sistema è di tipo A, ha un attributo extra specifico (diciamo "sotto-tipo", quali valori possono essere A1 o A2)

Ho creato una classe denominata "Sistema" e:

  1. Creata una classe "System_TypeA" che contiene un attributo extra denominato "subSystem" che può assumere qualsiasi valore all'interno di A1 e A2.
  2. Creata una relazione di generalizzazione tra le due classi ("System_TypeA" è un "Sistema")

Finora, tutto bene.

Ora, ogni sistema può essere il sistema di backup di altri sistemi. Se questo è il caso, il sistema dovrebbe contenere una raccolta di riferimenti dei sistemi di cui sta eseguendo il backup

Quindi, per questa funzione, ho anche creato una classe denominata "Backup_System" e ho creato la generalizzazione tra le due classi, poiché un "Backup_System" è un "Sistema".

Quindi, come rappresentare nel diagramma di classe il fatto che ci possono essere sistemi di tipo A che sono sistemi di backup (cioè il problema dell'ereditarietà multipla) ??

(Per informazioni, l'implementazione dovrebbe essere eseguita in java, quindi lo stesso problema di multi-eredità sarà affrontato durante l'implementazione.)

    
posta Renaud Tarnec 04.08.2014 - 17:12
fonte

3 risposte

4

Non sono sicuro se capisco la tua domanda. Penso che tu abbia solo una relazione di composizione tra sistema e sistema (vedi diagramma). Un sistema può eseguire il backup di un altro sistema.

Non penso che tu debba guardare all'eredità multipla qui. È possibile esagerare con l'ereditarietà. Prova a usare la composizione, quando puoi.

    
risposta data 04.08.2014 - 17:56
fonte
2

Poiché

each System can be the backup system of other Systems

hai davvero bisogno di una classe "Backup_system"? Non dovrebbe essere un'associazione?

Come questo

(clicca sull'immagine per copiare)

    
risposta data 04.08.2014 - 18:00
fonte
0

La tua domanda contiene due problemi: (1) il problema generale dell'ereditarietà multipla e della classificazione multipla; (2) la domanda su come modellare i sistemi di backup in un modello concettuale. Proverò a spiegare (1) mentre (2) è già stato risolto da alcune altre risposte (e in effetti, è davvero necessario associare i sistemi di backup con i sistemi di cui si suppone eseguiranno il backup).

UML non ha alcun problema con l'ereditarietà multipla, solo Java (e molti altri linguaggi OO) hanno un problema con esso. Nel diagramma delle classi UML devi semplicemente collegare la sottoclasse TypeA_Backup_System con le due superclassi TypeA_System e Backup_System utilizzando le frecce di generalizzazione.

Tuttavia, potresti non voler aggiungere una classe TypeA_Backup_System , ma potresti indicare il problema (relativo) che potresti avere sistemi specifici (istanze di System ) che istanziano sia TypeA_System che Backup_System . Questa è classificazione multipla , ancora non supportata da Java. Per consentire la classificazione multipla in un diagramma di classe UML, non aggiungere semplicemente la parola chiave constraint disjoint alle frecce di generalizzazione, quindi, per impostazione predefinita, le sottoclassi potrebbero sovrapporsi, implicando la possibilità di una classificazione multipla.

    
risposta data 04.08.2014 - 17:45
fonte

Leggi altre domande sui tag