MINT üben

Objekte, die Objekte kennen

Ein Fahrer weiß, welches Auto er fährt — aber woher? Objekte können sich gegenseitig kennen, und das verändert alles.

1

Beziehungen im Diagramm

  • Assoziation:ein Objekt der einen Klasse kennt ein Objekt der anderen Klasse.
  • Klassendiagramm:einfache Linie zwischen den Klassen, beschriftet mit der Beziehung.
  • Kardinalität:wie viele Objekte gekannt werden: 1, 0..1 oder n.
  • Umsetzung:ein Attribut vom Typ der anderen Klasse: - auto: Auto.
  • Richtung:„Fahrer kennt Auto“ — nur der Fahrer hat das Attribut, das Auto weiß nichts vom Fahrer.
Fahrer
  • - name: Zeichenkette
  • - auto: Auto
  • c Fahrer(name: Zeichenkette)
  • + setAuto(a: Auto)
  • + getAuto(): Auto
kennt0..1
Auto
  • - kennzeichen: Zeichenkette
  • - farbe: Zeichenkette
  • c Auto(k: Zeichenkette, f: Zeichenkette)
  • + getKennzeichen(): Zeichenkette

Ein Fahrer kennt höchstens ein Auto.

Merke

Assoziation: Ein Objekt der einen Klasse kennt ein Objekt der anderen Klasse.

Klassendiagramm: einfache Linie zwischen den Klassen, beschriftet mit der Beziehung.

Kardinalität: wie viele Objekte gekannt werden, 1, 0..1 oder n.

Umsetzung: ein Attribut vom Typ der anderen Klasse, z. B. - auto: Auto. Die Beziehung hat eine Richtung: Nur der Kennende hat das Attribut.

2

Beziehungen herstellen und nutzen

  • Herstellen:im Konstruktor oder per Setter: f1.setAuto(a1);
  • Nutzen:Methode über die Referenz aufrufen: auto.getKennzeichen() — das Objekt gibt die Arbeit weiter.
  • Kette:von außen: f1.getAuto().getKennzeichen() — von links nach rechts gelesen.
  • null prüfen:solange kein Auto gesetzt ist, steht in auto der Wert null.
public class Fahrer {
    private String name;
    private Auto auto;                    // anfangs null

    public Fahrer(String name) {
        this.name = name;
    }
    public void setAuto(Auto a) {
        this.auto = a;
    }
    public String ansage() {
        if (auto == null) {
            return name + " hat kein Auto";
        }
        return name + " fährt " + auto.getKennzeichen();
    }
}

Ziehe die Pfeilspitzen der Fahrer auf ein Auto oder auf null — mit der Tastatur: Pfeilspitze fokussieren, ↑/↓ wählt das Ziel. Das Readout wertet die Ausdrücke rechts sofort aus.

Wer fährt welches Auto?

Halte fest: Die Beziehung ist nur eine Referenz im Attribut auto. Über sie ruft der Fahrer Methoden seines Autos auf — zeigt sie auf null, scheitert der Aufruf.

Merke

Assoziation: Die Klasse bekommt ein Attribut vom Typ der anderen Klasse. Über diese Referenz ruft das Objekt Methoden des anderen auf — vorher auf null prüfen.

Herstellen: im Konstruktor oder per Setter, z. B. f1.setAuto(a1);.

Nutzen: Methode über die Referenz aufrufen, auto.getKennzeichen(); von außen als Kette f1.getAuto().getKennzeichen().

null: Solange nichts gesetzt ist, steht in der Referenz null; ein Aufruf darauf scheitert.

3

Allgemeine Hinweise

NullPointerException

Ruft man getKennzeichen() über eine Referenz auf, die null ist, bricht das Programm ab. Erst prüfen, dann aufrufen.

Kennen ist nicht Besitzen

Zwei Fahrer können dasselbe Auto kennen. Es gibt dann nur ein Auto-Objekt — eine Änderung sehen beide.

Satz bilden

„Fahrer kennt Auto“ laut lesen: Das Subjekt des Satzes bekommt das Attribut.

Videos