2011-11-06 15 views
8

La visibilità della classe è una parte importante del design dell'oggetto. Non ho visto nessun diagramma di esempio che mostri classi non pubbliche in diversi libri UML, né ho visto un modo per mostrare la visibilità della classe in Enterprise Architect, tra gli altri strumenti. Enterprise Architect e altri strumenti ti consentono di impostare la visibilità della classe nel metamodello, ma devo ancora vedere un modo per mostrarlo nei diagrammi.È possibile visualizzare la visibilità della classe nei diagrammi delle classi UML?

+0

Non penso che lo standard UML fornisca una notazione specifica per la visibilità, perché è una funzione dipendente dalla lingua. – Heisenbug

+0

Grazie a @Heisenbug. Sono stato in grado di vedere la visibilità della classe sui diagrammi dei pacchetti di Enterprise Architect. Questo potrebbe essere l'unico modo per vederlo in questo particolare strumento. Il mio prossimo passo è rivedere la parte rilevante delle specifiche UML. –

+2

Sono ragionevolmente certo che un diagramma dei pacchetti sia davvero l'unico modo per vedere la visibilità degli elementi (ovvero Scope) in Enterprise Architect. Non lo invierò come risposta dal momento che hai già svolto il lavoro investigativo, ma ti preghiamo di prendere in considerazione te stesso (e contrassegnando la risposta alla domanda) per i futuri utenti. – Uffe

risposta

0

In Eclipse si ha la visibilità nell'icona. Voglio dire che hai un'icona di classe verde e se privato allora un p è messo in primo piano. Questa icona è visibile anche nel diagramma delle classi se si seleziona l'opzione. Spero che questo aiuto.

0

UML supporta la visibilità in un linguaggio di programmazione in modo neutro, sia nel metamodello che nella rappresentazione.

Esiste un'enumerazione denominata VisbilityKind utilizzata in vari punti (vedere la sezione UML 2.3 superstructure spec 7.3.5.5 p142).

Sui diagrammi delle classi ci sono vari modi per illustrare la visibilità. Il più comune è usare '-' per rappresentare le funzioni private e '+' per rappresentare il pubblico. Per esempio:

---------------------------- 
| Class     | 
|--------------------------| 
| +publicAttribute: Type | 
| -privateAttribute: Type | 
|--------------------------| 
| +publicMethod()   | 
| -privateMethod()   | 
---------------------------- 

Vedere la figura 7.28/7.29 su p52 di the spec per ulteriori esempi.

hth.

+1

La tua risposta riguarda la visibilità dei membri della classe, non la visibilità della classe stessa. –

+0

@ BjörnPollex La visibilità è correlata a un determinato ambito, senza che la visibilità dell'ambito non abbia alcun significato. L'istanza della classe può essere membro di un'altra istanza di classe e in questo caso la sua visibilità può essere vista come mostrato in questa risposta. – SomeWittyUsername

0

ho appena guardato in su in UML 2.4.1 Infrastruttura. Nella figura 10.3 p. 95 vedi la classe definita come un tipo che è un oggetto denominato, che è un elemento. Con il pacchetto visibilità un oggetto NamedElement ha una visibilità come definita in 9.21.1 a pag. 88, se appartiene a un namespace. Quindi Class ha una visibilità se hai visibilità. Puoi usare le solite notazioni con + - # e ~ (pagina 89).

VisualParadigm può farlo.

1

Secondo l'UML spec v2.5 beta 2 non solo la NamedElement ma anche la PackageableElement ha la visibilità attributo di tipo VisibilityKind

da P48:

PackageableElement [Abstract Classe]

.. [omissis] ..

Attributi

  • visibilità: VisibilityKind [0..1] = public A PackageableElement deve avere una visibilità specificata se è di proprietà di un Namespace. La visibilità predefinita è pubblica.

Vincoli

  • namespace_needs_visibility Un PackageableElement di proprietà di uno spazio dei nomi devono avere una visibilità. inv: visibilità = null implica namespace = null

non ho trovato alcun linee guida di notazione per questa visibilità tuttavia

0

Se si definisce la classe con uno stereotipo (diciamo < <classe> >) è quindi possibile assegnare uno script di forma allo stereotipo. Se solo specificare una decorazione, questo dovrebbe utilizzare il disegno di default per una classe, e aggiungere la vostra decorazione, che può essere condizionale basata sulla proprietà campo di applicazione della classe:

decoration X 
{ 
    if(hasproperty("scope","public")) 
    print("P"); 
} 

Questo stampa un P nella top- angolo sinistro di una classe pubblica. Tuttavia, potresti anche avere un'icona.

Purtroppo, non riesco a trovare un modo di assegnare uno script di forma a una classe predefinita non stereotipata. Qualcuno sa come farlo?

Problemi correlati