990 likes | 1.13k Vues
Assoziationen (Beziehungen). Zwischen Objekten kann es eine Beziehung geben. Beispiel. Ein Autonarr steckt sein ganzes Geld in sein (einziges) Auto, mit dem er keinen anderen - außer sich selbst - fahren läßt.
E N D
Ein Autonarr steckt sein ganzes Geld in sein (einziges) Auto, mit dem er keinen anderen - außer sich selbst - fahren läßt.
Also:Zu einem Auto gibt es genau einen Fahrer und zu dem Fahrer gibt es genau ein Auto.
Leserichtung (optional) Beziehungspfeil;Navigation unidirektional; also nur in eine Richtung: vom Auto zum Fahrer Name der Assoziation(optional) 1 1 gehört Kardinalitäten (zu einem Auto gibt es einen Fahrer und zu einem Fahrer gibt es ein Auto
Bemerkung:Zwecks übersichtlicher Darstellung werden nicht benutzte get- und set- Methoden weggelassen.
Kfz-Zeichen class Auto{ public String kfzZ; public Fahrer f; public void setKfzZeichen( String pKfzZ){ kfzZ = pKfzZ; } } Mit diesem Attribut kommt man vom Auto zum Fahrer Autofahrer
class Fahrer{ public String name; public void setName( String pName){ name = pName; } } Da man vom Fahrer nicht zum Auto kommen muss, braucht man auch kein Attribut, mit dem man zum Auto des Fahrers kommt. Name des Fahrers
public class MainAssoziation_1zu1Uni_nr1a{ public static void main(String[] args){ } } Fahrer myFahrer = new Fahrer(); Auto myCar = new Auto(); myCar.setKfzZeichen("B-KI 11"); myFahrer.setName("Maier"); myCar.f = myFahrer; System.out.println("Name des Autofahrers=" +myCar.f.name); Wie wird ein Fahrer erzeugt? Wie verlinkt man das Auto mit dem Fahrer? Wie wird ein Auto erzeugt? Wie bekommt das Auto das KFZ-Zeichen "B-KI 11" ? Wie gibt man (vom Auto ausgehend) den Namen des Fahrers auf dem Bildschirm aus? Wie bekommt der Fahrer den Namen "Maier" ?
public class MainAssoziation_1zu1Uni_nr1a{ public static void main(String[] args){ } } Fahrer myFahrer = new Fahrer(); Auto myCar = new Auto(); myCar.setKfzZeichen("B-KI 11"); myFahrer.setName("Maier"); myCar.f = myFahrer; System.out.println("Name des Autofahrers=" +myCar.f.name); Warum befindet sich im Design der Klassen Auto und Fahrer ein Verstoß gegen die OOP? Weil die Attribute name, kfzZ und f public sind.
Aufgabe: Schreiben Sie ein Java-Programm, das nicht der OOP widerspricht, (also get- und set- Methoden verwendet) und nur Standard-Konstruktoren besitzt.
Bemerkung:Zwecks übersichtlicher Darstellung werden nicht benutzte get- und set- Methoden weggelassen.
class Auto{ private String kfzZ; private Fahrer f; public void setKfzZeichen( String pKfzZ){ kfzZ = pKfzZ; } public void setFahrer( Fahrer pf){ f = pf; } public Fahrer getFahrer(){ return(f); } // gleich geht es weiter ...
public Auto(){ } }
class Fahrer{ private String name; public void setName( String pName){ name = pName; } public String getName(){ return(name); } public Fahrer(){ } }
public class MainAssoziation_1zu1Uni_nr1b{ public static void main(String[] args) } } Fahrer myFahrer = new Fahrer(); Auto myCar = new Auto(); myCar.setKfzZeichen("B-KI 11"); myFahrer.setName("Maier"); myCar.setFahrer(myFahrer); System.out.println("Name des Autofahrers=" +myCar.getFahrer().getName()); Wie wird ein Fahrer erzeugt? Wie verlinkt man das Auto mit dem Fahrer? Wie wird ein Auto erzeugt? Wie bekommt das Auto das KFZ-Zeichen "B-KI 11" ? Wie gibt man (vom Auto ausgehend) den Namen des Fahrers auf dem Bildschirm aus? Wie bekommt der Fahrer den Namen "Maier" ?
public class MainAssoziation_1zu1Uni_nr1b{ public static void main(String[] args) } } Fahrer myFahrer = new Fahrer(); Auto myCar = new Auto(); myCar.setKfzZeichen("B-KI 11"); myFahrer.setName("Maier"); myCar.setFahrer(myFahrer); System.out.println("Name des Autofahrers=" +myCar.getFahrer().getName()); Welche besondere Methode könnte man auch noch in der Klasse Auto bzw. Fahrer implementieren? Die Konstruktoren!
Aufgabe: Schreiben Sie ein Java-Programm, das get- und set- Methoden verwendet und Konstruktoren (keine Standard- Konstruktoren) besitzt.
Bemerkung:Zwecks übersichtlicher Darstellung werden nicht benutzte get- und set- Methoden weggelassen.
class Auto{ private String kfzZ; private Fahrer f; public Auto(String pKfzZ, Fahrer pf){ kfzZ = pKfzZ; f = pf; } public Fahrer getFahrer(){ return(f); } }
class Fahrer{ private String name; public Fahrer(String pName){ name = pName; } public String getName(){ return(name); } }
public class MainAssoziation_1zu1Uni_nr1 { public static void main(String[] args){ } } Fahrer myFahrer = new Fahrer("Maier"); Auto myCar = new Auto("B-KI 11", myFahrer); System.out.println("Name des Autofahrers=" +myCar.getFahrer().getName()); Wie wird ein Fahrer mit Namen "Maier" erzeugt? Wie wird ein Auto mit KFZ-Zeichen "B-KI 11" erzeugt und gleichzeitig mit dem obigen Fahrer verlinkt? Wie gibt man (vom Auto ausgehend) den Namen des Fahrers auf dem Bildschirm aus?
public class MainAssoziation_1zu1Uni_nr1 { public static void main(String[] args){ } } Fahrer myFahrer = new Fahrer("Maier"); Auto myCar = new Auto("B-KI 11", myFahrer); System.out.println("Name des Autofahrers=" +myCar.getFahrer().getName()); Der Fahrer wird in der Methode main(...) erzeugt. Wo könnte er auch noch erzeugt werden? Bei der Erzeugung eines Autos, also im Konstruktor von Auto.
Aufgabe: Schreiben Sie ein Java-Programm, das den Fahrer nicht in main(...) erzeugt.
class Auto{ private String kfzZ; private Fahrer f; public Auto(String pKfzZ, String pName){ kfzZ = pKfzZ; f = new Fahrer(pName); } public Fahrer getFahrer(){ return(f); } } Im Konstruktor von Auto wird ein Fahrer erzeugt.
class Fahrer{ private String name; public Fahrer(String pName){ name = pName; } public String getName(){ return(name); } } hier ändert sich nichts
public class MainAssoziation_1zu1Uni_nr1 { public static void main(String[] args){ } } Auto myCar = new Auto("B-KI 11", "Maier"); System.out.println("Name des Autofahrers =" +myCar.getFahrer().getName()); Der Fahrer wird nicht in der Methode main(...) erzeugt, sondern im Konstruktor Auto(...). Wie wird ein Auto mit KFZ-Zeichen "B-KI 11" erzeugt, das von "Maier" gefahren wird ? Wie gibt man (vom Auto ausgehend) den Namen des Fahrers auf dem Bildschirm aus? Wie wird ein Auto erzeugt?
Leserichtung (optional) Beziehungspfeil;Navigation unidirektional; also nur in eine Richtung: vom Auto zum Fahrer Name der Assoziation(optional) 1 1 gehört f Rollennamen. Ein Rollenname kann auch weggelassen werden. Dann muss er aber im UML in der Liste der Attribute notiert werden. Kardinalitäten (zu einem Auto gibt es einen Fahrer und zu einem Fahrer gibt es ein Auto
Es soll das gleiche Programm wie vorher realisiert werden, nur mit einer Navigation in alle zwei Richtungen (bidirektional), wobei die Verlinkung der 2 Objekte durch Direktzugriff auf die public Attribute erfolgt. Vorher noch eine Frage ...
Warum braucht man eine Navigation in zwei Richtungen ? Es reicht doch, wenn man von einem Ausgangspunkt überall hin kommt.
In manchen Fällen (siehe GUI und Listener) kommt man nicht immer an einen Ausgangspunkt: Man kann von main aus auf ein Fenster und darin auf eine Wanze (Listener) zugreifen. Doch bei einem Mausklick muss man von der Wanze ausgehend auf das Fenster zugreifen.
Navigation birektional; also in zwei Richtungen: vom Auto zum Fahrer und vom Fahrer zum Auto 1 1 Manchmal wird in UML bidirektional durch einen Pfeil mit 2 Pfeilspitzen dargestellt. Alles ist gleich wie vorher, außer der Bidirektionalität
Mit diesem Attribut kommt man vom Auto zum Fahrer class Auto{ public String kfzZ; public Fahrer f; public void setKfzZeichen( String pKfzZ){ kfzZ = pKfzZ; } }
Mit diesem Attribut kommt man vom Fahrer zum Auto class Fahrer{ public String name; public Auto a; public void setName( String pName){ name = pName; } }
public class MainAssoziation_1zu1Bi_nr1a{ public static void main(String[] args) } } Fahrer myFahrer = new Fahrer(); Auto myCar = new Auto(); myFahrer.setName("Maier"); myCar.setKfzZeichen("B-KI 11"); myCar.f = myFahrer; myFahrer.a = myCar; Wie wird ein Fahrer erzeugt? Wie verlinkt man das Auto mit dem Fahrer? Wie wird ein Auto erzeugt? Wie bekommt der Fahrer den Namen "Maier" ? Wie verlinkt man den Fahrer mit dem Auto ? Wie bekommt das Auto das KFZ-Zeichen "B-KI 11" ?
public class MainAssoziation_1zu1Bi_nr1a{ public static void main(String[] args) } } Fahrer myFahrer = new Fahrer(); Auto myCar = new Auto(); myFahrer.setName("Maier"); myCar.setKfzZeichen("B-KI 11"); myCar.f = myFahrer; myFahrer.a = myCar; System.out.println("Name des Autofahrers=" +myCar.f.name); System.out.println("K-Zeichen des Fahrers=" +myFahrer.a.kfzZ); Wie gibt man (vom Auto ausgehend) den Namen des Fahrers auf dem Bildschirm aus? Wie gibt man (vom Fahrer ausgehend) das Kfz-Zeichen des Autos auf dem Bildschirm aus?
Was geben die folgenden Anweisungen auf dem Bildschirm aus? public class MainAssoziation_1zu1Bi_nr1a { public static void main(String[] args){ Fahrer myFahrer = new Fahrer(); Auto myCar = new Auto(); myFahrer.setName("Maier"); myCar.setKfzZeichen("B-KI 11"); myCar.f = myFahrer; myFahrer.a = myCar; System.out.println(myCar.f.a.name); System.out.println(myCar.f.a.kfzZ); System.out.println(myCar.f.a.f.name); System.out.println(myCar.f.a.f.a.kfzZ); System.out.println(myCar.kfzZ); System.out.println(myFahrer.a.f.a.f.name); System.out.println(myFahrer.name); Kfz-Zeichen des Autos: "B-KI 11" syntaktisch falsch: Auto hat kein Attribut name Name des Autofahrers: "Maier" Name des Autofahrers: "Maier" Kfz-Zeichen des Autos: "B-KI 11" } } Name des Autofahrers: "Maier" Kfz-Zeichen des Autos: "B-KI 11"
public class MainAssoziation_1zu1Bi_nr1a { public static void main(String[] args){ Fahrer myFahrer = new Fahrer(); Auto myCar = new Auto(); myFahrer.setName("Maier"); myCar.setKfzZeichen("B-KI 11"); myCar.f = myFahrer; myFahrer.a = myCar; System.out.println(myCar.f.a.name); System.out.println(myCar.f.a.kfzZ); System.out.println(myCar.f.a.f.name); System.out.println(myCar.f.a.f.a.kfzZ); System.out.println(myCar.kfzZ); System.out.println(myFahrer.a.f.a.f.name); Warum befindet sich im Design der Klassen Auto und Fahrer ein Verstoß gegen die OOP? Weil die Attribute name, kfzZ, a und f public sind. } }
Aufgabe: Schreiben Sie ein Java-Programm, das nicht der OOP widerspricht, (also get- und set- Methoden verwendet) und nur Standard-Konstruktoren besitzt.
Bemerkung:Zwecks übersichtlicher Darstellung werden nicht benutzte get- und set- Methoden weggelassen.
class Auto{ private String kfzZ; private Fahrer f; public Auto(){ } public void setKfzZeichen(String pKfzZ){ kfzZ = pKfzZ; } public String getKfzZeichen(){ return(kfzZ); } public void setFahrer(Fahrer pf){ f = pf; } public Fahrer getFahrer(){ return(f); } } Mit diesem Attribut kommt man vom Auto zum Fahrer
class Fahrer{ private String name; private Auto a; public Fahrer(){ } public void setName(String pName){ name = pName; } public String getName(){ return(name); } public void setAuto(Auto pa){ a = pa; } public Auto getAuto(){ return(a); } } Mit diesem Attribut kommt man vom Fahrer zum Auto
public class MainAssoziation_1zu1Bi_nr1a{ public static void main(String[] args) } } Fahrer myFahrer = new Fahrer(); Auto myCar = new Auto(); myFahrer.setName("Maier"); myCar.setKfzZeichen("B-KI 11"); myCar.setFahrer(myFahrer); myFahrer.setAuto(myCar); Wie wird ein Fahrer erzeugt? Wie verlinkt man das Auto mit dem Fahrer? Wie wird ein Auto erzeugt? Wie bekommt der Fahrer den Namen "Maier" ? Wie verlinkt man den Fahrer mit dem Auto ? Wie bekommt das Auto das KFZ-Zeichen "B-KI 11" ?
public class MainAssoziation_1zu1Bi_nr1a{ public static void main(String[] args) } } Fahrer myFahrer = new Fahrer(); Auto myCar = new Auto(); myFahrer.setName("Maier"); myCar.setKfzZeichen("B-KI 11"); myCar.setFahrer(myFahrer); myFahrer.setAuto(myCar); System.out.println("Name des Autofahrers=" +myCar.getFahrer().getName()); System.out.println("K-Zeichen des Fahrers=" +myFahrer.getAuto().getKfzZeichen()); Wie gibt man (vom Auto ausgehend) den Namen des Fahrers auf dem Bildschirm aus? Wie gibt man (vom Fahrer ausgehend) das Kfz-Zeichen des Autos auf dem Bildschirm aus?