Auf Thema antworten

wenn man die Ursprungsklassen nicht ändern kann oder will, dann kann man weitere Klassen einführen, richtig,

habe ich ja auch schon mehr oder weniger für denkbar erklärt (gut oder schlecht ist da relativ)


in dem Fall kann man noch über den Aufwand nachdenken,

wenn du beide Sichten von Fahrer und Auto aus haben willst, dann sind auch gleich zwei Klasse AutoLink, FahrerLink denkbar, ja


die Umsetzung ist meiner Ansicht nach zur Hälfte unschön,

du hast darauf geachtet, dass es pro Auto nur genau einen AutoLink gibt,

die FahrerLinks sind dagegen mehrfach pro Fahrer vorhanden, deshalb von Zeile 23-36 so viel zu tun,

wobei im anderen Fall auch einige Zeilen dazukämen


aber wenn erstmal viele Fahrer und viele Autos dazukommen, nicht immer genau mit den Zahlen 2 und 3,

dann wird das auf diese Weise nicht mehr zu handeln sein, dann doch besser einzelne FahrerLinks,

und mehr Hilfsmethoden,


statt

al1.getFahrerLinks()[0].getAutoLinks()[1] = al2;

al1.getFahrerLinks()[0].getAutoLinks()[2] = al3;

z.B.

fl1.addAutoLinks(al2, al3);


-----


die Ausgabe geht natürlich überhaupt nicht, statt


        System.out.println("al1-Fahrer1-alle Wagen=");

        System.out.print(al1.getFahrerLinks()[0].getAutoLinks()[0].getAuto().getKFZZeichen());

        System.out.print(al1.getFahrerLinks()[0].getAutoLinks()[1].getAuto().getKFZZeichen());

        System.out.println(al1.getFahrerLinks()[0].getAutoLinks()[2].getAuto().getKFZZeichen());


muss da stehen


        System.out.println("al1-Fahrer1-alle Wagen=");

        System.out.print(al1.getFahrerLinks(0).getAlleWagen());


von außen kann man ja gar nicht wissen, wieviele AutoLinks vorhanden sind



-----


von solchen Details abgesehen ist das aber mit diesen Klassen durchaus realisierbar, ja,


gut fände ich persönlich etwas weniger Links und mehr Maps,

lieber viel Arbeit in Basisklassen stecken, als Detailklassen zu programmieren,

aber das ist jetzt ein kompliziertes Beispiel, musst du nicht so machen



[code=Java]

       public class Test

{

    public static void main(String[] args)

        throws Exception

    {

        MainAssoziationBI_NzuM_2.main(null);

    }

}


class MainAssoziationBI_NzuM_2

{

    public static void main(String[] args)

    {


        Auto a1 = new Auto("A1");

        Auto a2 = new Auto("A2");

        Auto a3 = new Auto("A3");

        Fahrer f1 = new Fahrer("F1-Alice");

        Fahrer f2 = new Fahrer("F2-Berta");

        Fahrer f3 = new Fahrer("Joe");


        AutoFahrerLinker afl = new AutoFahrerLinker();

        afl.add(a1, f1);

        afl.add(a2, f1);

        afl.add(a3, f2);

        afl.add(a1, f2);

        afl.add(a2, f3);

        afl.add(a3, f3);



        System.out.println("a1=" + a1);

        List<Fahrer> fahrerFuerA1 = afl.getFahrer(a1);

        for (int i = 0; i < fahrerFuerA1.size(); i++)

        {

            Fahrer f = fahrerFuerA1.get(i);

            System.out.print("a1-Fahrer" + (i + 1) + "-alle Wagen=");

            System.out.println(afl.getAutos(f));

        }

    }

}



class Auto

{

    private String kFZZeichen;


    public String getKFZZeichen()

    {

        return kFZZeichen;

    }


    public void setKFZZeichen(String kFZZeichen)

    {

        this.kFZZeichen = kFZZeichen;

    }


    public Auto(String kFZZeichen)

    {

        this.kFZZeichen = kFZZeichen;

    }


    public String toString()

    {

        return this.kFZZeichen;

    }

}



class Fahrer

{

    private String name;


    public String getName()

    {

        return name;

    }


    public void setName(String name)

    {

        this.name = name;

    }


    public Fahrer(String name)

    {

        this.name = name;

    }


    public String toString()

    {

        return this.name;

    }

}



class AutoFahrerLinker

{

    private AnyMap<Auto, Fahrer> afMap = new AnyMap<Auto, Fahrer>();

    private AnyMap<Fahrer, Auto> faMap = new AnyMap<Fahrer, Auto>();


    public void add(Auto a, Fahrer f)

    {

        afMap.add(a, f);

        faMap.add(f, a);

    }


    public List<Auto> getAutos(Fahrer f)

    {

        return faMap.get(f);

    }


    public List<Fahrer> getFahrer(Auto a)

    {

        return afMap.get(a);

    }

}



class AnyMap<T, U>

{

    private Map<T, List<U>> map = new HashMap<T, List<U>>();


    public void add(T t, U u)

    {

        List<U> list = map.get(t);

        if (list == null)

        {

            list = new ArrayList<U>();

            map.put(t, list);

        }

        list.add(u);

    }


    public List<U> get(T t)

    {

        return map.get(t);

    }


}

[/code]

je nach Geschmack ist das sogar komplizierter, etwa durch neue Zwischenvariablen wie

> List<Fahrer> fahrerFuerA1 = ..



Oben