Zurück zur StartseiteInformatik · EF · Fach wechseln
Kostenlos starten
EF · Informatik
Objekte, Suchen und Sortieren, Binärcodes und Rechnerarchitektur · Objekte und Klassen

Modellierung und Implementierung von Klassen

Die Schulbibliothek deiner Gesamtschule in Bonn verleiht Hunderte Bücher an Hunderte Schülerinnen und Schüler. Niemand schreibt für jedes Buch ein eigenes Programmstück. Wie beschreibt man viele ähnliche „Dinge“ mit einem einzigen Bauplan, und wie sorgt man dafür, dass niemand diese Dinge versehentlich kaputt macht? Genau darum geht es in der objektorientierten Modellierung.

Objekte und Klassen

Bei der Analyse eines Problems suchst du zuerst die Objekte: die Dinge, mit denen das System arbeitet. In der Bibliothek sind das zum Beispiel ein bestimmtes Buch, eine Leserin oder eine Ausleihe.

Jedes Objekt hat Attribute (Eigenschaften mit Werten) und kann Operationen ausführen oder erleidet sie (später: Methoden).

Objekt buch1 Objekt buch2
Titel „Krabat“ „Tintenherz“
Autor Otfried Preußler Cornelia Funke
verliehen false true

Beide Objekte gehören zur Klasse Buch. Sie haben dieselben Attribute, aber unterschiedliche Werte. Die Klasse ist also der Bauplan, die Objekte sind die gebauten Exemplare.

Üben★☆☆Nicht begonnen
Die Gesamtschule Bonn verwaltet ihre Bibliothek mit einem Programm. Nennen Sie drei Objekte, die in diesem System vorkommen können, und geben Sie jeweils zwei Attribute…

Die Gesamtschule Bonn verwaltet ihre Bibliothek mit einem Programm. Nennen Sie drei Objekte, die in diesem System vorkommen können, und geben Sie jeweils zwei Attribute mit Beispielwerten an. Erklären Sie außerdem den Unterschied zwischen einem Objekt und einer Klasse.

Lösen

Klassendiagramm und Sichtbarkeit

Ein Klassendiagramm stellt eine Klasse als Rechteck mit drei Bereichen dar: Klassenname, Attribute (mit Datentyp), Methoden.

Klassendiagramm der Klasse Buch mit Attributen und Methoden Buch - titel: String - verliehen: boolean + getTitel(): String + verleihen(): void

- bedeutet private, + bedeutet public. Die Sichtbarkeit legt fest, wer auf ein Element zugreifen darf:

  • private: nur Code innerhalb der eigenen Klasse.

  • public: Code in jeder Klasse.

Warum? Eine Klasse soll ihren Zustand selbst schützen. Eine set-Methode kann ungültige Werte abweisen, ein direkter Zugriff nicht (Prinzip der Kapselung, siehe unten).

Üben★☆☆Nicht begonnen
Gegeben ist die Klasse Schueler mit den Attributen name (String), klasse (String) und alter (int) sowie den Methoden getName() und setKlasse(String neueKlasse). a)…

Gegeben ist die Klasse Schueler mit den Attributen name (String), klasse (String) und alter (int) sowie den Methoden getName() und setKlasse(String neueKlasse).

  1. a) Zeichnen Sie das zugehörige Klassendiagramm (als Tabelle mit drei Bereichen: Klassenname, Attribute, Methoden).
  1. b) Geben Sie an, welche Attribute und Methoden Sie als private und welche als public deklarieren würden, und begründen Sie Ihre Wahl kurz.
Lösen

Klassen in Java implementieren

Aus dem Diagramm wird Quellcode. Eine Klasse besteht aus Attributen, einem Konstruktor (setzt den Anfangszustand beim Erzeugen) und Methoden.

/** Ein Sparbuch-Konto. */

public class Konto {

    private String inhaber;

    private double kontostand;

    public Konto(String inhaber) {

        this.inhaber = inhaber;

        this.kontostand = 0.0;

    }

    public void einzahlen(double betrag) {

        if (betrag > 0) {

            kontostand = kontostand + betrag;

        }

    }

    public double getKontostand() {

        return kontostand;

    }

}

Der Konstruktor trägt den Namen der Klasse und hat keinen Rückgabetyp. this.inhaber meint das Attribut des Objekts, inhaber allein den Parameter. Ein Objekt entsteht mit new:

Konto k = new Konto("Lena");

k.einzahlen(50);

k ist eine Referenz: Sie verweist auf das Objekt. Der Punkt ruft eine Methode des Objekts auf.

Methoden mit Ergebnis haben einen Rückgabetyp und return; Methoden ohne Ergebnis sind void.

public boolean abheben(double betrag) {

    if (betrag <= kontostand) {

        kontostand = kontostand - betrag;

        return true;

    }

    return false;

}
Üben★☆☆Nicht begonnen
Gegeben ist der folgende Java-Quelltext: a) Nennen Sie Klassenname, Attribute, Konstruktor und Methoden. b) Ein Objekt wird mit Fahrrad f = new Fahrrad("Lena"); erzeugt,…

Gegeben ist der folgende Java-Quelltext:

public class Fahrrad {

    private String besitzer;

    private int gang;

    public Fahrrad(String besitzer) {

        this.besitzer = besitzer;

        this.gang = 1;

    }

    public void hochschalten() {

        gang = gang + 1;

    }

}
  1. a) Nennen Sie Klassenname, Attribute, Konstruktor und Methoden.
  1. b) Ein Objekt wird mit Fahrrad f = new Fahrrad("Lena"); erzeugt, danach wird zweimal f.hochschalten(); aufgerufen. Geben Sie den Objektzustand (Attributwerte) nach diesen Anweisungen an.
Lösen
Üben★★☆Nicht begonnen
Implementieren Sie in Java eine Klasse Konto für eine Sparkasse in Dortmund mit dem privaten Attribut kontostand (double, Anfangswert 0,0), dem privaten Attribut inhaber…

Implementieren Sie in Java eine Klasse Konto für eine Sparkasse in Dortmund mit

  • dem privaten Attribut kontostand (double, Anfangswert 0,0),

  • dem privaten Attribut inhaber (String),

  • einem Konstruktor, der den Inhaber setzt,

  • der Methode einzahlen(double betrag), die nur positive Beträge akzeptiert,

  • der Methode abheben(double betrag), die true zurückgibt und den Betrag abbucht, wenn der Betrag positiv ist und der Kontostand ausreicht, sonst false und keine Änderung,

  • der Methode getKontostand().

Dokumentieren Sie die Methode abheben mit einem Javadoc-Kommentar.

Lösen

Dokumentation und Kommunikation zwischen Objekten

Objekte arbeiten zusammen, indem sie sich gegenseitig Methoden aufrufen („Nachrichten senden“). Eine Methode kann dazu ein anderes Objekt als Parameter erhalten:

public boolean ueberweisen(Konto ziel, double betrag) {

    if (abheben(betrag)) {

        ziel.einzahlen(betrag);

        return true;

    }

    return false;

}

Bei k1.ueberweisen(k2, 80) ruft k1 bei sich selbst abheben auf und bei k2 die Methode einzahlen. Hatte k1 120 € und k2 50 €, so hat danach k1 40 € und k2 130 €.

Damit andere die Methoden nutzen können, ohne den Code zu lesen, dokumentiert man sie mit einem Javadoc-Kommentar:

/**


 * Hebt Geld vom Konto ab.


 * @param betrag der abzuhebende Betrag in Euro (positiv)


 * @return true, wenn abgebucht wurde; false, wenn das Guthaben nicht reicht

 */

public boolean abheben(double betrag) { ... }

Die Dokumentation beschreibt Zweck, Parameter, Rückgabe und gegebenenfalls Vorbedingungen, nicht jede einzelne Codezeile.

Üben★★☆Nicht begonnen
Ein Objekt k1 der Klasse Konto aus einer Sparkasse hat den Kontostand 120,00 €, ein Objekt k2 den Kontostand 50,00 €. Die Klasse besitzt die Methode ueberweisen(Konto…

Ein Objekt k1 der Klasse Konto aus einer Sparkasse hat den Kontostand 120,00 €, ein Objekt k2 den Kontostand 50,00 €. Die Klasse besitzt die Methode ueberweisen(Konto ziel, double betrag), die vom eigenen Konto abhebt und beim Zielkonto einzahlt.

  1. a) Geben Sie die Kontostände von k1 und k2 nach k1.ueberweisen(k2, 80); an.
  1. b) Geben Sie die Kontostände nach einem weiteren Aufruf k1.ueberweisen(k2, 80); an, wenn die Methode bei zu geringem Guthaben nichts ausführt.
  1. c) Erklären Sie, wie hier die Kommunikation zwischen den Objekten abläuft.
Lösen

Assoziation

Klassen stehen oft in Beziehung. Ein Verein hat Mannschaften, eine Mannschaft hat Mitglieder. Das nennt man Assoziation. Im Diagramm zeichnet man eine Linie und schreibt die Kardinalitäten an die Enden: Wie viele Objekte stehen auf der anderen Seite?

Assoziation zwischen Mannschaft und Mitglied mit Kardinalität 1 zu n Mannschaft Mitglied - name: String - name: String - geburtsjahr: int 1 n hat

Gelesen: Eine Mannschaft hat viele Mitglieder; ein Mitglied gehört zu genau einer Mannschaft (1 : n). In Java setzt man die Assoziation um, indem eine Klasse ein Attribut vom Typ der anderen oder ein Feld (Array) davon enthält, z. B. private Mitglied[] mitglieder; in Mannschaft und private Mannschaft mannschaft; in Mitglied.

Üben★★☆Nicht begonnen
Ein Sportverein in Münster möchte seine Mitglieder und Mannschaften verwalten. Ein Mitglied hat Name, Geburtsjahr und Beitrag (in €). Eine Mannschaft hat einen Namen und…

Ein Sportverein in Münster möchte seine Mitglieder und Mannschaften verwalten. Ein Mitglied hat Name, Geburtsjahr und Beitrag (in €). Eine Mannschaft hat einen Namen und mehrere Mitglieder; jedes Mitglied gehört zu genau einer Mannschaft.

  1. a) Ermitteln Sie die Klassen und ihre Attribute.
  1. b) Beschreiben Sie die Assoziation zwischen den Klassen einschließlich der Kardinalitäten (1 : n).
  1. c) Zeichnen Sie das Klassendiagramm (Textdarstellung genügt) mit Assoziation.
Lösen

Vererbung und Kapselung

Lehrkräfte und Schülerinnen und Schüler haben beide Name und Geburtsdatum. Statt das doppelt zu schreiben, legt man eine Oberklasse Person an. Die Unterklassen Lehrkraft und Schueler erben deren Attribute und Methoden und ergänzen eigene. Im Diagramm zeigt ein Pfeil mit leerer Spitze von der Unterklasse zur Oberklasse („ist ein“).

Vererbung: Lehrkraft und Schueler erben von Person Person name, geburtsdatum Lehrkraft kuerzel, faecher Schueler klasse, notenschnitt
public class Person {

    private String name;

    private String geburtsdatum;

    public Person(String name, String geburtsdatum) {

        this.name = name;

        this.geburtsdatum = geburtsdatum;

    }

}

public class Schueler extends Person {

    private String klasse;

    public Schueler(String name, String geburtsdatum, String klasse) {

        super(name, geburtsdatum);

        this.klasse = klasse;

    }

}

extends stellt die Vererbung her. super(...) ruft den Konstruktor der Oberklasse auf und muss in der ersten Zeile stehen. Vorteile: Gemeinsames steht nur einmal (weniger Code, Änderungen an einer Stelle), und die Unterklassen sind klar als Spezialfälle von Person modelliert.

Eine Unterklasse erbt private-Attribute zwar, kann aber nicht direkt darauf zugreifen. Sie nutzt dafür die public-Methoden der Oberklasse.

Üben★★★Nicht begonnen
Für eine Schulverwaltung in Köln sollen Personen modelliert werden. Es gibt Lehrkräfte (mit Kürzel und Fächern) und Schülerinnen und Schüler (mit Klasse und…

Für eine Schulverwaltung in Köln sollen Personen modelliert werden. Es gibt Lehrkräfte (mit Kürzel und Fächern) und Schülerinnen und Schüler (mit Klasse und Notendurchschnitt). Beide haben Name und Geburtsdatum.

  1. a) Entwerfen Sie ein Klassendiagramm mit einer Oberklasse Person und zwei Unterklassen. Begründen Sie die Verteilung der Attribute.
  1. b) Schreiben Sie die Java-Köpfe der drei Klassen einschließlich der extends-Beziehung und der Konstruktoren (Aufruf von super).
  1. c) Erläutern Sie zwei Vorteile der Vererbung gegenüber getrennten, unabhängigen Klassen.
Lösen
Üben★★★Nicht begonnen
Gegeben ist: a) Ein Entwickler schreibt in einer anderen Klasse z.wert = 5;. Erklären Sie, warum dies zu einem Übersetzungsfehler führt, und beschreiben Sie das Prinzip…

Gegeben ist:

public class Zaehler {

    private int wert;

    public Zaehler() { wert = 0; }

    public void erhoehe() { wert++; }

    public int getWert() { return wert; }

}
  1. a) Ein Entwickler schreibt in einer anderen Klasse z.wert = 5;. Erklären Sie, warum dies zu einem Übersetzungsfehler führt, und beschreiben Sie das Prinzip der Kapselung.
  1. b) Erweitern Sie die Klasse um eine Methode setzeZurueck() und einen Konstruktor mit Startwert, der negative Startwerte durch 0 ersetzt.
  1. c) Zaehler a = new Zaehler(); Zaehler b = a; a.erhoehe(); b.erhoehe(); Geben Sie a.getWert() an und begründen Sie das Ergebnis mit dem Unterschied zwischen Objekt und Referenz.
Lösen
Üben★★★Nicht begonnen
Ein Verleih in Hamburg vermietet Fahrräder und E-Bikes. Ein Kunde kann mehrere Fahrzeuge gleichzeitig ausleihen; ein Fahrzeug ist zu einem Zeitpunkt höchstens an einen…

Ein Verleih in Hamburg vermietet Fahrräder und E-Bikes. Ein Kunde kann mehrere Fahrzeuge gleichzeitig ausleihen; ein Fahrzeug ist zu einem Zeitpunkt höchstens an einen Kunden verliehen. E-Bikes haben zusätzlich einen Akkustand in Prozent.

  1. a) Ermitteln Sie die Klassen, Attribute, wichtigsten Methoden, Vererbungs- und Assoziationsbeziehungen und stellen Sie sie in einem Klassendiagramm dar (Textdarstellung).
  1. b) Geben Sie für die Methode ausleihen(Fahrzeug f) der Klasse Kunde eine Dokumentation (Zweck, Parameter, Rückgabe, Vorbedingung) an.
  1. c) Beurteilen Sie, ob der Akkustand public sein sollte, und begründen Sie Ihre Antwort.
Lösen

Auf einen Blick

Zurück zum Anfang: Der Bauplan Buch beschreibt alle Bibliotheksbücher, und weil Attribute privat sind, ändert nur die Bibliothek selbst den Ausleihstatus.

Alle Aufgaben zu diesem Abschnitt anzeigen