2015-01-06 12 views

risposta

8

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:

enter image description here

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:

enter image description here

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.

5

classe annidata in UML (per qualsiasi lingua) può essere rappresentata come:

enter image description here

Qui

  1. Classe INNER1 è nidificato all'interno della classe esterna Esterno 1
  2. Classi Le classi Inner2, Inner3, Inner4 sono nidificate all'interno di Outer2

di riferimento preso da here

Problemi correlati