back to top

Diagramma dele classi: le associazioni – Guida UML

Nel capitolo precedente abbiamo definito il concetto di classe. Adesso andremo a vedere come è possibile legare varie classi presenti nel nostro progetto con una relazione di associazione. Iniziamo con il dire che l’associazione, in UML, viene rappresentata da una linea che collega due classi. Solitamente agli estremi di questa linea si indicano le molteplicità della relazione , ovvero la quantità di oggetti di una classe che sono legati all’altra, mentre nel centro della linea viene indicato cosa indica la relazione. Vediamo subito un esempio chiarificatore:

Esempio di rappresentazione di una associazione in UML

Andiamo adesso ad analizzare le varie associazioni. La prima relazione tra Cuoco e Ristorante indica la seguente cosa:

  • Un cuoco lavora in un ristorante
  • In un ristorante lavorono uno o più cuochi

L’associazione, letta da sinistra verso destra, è un’associazione uno ad uno ovvero che un cuoco è associata ad un solo ristorante. Invece l’associazione, letta da destra verso sinistra, è una relazione uno ad uno o più che significa che il ristorante è associato ad uno o più cuochi. La notazione per identificare la molteplicità uno ad uno (oppure la molteplicità uno ad un numero ben preciso) è estremamente intuitiva, si tratta di indicare solo il numero che identifica la relazione. Per quanto concerne la notazione con cui sono state identificate la molteplicità dell’associazione uno ad uno o più è una notazione standard che ha la seguente sintassi:

Numero_Iniziale | ... | Numero_Finale

Quando si utilizza il simbolo * si identifica una uantità indefinita. Infatti nel nostro caso nel ristorante ci potrebbero lavorare uno o due o cinque cuochi, dipende dal tipo e dalla grandezza del ristorante.

La seconda relazione dello schema precedente presenta una diversità grafica di notevole importanza. La freccia, presente ad un’estremità dell’associazione, indica la navigabilità dell’associazione e stabilisce un tipo di associazione monodirezionale. Per capire meglio questo concetto traduciamo il significato dell’associazione:

  • Un ristorante ha uno o più proprietari

Come vediamo, l’effetto della freccia nell’associazione, sostanzialmente è quello di specificare chi è associato a chi. Infatti con questo tipo di associazione non si ha nessuna informazione riguardo alla relazione che intercorre tra Proprietario e un Ristorante.

Compreso adesso il significato dell’associazione tra le classi andiamo a vedere come si traduce il tutto dal punto di vista del codice del programma per capire, senza lasciare alcun dubbio, la differenza tra un’associazione monodirezionale ed una bidirezionale. Dunque per quanto riguarda l’implementazione relativa alla classe Cuoco avremo che la classe avrà alcuni attributi propri (come per esempio nome, cognome e lo stipendio percepito) e poi avrà anche un attrituto di tipo Ristorante dovuto alla relazione presente nello schema. Il codice sorgente sarà il seguente (il codice è scritto in Java):

public class Cuoco{

  private String nome;
  private String cognome;
  private int stipendio;
  private Ristorante ristorante;

}

Per quanto riguarda la classe Ristorante, anche in questo caso, avremo degli attributi propri (nome del ristorante) ed in più un attributo di tipo Cuoco. Inoltre sarà presente un attrbuto di tipo Proprietario. Vediamo, anche in questo caso, il codice:

public class Ristorante{
  
  private String nome;
  
  //La molteplicità uno ad uno o più si traduce
  //con il simbolo [] che rappresenta un array
  private Cuoco[] cuoco;
  
  private Proprietario proprietario;
}

Infine, nella classe Proprietario, possiamo vedere la differenza sostanziale tra la relazione bidirezionale tra Cuoco e Ristorante e la relazione monodirezione tra Ristorante e Proprietario. In questo caso infatti, la classe proprietario avrà solo gli attributi propri e non ci sarà nessun riferimento al ristorante di cui è proprietario. Ecco il codice relativo:

public class Proprietario{
  
  private String nome;
  private String cognome;
}
PubblicitÃ