Modulseite

Lektion 1 von 9

Denken in Objekten: von der Anforderung zur Klasse

Du erkennst in einer Anforderung die fachlichen Klassen, ordnest ihnen Attribute, Methoden und Verantwortungen zu und erzeugst erste Objekte in Java.

ca. 40 Min.0/4 Checks gelöst

Worum es geht

Die Treuhand Brunner AG in Aarau hat 40 Mitarbeitende und etliche Laptops, Monitore und Beamer, die ausgeliehen werden. Bisher läuft das über eine Excel-Liste. Das Ergebnis kennst du vielleicht aus deinem eigenen Betrieb: Niemand weiss genau, wo ein Gerät gerade ist, ein Laptop steht zweimal in der Liste, und wer etwas zu spät zurückbringt, merkt niemand.

Mia ist im 2. Lehrjahr und soll dafür ein kleines Ausleih-Tool in Java bauen. Im ersten Lehrjahr hätte sie vermutlich eine lange main-Methode geschrieben: ein Array für Inventarnummern, eines für Namen, ein paar if-Abfragen. Das funktioniert für zwanzig Zeilen. Sobald aber Monitore mit anderen Regeln dazukommen, Fristen geprüft werden müssen und ein Kollege den Code erweitern soll, wird daraus ein Knäuel, das niemand mehr anfassen will.

Objektorientierte Programmierung (OOP) löst das, indem sie den Code so aufteilt, wie die Welt aufgeteilt ist: in Dinge, die etwas wissen und etwas können. In dieser Lektion übst du den wichtigsten und am meisten unterschätzten Schritt: aus einer Beschreibung in normaler Sprache die richtigen Klassen zu finden. Programmiert wird erst am Schluss, und zwar kurz.

Klasse und Objekt: Bauplan und Exemplar

Stell dir den Ausleihschein auf Papier vor, den die Office-Managerin früher benutzt hat. Das leere Formular legt fest, welche Felder es gibt: Inventarnummer, Bezeichnung, ausgeliehen an, Rückgabedatum. Jeder ausgefüllte Schein ist ein eigenes Exemplar mit eigenen Werten.

Genau so funktionieren Klassen und Objekte:

  • Eine Klasse ist der Bauplan. Sie legt fest, welche Daten (Attribute) und welche Fähigkeiten (Methoden) alle Exemplare haben.
  • Ein Objekt ist ein konkretes Exemplar dieser Klasse mit eigenen Werten. Man sagt auch Instanz.
Klasse GeraetObjekt 1Objekt 2
inventarNrTextNB-0042NB-0043
bezeichnungTextThinkPad T14ThinkPad T14
ausgeliehenja oder neinjanein

Jedes Objekt hat drei Eigenschaften:

  1. Zustand: die aktuellen Werte seiner Attribute (NB-0042 ist ausgeliehen).
  2. Verhalten: was es mit seinen Methoden tun kann (ausleihen, zurückgeben).
  3. Identität: Es ist genau dieses eine Objekt. Die beiden Laptops oben haben dieselbe Bezeichnung und sind trotzdem zwei verschiedene Geräte.
Check 1 · Eine AntwortEinstieg

Mia notiert: «Geraet hat eine Inventarnummer und eine Bezeichnung. NB-0042 ist ein ThinkPad T14.» Welche Aussage trifft zu?

Die Nomen-Verb-Methode: Klassen in einem Text finden

Wie kommt man von einer Anforderung zu Klassen? Ein bewährter Einstieg ist die Nomen-Verb-Methode:

  1. Nomen markieren. Jedes Hauptwort ist ein Kandidat für eine Klasse oder ein Attribut.
  2. Synonyme zusammenfassen. «Laptop», «Notebook» und «Gerät» meinen im Gespräch oft dasselbe.
  3. Attribute aussortieren. Ein Nomen, das nur einen einzelnen Wert beschreibt (Name, Datum, Frist, Farbe), ist meistens ein Attribut einer anderen Klasse.
  4. Systemfremdes streichen. Was nur die heutige Lösung oder die Bedienoberfläche betrifft (Excel-Liste, Button, Bildschirmmaske), gehört nicht ins fachliche Modell.
  5. Verben zuordnen. Verben wie ausleihen, zurückgeben oder prüfen werden zu Methoden der Klasse, die dafür zuständig ist.

Für Schritt 3 hilft eine Prüffrage: Hat das Ding eigene Daten UND eigenes Verhalten, und gibt es mehrere davon? Eine Ausleihe hat ein Startdatum und ein Fälligkeitsdatum, kennt Gerät und Person und kann prüfen, ob sie überfällig ist. Das ist eine Klasse. Eine Frist ist nur eine Zahl (30 Tage). Das ist ein Attribut.

Check 2 · Mehrere AntwortenFortgeschritten

Aus der Gesprächsnotiz der Office-Managerin hat Mia diese Nomen markiert. Welche werden im fachlichen Modell zu eigenen Klassen? (mehrere Antworten)

Wähle alle zutreffenden Antworten.

Verantwortlichkeiten: Was weiss es, was kann es?

Klassen zu finden ist nur die halbe Arbeit. Ebenso wichtig ist die Frage, welche Klasse wofür zuständig ist. Zwei Regeln helfen:

  • Die Methode gehört dorthin, wo die Daten sind. Ob eine Ausleihe überfällig ist, hängt vom Fälligkeitsdatum ab. Dieses Datum kennt die Ausleihe, also gehört istUeberfaellig() in die Klasse Ausleihe, nicht in Mitarbeiter und nicht in die main-Methode.
  • Eine Klasse hat genau eine Aufgabe. Das ist das Single Responsibility Principle (SRP): Eine Klasse sollte nur einen Grund haben, sich zu ändern. Ändert sich die Regel für Ausleihfristen, soll genau eine Klasse betroffen sein.

Das Gegenteil heisst Gott-Klasse: eine Klasse AusleihTool mit 1500 Zeilen, die Geräte speichert, Fristen rechnet, E-Mails verschickt und den Bildschirm füllt. Jede kleine Änderung kann dort alles kaputt machen.

Ein praktisches Werkzeug zum Durchdenken sind CRC-Karten (Class, Responsibility, Collaborators). Auf einer Karteikarte stehen der Klassenname, die Verantwortlichkeiten und die Partnerklassen, mit denen die Klasse zusammenarbeitet:

Klasse: Ausleihe
Verantwortungkennt Start und Fälligkeit, prüft, ob sie überfällig ist, hält die Rückgabe fest
PartnerGeraet, Mitarbeiter
Check 3 · Eine AntwortFortgeschritten

Die Methode istUeberfaellig(heute) soll prüfen, ob ein ausgeliehenes Gerät zu spät ist. In welche Klasse gehört sie am ehesten?

Schritt für Schritt: Mias Gesprächsnotiz wird zum Modell

Mia spricht 20 Minuten mit der Office-Managerin. Das ist ihre Notiz:

Text
Wir haben Laptops, und bald auch Monitore und Beamer. Jedes Gerät hat eine
Inventarnummer und eine Bezeichnung. Eine Mitarbeiterin leiht ein Gerät aus,
und ich trage das heute in die Excel-Liste ein, mit Datum und Rückgabefrist.
Laptops haben eine Frist von 30 Tagen. Bei der Rückgabe streiche ich die Zeile.
Ich will sehen, welche Ausleihen überfällig sind, und jeder Mitarbeiter soll
sehen, was er gerade hat.

Schritt 1: Nomen markieren. Laptop, Monitor, Beamer, Gerät, Inventarnummer, Bezeichnung, Mitarbeiterin, Mitarbeiter, Excel-Liste, Datum, Rückgabefrist, Frist, Tage, Rückgabe, Zeile, Ausleihe.

Schritt 2: Synonyme zusammenfassen. Laptop, Monitor und Beamer sind Arten von Gerät. Mitarbeiterin und Mitarbeiter sind dasselbe, Rückgabefrist und Frist ebenso. Die «Zeile» in Excel ist in Wahrheit eine Ausleihe.

Schritt 3: Attribute aussortieren. Inventarnummer und Bezeichnung beschreiben ein Gerät. Datum und Frist beschreiben eine Ausleihe. Die Rückgabe ist ein Ereignis, das bei der Ausleihe ein Rückgabedatum setzt.

Schritt 4: Systemfremdes streichen. Die Excel-Liste ist die alte Lösung, nicht Teil der Fachwelt.

Schritt 5: Klassen und Verantwortungen festlegen.

Klasseweiss (Attribute)kann (Methoden)
GeraetinventarNr, bezeichnung, ausgeliehenausleihen(), zurueckgeben()
MitarbeiterpersonalNr, namegibt Name und Personalnummer an
AusleiheGerät, Mitarbeiter, start, faelligAm, zurueckAmistUeberfaellig(), abschliessen()

Schritt 6: Durchspielen. Mia spielt den Fall «Lea leiht NB-0042 aus» mit den CRC-Karten durch. Wer prüft, ob der Laptop frei ist? Das Gerät, denn es kennt seinen Zustand. Wer berechnet das Fälligkeitsdatum? Die Ausleihe, denn sie kennt das Startdatum. Keine Frage bleibt ohne zuständige Klasse: Das Modell trägt.

Als Skizze sieht das so aus (die genaue Notation lernst du in Lektion 4):

Schritt 7: Ein erster Blick auf Java. Damit du siehst, wohin die Reise geht, hier die Klasse Geraet in ihrer einfachsten Form. Die Attribute sind absichtlich noch ungeschützt. Wie man sie richtig absichert, lernst du in Lektion 2 und 3.

Java
// Datei: Geraet.java (der Bauplan)
public class Geraet {
    // Attribute: Was ein Gerät weiss
    String inventarNr;
    String bezeichnung;
    boolean ausgeliehen;

    // Methoden: Was ein Gerät kann
    void ausleihen() {
        ausgeliehen = true;
    }

    void zurueckgeben() {
        ausgeliehen = false;
    }

    String beschreibung() {
        String zustand = ausgeliehen ? "ausgeliehen" : "verfügbar";
        return inventarNr + " " + bezeichnung + " (" + zustand + ")";
    }
}
Java
// Datei: Main.java (hier entstehen die Objekte)
public class Main {
    public static void main(String[] args) {
        Geraet laptopA = new Geraet();          // erstes Objekt
        laptopA.inventarNr = "NB-0042";
        laptopA.bezeichnung = "ThinkPad T14";

        Geraet laptopB = new Geraet();          // zweites Objekt, gleicher Bauplan
        laptopB.inventarNr = "NB-0043";
        laptopB.bezeichnung = "ThinkPad T14";

        laptopA.ausleihen();                    // nur laptopA ändert sich

        System.out.println(laptopA.beschreibung());
        System.out.println(laptopB.beschreibung());
    }
}

Ausgabe:

Text
NB-0042 ThinkPad T14 (ausgeliehen)
NB-0043 ThinkPad T14 (verfügbar)

Beide Objekte stammen aus demselben Bauplan, aber laptopA.ausleihen() verändert nur laptopA. Jedes Objekt hat seinen eigenen Zustand.

Check 4 · Code-LaborEinstieg

Code-Labor: Deine erste Klasse. Ergänze die Klasse Geraet um die Methoden ausleihen(), zurueckgeben() und beschreibung(). beschreibung() liefert zum Beispiel NB-0042 ThinkPad T14 (verfügbar) oder NB-0042 ThinkPad T14 (ausgeliehen).

Das Labor läuft in JavaScript. Die Klasse sieht fast gleich aus wie in Java, und this meint auch hier das aktuelle Objekt.

Code-Labor · JavaScript
Strg + Enter

Typische Fehler

  1. Jedes Nomen wird eine Klasse. Eine Klasse Frist mit einem einzigen Attribut tage bringt nichts. Prüffrage: eigene Daten UND eigenes Verhalten? Wenn nicht, ist es ein Attribut.
  2. Verben werden Klassen. Klassen wie Ausleihen oder RueckgabeMachen mit nur einer Methode zeigen, dass du in Abläufen statt in Dingen denkst. Achtung: Ausleihe (das Nomen) ist trotzdem eine gute Klasse, denn sie hat Daten und Verhalten.
  3. Gott-Klasse. Alles landet in AusleihTool. Teile auf, sobald du eine Klasse nur mit «und» beschreiben kannst: «speichert Geräte UND verschickt Mails UND ...».
  4. Klasse und Objekt verwechselt. «Ich mache eine Klasse Lea» ist falsch. Lea ist ein Objekt der Klasse Mitarbeiter. Klassen sind Kategorien, Objekte sind konkrete Exemplare.
  5. Technik statt Fachlichkeit. ExcelZeile, Button oder Datenbank gehören nicht ins Domänenmodell. Das Modell beschreibt die Fachwelt der Treuhand Brunner AG, nicht die Werkzeuge.

Zusammenfassung

  • Eine Klasse ist ein Bauplan mit Attributen und Methoden, ein Objekt ein konkretes Exemplar mit eigenem Zustand und eigener Identität.
  • Mit der Nomen-Verb-Methode findest du Kandidaten: Nomen markieren, Synonyme zusammenfassen, Attribute und Systemfremdes aussortieren, Verben als Methoden zuordnen.
  • Prüffrage für eine Klasse: eigene Daten, eigenes Verhalten, mehrere Exemplare.
  • Die Methode gehört dorthin, wo die Daten sind. Jede Klasse hat genau eine Verantwortung (SRP).
  • CRC-Karten helfen, einen Ablauf vor dem Programmieren durchzuspielen.
  • Für Mias Tool ergeben sich drei fachliche Klassen: Geraet, Mitarbeiter und Ausleihe.

Mit deiner eigenen KI vertiefen

Kopiere einen Prompt in Claude, ChatGPT oder Claude Code. Er macht die KI zur Lernbegleitung statt zum Lösungsautomaten.

Sokratischer Modellier-Coach Chat-KI

Du übst, aus einer Anforderung Klassen zu finden, und die KI stellt dir Fragen, statt dir das Modell zu verraten. Ideal nach Lektion 1 und vor Projekt-Meilenstein 1.