2012-06-26 14 views
10

Come faccio a mostrare l'uso di metodi statici in un diagramma di classe UML?Come mostrare l'uso di metodi statici UML Class Diagram

class A{ 
    public static void test(){ 
    } 
} 

class B{ 
    public void b(){ 
    A.test(); 
    } 
} 

Come sarebbe un diagramma di classe, che mostra la relazione? UML 2.0 sarebbe preparato, se c'è una differenza.

risposta

11

Per mostrare un metodo statico, evidenzia il nome del metodo statico - dai un'occhiata a here per informazioni più dettagliate.

Per quanto riguarda la navigazione di tale relazione; class B dipende dall'esistenza di class A. Possiamo dire che la classe B ha una "dipendenza di utilizzo" sulla classe A

class B ----uses----> class A 

Spero che questo aiuti.

+0

Sei sicuro che sia una relazione di dipendenza e non un'associazione? – Nicolas

+0

Un'associazione è una relazione tra due (o più) tipi che sono collegati da un'istanza (o). Quindi per ClassB avere un'associazione con ClassA è necessario avere un riferimento ad esso, magari tramite una proprietà o un campo. Ma dal momento che non è il caso del tuo esempio, direi che hai una dipendenza e non un'associazione. Penso che la definizione in questo [collegamento] (http://www.uml-diagrams.org/dependency.html) mostri che hai una dipendenza. – RobertMS

6

@RobertMS è corretto.

Un'altra alternativa, relativo utilizzare stereotipi:

.............................................................. 
....+----------------------------------------------------+.... 
....|    StringUtilityClass     |.... 
....+----------------------------------------------------+.... 
....| [+] void: lowerCase()    <<non virtual>> |.... 
....| [+] void: upperCase()    <<non virtual>> |.... 
....| [+] String: toString()    <<override>> |.... 
....+----------------------------------------------------+.... 
....| [+] String: LowerCaseCopy(String Value) <<static>> |.... 
....| [+] String: UpperCaseCopy(String Value) <<static>> |.... 
....| [+] String: ReverseCopy(String Value) <<static>> |.... 
....+----------------------------------------------------+.... 
.............................................................. 

Nota alcuni linguaggi di programmazione le migliori pratiche, specialmente quelli con la sintassi sensibili caso C, maiuscolo funzioni statiche, e lasciare in cammello minuscole la resto delle funzioni.

Cheers.

3

Per mostrare i metodi statici e attributi che li evidenzi in un diagramma delle classi UML: vedi UML Distilled p.66 o sezione 7.3.19 (funzionalità) del UML Superstructure specification:

caratteristiche statiche sono sottolineate.

Per mostrare la relazione tra le classi B e A (dove B utilizza solo metodi statici in A), si utilizza una dipendenza, non un'associazione. Le associazioni sono sempre tra le istanze delle classi a ciascuna estremità, come nella sezione 7.3.3 (Association) delle specifiche UML sovrastruttura:

Un'associazione specifica una relazione semantica che può verificarsi tra le istanze digitati.

Ma classe B è dipende in classe A, come nella sezione 7.3.12 della specifica:

Una dipendenza è un rapporto che indica che un singolo o un insieme di elementi del modello richiede altri elementi del modello per la loro specifica o implementazione .

Probabilmente vale la pena chiarire la natura della dipendenza con uno stereotipo. È possibile utilizzare uno stereotipo use, ma questo è molto generale e in realtà comprende associazioni standard tra le istanze (anche se ovviamente si utilizzano normalmente le associazioni per mostrarle esplicitamente).Come dice Fowler in UML Distilled,

Molte relazioni UML implicano una dipendenza. L'associazione navigabile dall'ordine al cliente [in uno dei suoi esempi ...] indica che l'ordine è dipendente dal cliente.

Sembra non esserci uno standard su quale stereotipo utilizzare. Ho usato usesStatically per essere chiaro sulla natura della dipendenza; che è

B --usesStatically--> A

(Se, in alternativa, di classe B aveva un'istanza di A come un campo statico, mi piacerebbe usare qualcosa come B--containsStatically--> A se sto rappresentando B esplicitamente nel diagramma delle classi, altrimenti basta un attributo statico sottolineato di tipo A in B.)

+0

Pensavo che la risposta di @ RobertMS valesse la pena di espandersi, ma ho messo questa come una risposta wiki della comunità poiché "solo" spiega alcune sfumature della sua risposta (e collega a riferimenti più "ufficiali"). –