UML - Tipi di accesso delle associazioni

di il
4 risposte

UML - Tipi di accesso delle associazioni

Salve a tutti del forum,
in questi giorni sto leggendo un manuale in merito al linguaggio UML e contestualmente sto utilizzando il PapyrusUML per fare esercizi.

Questo perchè vorrei produrre, quando sviluppo software, anche una documentazione più tecnica.


Il chiarimento che chiedo è sul tipo di accesso che hanno le associazioni, poichè ne sui libri e ne su pdf sono riuscito a trovare qualcosa esplicito.

Premessa con esempio semplice:
In un diagramma delle classi inserisco due classi quali Persona e Azienda (classico esempio), ognuna delle quali ha i suoi costruttori, metodi e attributi. Queste ultime possono essere di tipo public, protected, private e etc. definibili in UML. Fin qui tutto OK.

Successivamente la classe Azienda ha una associazione "univoca" verso la classe Persona denominata "dipendenti 0..*".
Quindi: Ogni oggetto della classe Azienda avrà un campo che potra contenere da 0..* oggetti della classe Persona.

Traducendo in linguaggio java, per me, il membro presente nella classe Azienda dovrebbe essere: private Vector<Persone> dipendenti
Poichè e' solo la classe Azienda che dovrebbe gestire l'inserimento di oggetti Persona nel campo "dipendenti" mediante metodi del tipo: assumi(...), licenzia(....)

Se faccio tradurre il diagramma delle classi e in particolare la classe Azienda a Papyrus o anche a ArgoUML in Java, diventa:
- public Vector dipendenti
Ma non mi pare che sia corretto in quanto qualunque client potrebbe accedere al campo dipendenti e modificare appunto il campo mentre l'istanza della classe Azienda rimane ignara del cambiamento.

Qual'è la definizione esatta? ("private Vector<Persone> dipendenti" oppure "public Vector dipendenti")

Ho provato anche con gli altri tipi di associazioni quali Composizione e Aggregazione e ottengo (alla traduzione da UML in Java) sempre un campo di tipo public e in ArgoUML non posso impostare il tipo di accesso per una associazione.

Per definizione, Aggregazione e Composizione sono uguali eccetto che nella Composizione è la classe che genera un'oggetto e lo inserisce nel campo, nella Aggregazione, la classe riceve l'oggetto dall'esterno.

Secondo voi l'associazione visualizzata nel diagramma delle classi deve essere public? Se si perchè? Oppure può essere private?

Leggendo il testo di UML capisco che quando io creo delle classi che rappresenteranno futuri oggetti, l'utilizzo delle associazioni è per dare enfasi che una classe utilizzerà delle istanze di un'altra classe. Tant'è che i tipi selezionabili in UML sono solo quelli primitivi (int,char,bool,etc).

Certo che io potrei creare anche un'attributo nella classe Azienda quale: private Vector<Persona> dipendente
Ma perderei quella enfasi di connessione tra le classi.

Sbaglio in qualcosa?

Grazie per aver letto ancor di più se qualcuno mi illumini.

4 Risposte

  • Re: UML - Tipi di accesso delle associazioni

    Tu stai chiedendo come specificare la visibilità di proprietà e metodi in base ai modificatori di accesso, giusto?
    In UML si usano i seguenti simboli
    + per public
    - per private
    # per protected
    ~ per visibilità di package
    quindi per avere un campo
    private Vector<Persone> dipendenti;
    in UML dovrai scrivere come proprietà
    - dipendenti: Vector<Persona>
  • Re: UML - Tipi di accesso delle associazioni

    No

    Apri un diagramma di classe
    Inserisci due classi nel diagramma di classe (Class A e Class B).
    Effetta un'associazione tra le due classi a piacere (semplice/aggregazione/composizione).

    Ora, implementa quello che hai disegnato nel diagramma utilizzando Java:
    Sicuramente, in una classe dovrai implementare un campo che rappresenta l'associazione.
    Come lo implementeresti questo campo? Ma sopratutto sarà Public o altro?

    Per ArgoUML e Papyrus è public.
    Per me dovrebbe essere private.
    Per te?
  • Re: UML - Tipi di accesso delle associazioni

    Puoi specificare sulla freccia dell'associazione il nome con la relativa visibilità.
    Cioè
    
    +----------+                                       +----------+
    |    A     |        - nomeAssociazione             |     B    |
    |          |-------------------------------------->|          |
    +----------+                                       +----------+
    
  • Re: UML - Tipi di accesso delle associazioni

    Ok,
    ho verificato nel manuale di Papyrus e ho trovato come definire la visibilità dell'associazione (a prescindere dal tipo).

    In effetti, specificare la visibilità nelle associazioni è un po complesso.

    Tutto ok.
Devi accedere o registrarti per scrivere nel forum
4 risposte