17_Association

Code-Dateien

DateinameAktion
CODECode_ClassRoom.zipDownload
CODECode_Student.zipDownload
CODECode_Urlaub.zipDownload

PDF-Dokumente

DateinameAktion
PDFFolie_ClassRoom.pdfÖffnen
PDFFolie_Student.pdfÖffnen
PDFUebung_Computer.pdfÖffnen
PDFUebung_Labor.pdfÖffnen
PDFUebung_Wohnung.pdfÖffnen

Videos

DateinameAktion
VIDEOVideo_ClassRoom_EAbspielen
VIDEOVideo_Fenster_DAbspielen
VIDEOVideo_Student_DAbspielen
VIDEOVideo_Urlaub_DAbspielen

Lernmaterialien

Assoziation

School Klasse anlegen

001.png

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).

002.png

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

003.png

sind alle Objektreferenzen null!

004.png

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):

005.png

Beim Aufruf kann man die Objektreferenz von Student übergeben.

006.png
    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!");
                }
            }
        }
    }
007.png

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.NullPointerException

  • lokale Variable min = sehr hoher Startwert

  • if (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());
    }
}