Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [uml] associazioni bidirezionali con java

    Buongiorno a tutti, vi scrivo perché ho un problema con l'UML, mi trovo a dover gestire due classi (auto e concessionari ) l' associazione che ho è una bidirezionale, cioè dato il concessionario voglio sapere tutte le auto presenti, data la marca e il modello di un auto voglio visualizzare in quali concessionari si trova.

    come posso rappresentare a livello di codifica (Java) questo Schema UML?


    grazie mille a tutti....
    Il primo social network dedicato interamente allo sport.
    Social Network
    ________________________________

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da andgio76 Visualizza il messaggio
    mi trovo a dover gestire due classi (auto e concessionari ) l' associazione che ho è una bidirezionale, cioè dato il concessionario voglio sapere tutte le auto presenti, data la marca e il modello di un auto voglio visualizzare in quali concessionari si trova.

    come posso rappresentare a livello di codifica (Java) questo Schema UML?
    Precisiamo una cosa prima, però: se vuoi rappresentare i tipi, in modo generico, di auto allora la relazione è molti-a-molti. Uno stesso tipo di auto (es. Fiat Punto mod. xyz nera) possono averlo più concessionari. Se invece vuoi rappresentare una macchina specifica ben precisa, magari con tanto di targa, allora la relazione è uno-a-molti (solo un concessionario, ovviamente, ha quella macchina specifica con quella targa).

    Comunque, a livello basilare (e senza conoscere richieste o indicazioni più precise), queste cose si modellano sfruttando anche array/collezioni. Nella classe Concessionario ci può essere un array Auto[] o meglio ancora List<Auto> (o Set<Auto> ... dipende).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ciao andbin grazie mille, si l'associazione è molti a molti, però visto che ho una associazione bidirezionale non dovrei istanziare in auto una lista di concessionari mentre in concessionari una lista di auto?
    Il primo social network dedicato interamente allo sport.
    Social Network
    ________________________________

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da andgio76 Visualizza il messaggio
    però visto che ho una associazione bidirezionale non dovrei istanziare in auto una lista di concessionari mentre in concessionari una lista di auto?
    Se è molti-a-molti, un oggetto Concessionario avrà una "collezione" di oggetti Auto e ciascun oggetto Auto avrà una "collezione" di oggetti Concessionario.
    E parlo di "collezione" in senso generico, può essere un array, un List o altro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ok come immaginavo però quello che non riesco a capire nEl main (form) quale classe dovrò istanziare? In che modo? Mi potresti fare un esempio! Grazie ancora
    Ultima modifica di andgio76; 16-02-2016 a 22:12
    Il primo social network dedicato interamente allo sport.
    Social Network
    ________________________________

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da andgio76 Visualizza il messaggio
    Ok come immaginavo però quello che non riesco a capire nEl main (form) quale classe devo istanziare? In che modo? Mi potresti i fare un esempio! Grazie ancora
    Nelle relazioni a senso bidirezionale, la problematica e questione principale è quella di mantenere sincronizzate e coerenti le relazioni. Nello scenario descritto, non ha granché senso che la macchina A abbia il riferimento al concessionario X ma X non abbia il riferimento ad A.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Quindi cosa dovrei fare? Mi potresti fare un esempio! Il mio problema è proprio la sincronizzazione

    grazie
    Il primo social network dedicato interamente allo sport.
    Social Network
    ________________________________

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da andgio76 Visualizza il messaggio
    Quindi cosa dovrei fare? Mi potresti fare un esempio! Il mio problema è proprio la sincronizzazione

    grazie
    Immagina questo scenario: in Concessionario c'è un addAuto(Auto) e in Auto c'è un addConcessionario(Concessionario) . Chiaramente all'interno di ciascuno andrai ad invocare l'altro metodo, invocato sull'argomento ricevuto e passando this.
    Senza prendere alcun provvedimento particolare, questo di per sé sarebbe sbagliato, in quanto le invocazioni andrebbero in loop. Per evitare questo è sufficiente fare un controllo preliminare per vedere se l'aggiunta di una auto (o concessionario) va fatta oppure no perché esiste già. E in tal caso, usare i "Set" potrebbe risultare utile e sensato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Grazie mille sei stato molto gentile

    ti ti chiedo un ultimo favore, se fosse possibile mi potresti fare un esempio pratico ( in Java o C#)
    Il primo social network dedicato interamente allo sport.
    Social Network
    ________________________________

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da andgio76 Visualizza il messaggio
    ti ti chiedo un ultimo favore, se fosse possibile mi potresti fare un esempio pratico ( in Java o C#)
    Abbastanza buttato giù al volo (ma funzionante e corretto):

    codice:
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Set;
    import java.util.HashSet;
    
    public class ProvaCorsiStudenti {
        public static void main(String[] args) {
            Corso corsoJava = new Corso("Programmazione Java");
            Corso corsoCpp = new Corso("Programmazione C++");
            Studente marioRossi = new Studente("Mario Rossi");
            Studente robertoBianchi = new Studente("Roberto Bianchi");
    
            marioRossi.addCorso(corsoJava);
            robertoBianchi.addCorso(corsoJava);
            robertoBianchi.addCorso(corsoCpp);
    
            System.out.println(corsoJava);
            for (Studente studente : corsoJava.getListaStudenti()) {
                System.out.println("  " + studente + " che segue " + studente.getListaCorsi());
            }
    
            System.out.println(corsoCpp);
            for (Studente studente : corsoCpp.getListaStudenti()) {
                System.out.println("  " + studente + " che segue " + studente.getListaCorsi());
            }
        }
    }
    
    
    class Corso {
        private String nome;
        private Set<Studente> studenti;
    
        public Corso(String nome) {
            this.nome = nome;
            studenti = new HashSet<Studente>();
        }
    
        public void addStudente(Studente studente) {
            if (studenti.add(studente)) {
                studente.addCorso(this);
            }
        }
    
        public List<Studente> getListaStudenti() {
            List<Studente> listaStudenti = new ArrayList<Studente>(studenti);
            return listaStudenti;
        }
    
        public String toString() {
            return nome;
        }
    }
    
    
    class Studente {
        private String nome;
        private Set<Corso> corsi;
    
        public Studente(String nome) {
            this.nome = nome;
            corsi = new HashSet<Corso>();
        }
    
        public void addCorso(Corso corso) {
            if (corsi.add(corso)) {
                corso.addStudente(this);
            }
        }
    
        public List<Corso> getListaCorsi() {
            List<Corso> listaCorsi = new ArrayList<Corso>(corsi);
            return listaCorsi;
        }
    
        public String toString() {
            return nome;
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.