PDA

View Full Version : Consigli da UML a JAVA


soundsgood
05-07-2010, 23:14
ciao ragazzi..

volevo togliermi alcuni dubbi forse banali di cose che non ricordo, o meglio che faccio a intuito ma vorrei qualche conferma.

--- Domanda: quando in un diagramma delle classi ad esempio supponiamo ho due oggetti: Persona e Città collegati dalla relazione Residenza (molteplicità: una persona ha una citta sola di residenza, ed una città puo essere di residenza per nessuna o molte persone)

La domanda è: quando passo a implementare le classi Java, per fare l'associazione (voglio che l'associazione sia navigabile in questo senso: per ogni persona posso risalire alla città di residenza), nella classe Persona devo metterci un attributo di tipo Città giusto?




--- Altra domanda: se ad esempio ho due oggetti Maestro e Bambino(supponiamo siano oggetti completamente diversi e non figli alla classe persona..). li collego con la relazione Alunno (verso di navigazione dell'associazione: dato un maestro voglio sapere gli alunni; inoltre un maestro ha da uno a molti alunni (1...n), un bambino può non essere un alunno o esserlo di piu maestri (0...n)). Supponiamo che la relazione Alunno abbia un attributo (poiche non fa parte ne di Maestro ne di Bambino) ad esempio "gradoDiSimpatia" che il maestro ha verso l'alunno.
Domanda: in questo caso la classe Maestro contiene un attributo Vector di oggtti di tipo Alunno? e Alunno diventa una classe java, con un attributo di tipo Bambino, e un attributo String "gradoDiSimpatia?

Albi89
06-07-2010, 01:56
Ciao ;)
UML in generale non impone vincoli particolari sulle strategie di implementazioni, ma è chiaro che solo alcune soluzioni sono realmente applicabili all'atto pratico.

Per quanto riguarda il primo quesito, la tua soluzione è chiaramente calzante. Tieni conto che associazioni e attributi sono assolutamente la stessa cosa in UML: qualsiasi attributo può essere rappresentato aggiungendo una classe al diagramma e collegandolo con una associazione (anche se nello scegliere l'una o l'altra prevalgono il buon senso e il risalto che si vuole dare alle classi che effettivamente rappresentano entità del tuo dominio, vedi "Persone" o "Città").

Per il secondo caso, è proprio quello che in UML si traduce con una "classe associativa": ogni Professore ha molti Alunni, ma per ogni coppia Professore - Alunno c'è solo un Grado di Simpatia. La classe associativa si "traduce" in pratica aggiungendo una nuova classe e ritoccando opportunamente le cardinalità, ma all'atto pratico puoi sbizzarrirti: o crei una struttura composta da Alunno e Simpatia e conferisci al Professore un vettore di queste strutture, o utilizzi una l'equivalente di una map... è chiaro che il fatto che la notazione di classe associativa sia equivalente sintatticamente all'aggiungere una nuova classe rende la prima soluzione più intuitiva, ma UML non indica mai una via forzata: ogni linguaggio potrebbe offrirti soluzioni per tradurre il diagramma in maniera più pratica, anche se ovviamente questo può significare perdere una corrispondenza 1:1 col class diagram ;)