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.