17_Association
Code-Dateien
| Dateiname | Aktion |
|---|---|
| CODECode_ClassRoom.zip | Download |
| CODECode_Student.zip | Download |
| CODECode_Urlaub.zip | Download |
PDF-Dokumente
| Dateiname | Aktion |
|---|---|
| PDFFolie_ClassRoom.pdf | Öffnen |
| PDFFolie_Student.pdf | Öffnen |
| PDFUebung_Computer.pdf | Öffnen |
| PDFUebung_Labor.pdf | Öffnen |
| PDFUebung_Wohnung.pdf | Öffnen |
Videos
| Dateiname | Aktion |
|---|---|
| VIDEOVideo_ClassRoom_E | Abspielen |
| VIDEOVideo_Fenster_D | Abspielen |
| VIDEOVideo_Student_D | Abspielen |
| VIDEOVideo_Urlaub_D | Abspielen |
Lernmaterialien
Assoziation
School Klasse anlegen
Es handelt sich vorab um eine ganz normale Basisklasse.
public class School
{
private String name;
public School(String name)
{
setName(name);
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}Die beiden Klassen haben nichts miteinander zu tun (kein PFEIL).
Eigenschaften
public class School
{
private String name;
private Student student0;
private Student student1;
private Student student2;Eine School besteht aus mehreren Student
(student0, student1 und
student2).
In der Informatik beginnt man immer mit 0 zu zählen.
Die School Klasse merkt sich somit die
Objektreferenzen.
Beim Anlegen einer School
sind alle Objektreferenzen null!
Aufnehmen
Für das Hinzufügen von Studenten benötigen wir eine aufnehmen Methode:
public void aufnehmen(Student wer)
{
}Diese Methode bekommt eine fertige Objektreferenz übergeben.
Für den Aufruf benötigen wir 2 Instanzen (1 School und 1 Student):
Beim Aufruf kann man die Objektreferenz von Student übergeben.
public void aufnehmen(Student wer)
{
if (student0 == null)
{
student0 = wer;
}
else
{
if (student1 == null)
{
student1 = wer;
}
else
{
if (student2 == null)
{
student2 = wer;
}
else
{
System.out.println("Fehler: kein Platz!");
}
}
}
}
Ausgeben
Vor dem Aufruf einer Methode muss geprüft werden, ob es sich um eine gültige Objektreferenz handelt. Danach kann von der Referenz eine Methode aufgerufen werden.
public void printSchool()
{
System.out.println(name);
if (student0 != null)
{
student0.printStudent();
}
if (student1 != null)
{
student1.printStudent();
}
if (student2 != null)
{
student2.printStudent();
}
}jungsterStudent
Liefert das Alter des jüngsten Studierenden.
Beachten:
alle 3 Objektreferenzen geören überprüft
vor dem Methodenaufruf wird gepüft ob die Referenz nicht null ist!
java.lang.NullPointerExceptionlokale Variable
min= sehr hoher Startwertif (studentX.getAlter() < min)dann wurde ein neues Minimun gefunden.
public int jungsterStudent()
{
int min;
min = 999;
if (student0 != null)
{
if (student0.getAlter() < min)
{
min = student0.getAlter();
}
}
if (student1 != null)
{
if (student1.getAlter() < min)
{
min = student1.getAlter();
}
}
if (student2 != null)
{
if (student2.getAlter() < min)
{
min = student2.getAlter();
}
}
if (min == 999)
{
System.out.println("Fehler: kein Student!");
}
return min;
}int min; min = 999;
lokale Variable mit einem hohen Startwert.
if (student0 != null)
vor dem Methodenaufruf wird geprüft, ob die Objektreferenz gültig ist.
if (min == 999) {
System.out.println("Fehler: kein Student!");
}
Im Fehlerfall wird eine Meldung ausgegeben.
JUnit Test
Testfälle:
leer … kein Student in der Schule
1 … nur ein Student in der Schule
2 … nur zwei Studenten in der Schule
pos0 … der jüngste Studierende ist auf Position 0
pos1 … der jüngste Studierende ist auf Position 1
pos2 … der jüngste Studierende ist auf Position 2
Beim Implementieren der Testfälle darf die Implementierung der Methode nicht berücksichtigt werden!
@Test
public void test2()
{
School htl;
Student max, susi, alex;
htl = new School("HTL");
max = new Student("Max", 22);
susi = new Student("Susi", 26);
alex = new Student("Alex", 29);
htl.aufnehmen(max);
htl.aufnehmen(susi);
assertEquals (22, htl.jungsterStudent());
}@Test
Definiert einen neuen Testcase
School htl;
Student max, susi, alex;
htl = new School("HTL");
max = new Student("Max", 22);
susi = new Student("Susi", 26);
alex = new Student("Alex", 29);
Es werden für alle Testfälle die Instanzen angelegt - egal ob diese für den einzelnen Testfall notwendig sind!
htl.aufnehmen(max);
htl.aufnehmen(susi);
Die notwendigen Referenzen (für diesen Testcase) werden in der Schule aufgenommen.
assertEquals (22, htl.jungsterStudent());
Welchen Wert erwarte ich mir als Rückgabewert?
Dieser Wert wird dann mit dem tatsächlichem Wert verglichen.
Ganze JUnit Test:
public class SchoolTest
{
@Test
public void testLeer()
{
School htl;
htl = new School("HTL");
assertEquals (999, htl.jungsterStudent());
}
@Test
public void test1()
{
School htl;
Student max, susi, alex;
htl = new School("HTL");
max = new Student("Max", 22);
susi = new Student("Susi", 26);
alex = new Student("Alex", 29);
htl.aufnehmen(max);
assertEquals (22, htl.jungsterStudent());
}
@Test
public void test2()
{
School htl;
Student max, susi, alex;
htl = new School("HTL");
max = new Student("Max", 22);
susi = new Student("Susi", 26);
alex = new Student("Alex", 29);
htl.aufnehmen(max);
htl.aufnehmen(susi);
assertEquals (22, htl.jungsterStudent());
}
@Test
public void testPos0()
{
School htl;
Student max, susi, alex;
htl = new School("HTL");
max = new Student("Max", 22);
susi = new Student("Susi", 26);
alex = new Student("Alex", 29);
htl.aufnehmen(max);
htl.aufnehmen(susi);
htl.aufnehmen(alex);
assertEquals (22, htl.jungsterStudent());
}
@Test
public void testPos1()
{
School htl;
Student max, susi, alex;
htl = new School("HTL");
max = new Student("Max", 22);
susi = new Student("Susi", 20);
alex = new Student("Alex", 29);
htl.aufnehmen(max);
htl.aufnehmen(susi);
htl.aufnehmen(alex);
assertEquals (20, htl.jungsterStudent());
}
@Test
public void testPos2()
{
School htl;
Student max, susi, alex;
htl = new School("HTL");
max = new Student("Max", 22);
susi = new Student("Susi", 26);
alex = new Student("Alex", 19);
htl.aufnehmen(max);
htl.aufnehmen(susi);
htl.aufnehmen(alex);
assertEquals (19, htl.jungsterStudent());
}
}