Come rappresentare la classe nidificata di C++ in UML? class A { class B { } }Come rappresentare la classe nidificata di C++ in UML?
risposta
Avevo pensato che la specifica ha ottenuto via dalla croce-e-cerchio di notazione. Così, ho fatto un giro nelle specifiche e non sono riuscito a trovarlo in 2.0. Devo concludere che la specifica 2.0 non la supporta più. Mentre in realtà è specificato nella v1.4, ho osservato tutte le specifiche 2.4.1 e non è visibile da nessuna parte (infatti, la parola "anchor" restituisce 0 risultati in una ricerca a livello di documento). Ho fatto un altro guardarmi intorno, ed ecco cosa posso mettere insieme.
In primo luogo, avevo sempre capito che le classi nidificate erano un mezzo per implementare la composizione. Inoltre, UML tenta di essere indipendente dall'implementazione e le classi nidificate non lo sono. (È possibile creare la composizione in altri modi, e non tutte le lingue OO supportano le classi annidate.) La spiegazione 1.4 include:
Se la Classe B è collegata alla Classe A da una linea di "ancoraggio" con Simbolo "anchor" sulla Classe A, quindi la Classe B viene dichiarata all'interno dello spazio dei nomi di Classe A. Cioè, la relazione tra la Classe A e la Classe B è l'associazione di proprietà dello spazio dei nomi.
Ok. Ora UML 2.0 dice questo:
Il pacchetto Kernel rappresenta i concetti di base della modellazione di UML, incluse classi, associazioni e pacchetti.
Ecco un diagramma del pacchetto kernel:
che è piuttosto astruso, ma hanno uno sguardo alla classe astratta NamedElement in alto a sinistra. (Una classe "NamedElement" è un elemento con un nome.) Si noti che Namespace deriva da esso. Ora, nota a destra, direttamente a destra della parte superiore della classe Namespace, c'è un'altra classe NamedElement. Una delle associazioni ha la proprietà {subsets ownedElement} e una composizione diamond sul lato Namespace. Sul lato Namespace, c'è la proprietà {subsets owner}.
Ciò significa che NamedElement, quando è in associazione di composizione con Namespace, è un sottoinsieme di Namespace. In altre parole, la relazione tra Namespace e NamedElement è l'associazione di proprietà namespace descritta nelle specifiche 1.4. Pertanto, la relazione di composizione, quando è adornata con lo spazio dei nomi e proprietà OwnElement, rappresenta una classe nidificata (o interna, o interna o qualunque sia la lingua di codifica preferita che la chiama).
Quindi, sto per dire che questo è il modo accettato di mostrare le classi annidate se si utilizza la notazione di composizione. Come questo:
Ora, un altro modo è quello di attaccare la classe annidata all'interno della classe che contiene. Gli esempi di notazione nelle specifiche non mostrano questo AFAICS, ma lo mostrano con altri NamedElements (pacchetti, componenti, ecc.) Quindi non vedo perché non sia possibile.
Tuttavia, non vedo che la notazione di ancoraggio è corrente. Il sito di xmojmr preferito (e un buon sito, anche), www.uml-diagrams.org, ha questo da dire in proposito:
ormai obsoleto UML 1.4.2 specifica classe annidata definita come una classe dichiarata all'interno di un'altra classe e appartenente al namespace della classe dichiarante. Relazione tra le classi è stato chiamato "spazio dei nomi di proprietà dell'associazione elemento
classificatore nidificati, ad esempio classe innestata, interfaccia nidificato, o caso d'uso annidato potrebbe essere utilizzato come un qualsiasi altro classificatore ma solo all'interno della classe o interfaccia che contiene.
Per UML 1.4.2 una classe dichiarante (annidamento) e una classe nidificata possono essere mostrate collegate da una linea, con un'icona di "ancora" all'estremità connessa alla classe dichiarante Un'icona di ancoraggio è una croce all'interno di un cerchio
Specifiche UML 2.x - incluso il recente UML 2.4.1 - Descrivere l'annidamento di classificatori all'interno di classi strutturate senza fornire una notazione esplicita per il nesting. t La notazione di "anchor" di UML 1.4 viene ancora utilizzata in un esempio in UML 2.4.x per i pacchetti come "notazione di appartenenza alternativa" e senza fornire altri dettagli o spiegazioni.
Non sono riuscito a trovare il diagramma "un esempio", quindi forse è ancora in circolazione. Ma per lo meno, la notazione sembra essere deprecata. Vorrei utilizzare le proprietà, creare uno stereotipo <<nested>>
o inserire la classe nidificata nella classe del proprietario.
classe annidata in UML (per qualsiasi lingua) può essere rappresentata come:
Qui
- Classe INNER1 è nidificato all'interno della classe esterna Esterno 1
- Classi Le classi Inner2, Inner3, Inner4 sono nidificate all'interno di Outer2
di riferimento preso da here
- 1. Come rappresentare richiamata in UML Class Diagram
- 2. Come rappresentare un interrupt in un diagramma di sequenza UML?
- 3. Rappresentando un C# metodo generico in una classe UML Diagram
- 4. Come rappresentare un parametro generico nel metodo UML?
- 5. La classe locale, la classe interna e la classe nidificata sono le stesse cose in C++?
- 6. Rappresentare i loop in un diagramma di attività UML
- 7. Classe nidificata - chiamata della classe nidificata dalla classe genitore
- 8. Rappresentazione di protocolli Objective C su diagrammi di classe UML
- 9. Mappa automapper in classe nidificata
- 10. Come rappresentare correttamente la classe messaggio in SMPP
- 11. C++ - Rappresentare la proprietà tramite puntatori
- 12. Come specificare la classe di visualizzazione personalizzata nidificata?
- 13. Classe nidificata .GetType()
- 14. Classe parziale nidificata
- 15. Esiste un approccio UML per rappresentare i thread
- 16. Classe nidificata all'interno di un'interfaccia
- 17. Come posso rappresentare l'ereditarietà da un parametro di modello in UML?
- 18. Come ottenere diagrammi di classe UML grafici in Eclipse PDT?
- 19. Come mostrare la relazione di ereditarietà privata in uno schema di classe UML
- 20. Come associare pattern a una classe nidificata in Scala?
- 21. Modello di classe UML come modellare la relazione molti a molti
- 22. UML per javascript?
- 23. Specializzazione std :: hash per classe nidificata in una classe modello
- 24. Objective-C e Modellazione UML
- 25. L'aggregazione dell'interfaccia nei diagrammi di classe UML
- 26. Come si contrassegna una classe come singleton in UML?
- 27. GridView associato a Proprietà di classe nidificata
- 28. Come rappresentare i soldi in Objective-C/iOS?
- 29. Notazione parametri variadic C++ 11 in UML
- 30. Diagramma classe UML per accesso utente
La domanda contrassegnata come duplicata risponde alla domanda nella sua stessa domanda, ma utilizza la notazione 1.4. – BobRodes