320

Programmierung · OOP

Objektorientiert programmieren

Du lernst, Software in sinnvolle Klassen aufzuteilen, die zusammenarbeiten, statt alles in eine lange Datei zu schreiben.

Fortgeschritten Fortgeschritten ca. 25 Std. SelbststudiumApplikationsentwicklung: 2. Lehrjahr · Berufsfachschule
#OOP#Klassen#Objekte#Vererbung#Interfaces#UML#Unit-Tests#Clean Code

Überblick

Worum geht es?

Im ersten Lehrjahr hast du gelernt, dass Code funktioniert. Jetzt geht es darum, dass er auch verständlich, erweiterbar und testbar bleibt. Du zerlegst eine Aufgabe in Klassen mit klaren Verantwortlichkeiten, verbindest sie über Beziehungen und Interfaces und prüfst mit Unit-Tests, dass alles korrekt läuft. Am Ende kannst du eine kleine Anwendung mit mehreren fachlichen Klassen sauber entwerfen, umsetzen und dokumentieren.

Wofür brauchst du das?

Fast jede Business-Software (z.B. in Java, C# oder Kotlin) ist objektorientiert aufgebaut. Wer OOP versteht, findet sich im Code des Lehrbetriebs schneller zurecht, kann Features einbauen, ohne Bestehendes zu zerstören, und legt die Basis für Module wie 223 (Multi-User-Applikationen), 295 (Backend) und 450 (Testen).

Das solltest du schon können

  • Variablen, Datentypen, Verzweigungen, Schleifen und eigene Funktionen sicher einsetzen (Modul 319)
  • Eine IDE bedienen: Projekt anlegen, Programm starten, mit dem Debugger Schritt für Schritt durchgehen
  • Einfache Fehlermeldungen lesen und selbstständig beheben

Typische Tools & Technologien

JavaC#PythonIntelliJ / Visual StudioJUnit / xUnitPlantUML / draw.io

Lernziele

Was musst du können?

Das sind die Fähigkeiten, die am Ende des Moduls sitzen sollten. Jedes Ziel mit einem Beispiel aus dem Lehrbetrieb.

  1. 1

    Aus einer Aufgabenstellung passende Klassen ableiten

    Kompetenz A

    Du liest eine Anforderung und erkennst, welche 'Dinge' darin vorkommen (z.B. Kunde, Bestellung, Artikel), welche Daten sie haben und was sie tun. Daraus entstehen Klassen mit klaren Zuständigkeiten statt einer grossen Sammelklasse.

    Situation

    Der Lehrbetrieb möchte ein kleines Tool, mit dem Mitarbeitende Laptops ausleihen und zurückgeben können.

    Deine Aufgabe

    Bestimme die fachlichen Klassen und ihre wichtigsten Attribute und Methoden.

    Gutes Ergebnis

    Klassen 'Geraet', 'Mitarbeiter' und 'Ausleihe'. Eine Ausleihe kennt Gerät, Person, Start- und Rückgabedatum und kann prüfen, ob sie überfällig ist.

    KlasseObjektAttributMethodeVerantwortlichkeit (SRP)Domänenmodell
  2. 2

    Daten schützen und nur über Methoden verändern lassen

    Kompetenz B

    Attribute sind privat, Änderungen laufen über Methoden, die Regeln durchsetzen. So kann niemand ein Objekt in einen ungültigen Zustand bringen, z.B. einen negativen Lagerbestand.

    Situation

    In einer Lagerverwaltung wird der Bestand direkt überschrieben und ist plötzlich negativ.

    Deine Aufgabe

    Baue die Klasse 'Artikel' so um, dass der Bestand nur über 'einlagern()' und 'auslagern()' änderbar ist.

    Gutes Ergebnis

    'bestand' ist private, 'auslagern(menge)' wirft einen Fehler, wenn zu wenig vorhanden ist. Ein Getter liefert den aktuellen Wert.

    private / publicGetter / SetterInvarianteKonstruktor
  3. 3

    Beziehungen, Vererbung und Interfaces gezielt einsetzen

    Kompetenz C

    Du entscheidest, ob Klassen einander kennen (Assoziation), ob eine Klasse eine Spezialisierung einer anderen ist (Vererbung) oder ob mehrere Klassen nur dasselbe können müssen (Interface). Und du weisst, wann Vererbung die falsche Wahl ist.

    Situation

    Ein Shop verkauft physische Produkte, die versendet werden, und digitale Produkte, die man herunterlädt.

    Deine Aufgabe

    Modelliere, wie beide Produktarten ihren Versand bzw. ihre Auslieferung berechnen.

    Gutes Ergebnis

    Ein Interface 'Lieferbar' mit 'liefern()', implementiert von 'PhysischesProdukt' (Paket) und 'DigitalesProdukt' (Download-Link). Der Warenkorb arbeitet nur mit 'Lieferbar'.

    AssoziationKompositionVererbungabstrakte KlasseInterfacePolymorphie
  4. 4

    Den Entwurf mit UML skizzieren und den Code dokumentieren

    Kompetenz A, E

    Bevor du programmierst, hältst du den Entwurf in einem Klassendiagramm fest. Für Abläufe nutzt du ein Sequenzdiagramm. Im Code beschreibst du öffentliche Methoden mit Doc-Kommentaren, sodass andere sie verstehen, ohne den Code zu lesen.

    Situation

    Dein Berufsbildner will vor der Umsetzung sehen, wie du das Ausleih-Tool aufbauen möchtest.

    Deine Aufgabe

    Erstelle ein Klassendiagramm mit Klassen, Attributen, Methoden und Beziehungen inkl. Multiplizitäten.

    Gutes Ergebnis

    Ein Diagramm, in dem man sieht: ein Mitarbeiter hat 0..* Ausleihen, eine Ausleihe gehört genau zu einem Gerät. Dazu Javadoc/XML-Doc für alle öffentlichen Methoden.

    KlassendiagrammSequenzdiagrammMultiplizitätJavadoc / XML-Doc
  5. 5

    Polymorphie nutzen, um if-else-Ketten zu vermeiden

    Kompetenz D

    Statt mit vielen Abfragen zu prüfen, um welchen Typ es sich handelt, rufst du dieselbe Methode auf und jede Klasse reagiert auf ihre Art. Neue Varianten kommen dazu, ohne bestehenden Code anzupassen.

    Situation

    Eine Lohnberechnung enthält eine riesige switch-Anweisung für Festangestellte, Stundenlöhner und Lernende.

    Deine Aufgabe

    Refaktoriere die Berechnung, sodass jeder Mitarbeitertyp seinen Lohn selbst berechnet.

    Gutes Ergebnis

    Abstrakte Klasse 'Mitarbeiter' mit 'berechneLohn()'. Drei Unterklassen überschreiben die Methode, und die Lohnliste ruft nur noch 'm.berechneLohn()' auf.

    Überschreiben (override)dynamische BindungOpen-Closed-PrinzipRefactoring
  6. 6

    Klassen mit Unit-Tests auf Korrektheit prüfen

    Kompetenz E

    Du schreibst automatisierte Tests für die wichtigsten Methoden, inklusive Grenzfälle. So merkst du sofort, wenn eine Änderung etwas kaputt macht.

    Situation

    Die Methode 'istUeberfaellig()' der Ausleihe liefert manchmal falsche Ergebnisse.

    Deine Aufgabe

    Schreibe Tests für: Rückgabe heute fällig, gestern fällig, bereits zurückgegeben.

    Gutes Ergebnis

    Drei JUnit-/xUnit-Tests nach dem Muster Arrange-Act-Assert. Ein Test schlägt fehl und zeigt den Fehler beim Datumsvergleich.

    Unit-TestArrange-Act-AssertGrenzfallTestabdeckung

Selbsteinschätzung

Wo stehst du?

Die Kompetenzmatrix zerlegt das Modul in Themenstränge und drei Stufen. Für den Kompetenznachweis solltest du überall mindestens Stufe 2 erreichen. Dein Stand bleibt in diesem Browser gespeichert und färbt Lernweg und Übungen ein.

Tippe auf eine Aussage, um deinen Stand zu setzen: offen unsicher sitzt
A

Klassen finden und modellieren

Ziel 1Ziel 4

Grundlagen

Fortgeschritten

Erweitert

B

Kapselung und Objektzustand

Ziel 2

Grundlagen

Fortgeschritten

Erweitert

C

Beziehungen, Vererbung und Interfaces

Ziel 3

Grundlagen

Fortgeschritten

Erweitert

D

Polymorphie und Refactoring

Ziel 5

Grundlagen

Fortgeschritten

Erweitert

E

Testen und Dokumentieren

Ziel 6Ziel 4

Grundlagen

Fortgeschritten

Erweitert

Praxisfall

Das Ausleih-Tool der Treuhand Brunner AG

Mia ist im 2. Lehrjahr bei der Treuhand Brunner AG in Aarau, 40 Mitarbeitende. Laptops werden bisher über eine Excel-Liste ausgeliehen, und ständig weiss niemand, wo ein Gerät ist. Ihr Berufsbildner gibt ihr den Auftrag, ein kleines Ausleih-Tool in Java zu bauen.

  1. Kapitel 1

    Wer macht hier eigentlich was?

    Mia spricht 20 Minuten mit der Office-Managerin und notiert jedes Nomen, das fällt: Laptop, Mitarbeiterin, Ausleihe, Rückgabe, Frist. Daraus streicht sie Doppeltes und landet bei drei Klassen: Geraet, Mitarbeiter und Ausleihe. Für jede schreibt sie auf, was sie weiss und was sie kann.

    Ziel 1

  2. Kapitel 2

    Der Plan auf einer Seite

    Bevor sie programmiert, zeichnet Mia ein Klassendiagramm. Im Review fragt ihr Berufsbildner, ob eine Mitarbeiterin mehrere Geräte gleichzeitig haben darf. Mia ergänzt die Multiplizität 0..* und merkt, dass sie diese Regel sonst erst im Code entdeckt hätte.

    Ziel 4

  3. Kapitel 3

    Kein Laptop doppelt verliehen

    Im ersten Test verleiht ein Kollege denselben Laptop zweimal. Mia macht den Status im Geraet privat und lässt Ausleihen nur noch über eine Methode zu, die prüft, ob das Gerät frei ist. Ein doppeltes Ausleihen löst jetzt eine klare Fehlermeldung aus.

    Ziel 2

  4. Kapitel 4

    Monitore und Beamer kommen dazu

    Die Geschäftsleitung ist begeistert und will auch Monitore und Beamer verleihen. Beamer dürfen nur 3 Tage weg sein, Laptops 30. Statt überall if-Abfragen einzubauen, führt Mia eine abstrakte Klasse Geraet mit der Methode ausleihfrist() ein. Jede Geräteart liefert ihre eigene Frist.

    Ziel 3Ziel 5

  5. Kapitel 5

    Der Fehler mit dem Rückgabedatum

    Ein Laptop wird als überfällig gemeldet, obwohl er am Fälligkeitstag zurückkam. Mia schreibt drei Unit-Tests für fällig gestern, heute und morgen. Der Test für heute schlägt fehl: Sie hatte Datum und Uhrzeit verglichen. Nach der Korrektur laufen alle Tests grün, und sie ergänzt die Doc-Kommentare für die Übergabe.

    Ziel 6

Lernweg

Wie lernst du das?

  1. 1

    Denken in Objekten

    ca. 3 Std.

    Bevor du Code schreibst, übst du, die Welt in Objekte zu zerlegen. Das ist der wichtigste und am meisten unterschätzte Schritt.

    • Drei Alltagssysteme (Bibliothek, Kino, Kantine) auf Papier in Klassen zerlegen
    • Für jede Klasse notieren: Was weiss sie? Was kann sie?
    • Mit CRC-Karten (Klasse, Verantwortung, Partner) einen Ablauf durchspielen

    Trainiert Kompetenz A1

    Lernziel1

  2. 2

    Erste Klassen sauber bauen

    ca. 4 Std.

    Du setzt einzelne Klassen mit Konstruktor, privaten Attributen und Methoden um und lernst, Regeln im Objekt durchzusetzen.

    • Klasse 'Bankkonto' mit einzahlen/abheben und Überzugsschutz programmieren
    • Mehrere Objekte erzeugen und im Debugger ihren Zustand beobachten
    • toString(), equals() und hashCode() bewusst überschreiben

    Trainiert Kompetenz B1B2

    Lernziel2

  3. 3

    Klassen verbinden

    ca. 5 Std.

    Jetzt arbeiten mehrere Klassen zusammen. Du übst Assoziationen, Listen von Objekten und den Unterschied zwischen Vererbung und Interface.

    • Ein Mini-Modell 'Kunde, Bestellung, Artikel' mit Listen umsetzen
    • Dieselbe Aufgabe einmal mit Vererbung und einmal mit Interface lösen und vergleichen
    • Ein Klassendiagramm zum eigenen Code zeichnen

    Trainiert Kompetenz C1C2A2

    Lernziel34

  4. 4

    Polymorphie und Refactoring

    ca. 5 Std.

    Du nimmst bestehenden 'Spaghetti-Code' und baust ihn schrittweise objektorientiert um, ohne dass sich das Verhalten ändert.

    • switch-Anweisung durch polymorphe Methoden ersetzen
    • Lange Methoden in kleinere mit sprechenden Namen aufteilen
    • Code-Review mit einer Kollegin oder einem Tutor durchführen

    Trainiert Kompetenz D2D3C3

    Lernziel5

  5. 5

    Absichern mit Tests

    ca. 4 Std.

    Du schreibst Unit-Tests für deine Klassen und lernst, Grenzfälle systematisch zu finden.

    • Für jede öffentliche Methode mindestens einen positiven und einen negativen Test schreiben
    • Absichtlich einen Fehler einbauen und prüfen, ob ein Test ihn findet
    • Testabdeckung in der IDE anzeigen lassen und Lücken schliessen

    Trainiert Kompetenz E1E2

    Lernziel6

  6. 6

    Alles zusammen: Mini-Projekt

    ca. 4 Std.

    Du entwirfst und baust eine kleine Anwendung mit 3 bis 5 fachlichen Klassen von A bis Z, wie im Kompetenznachweis.

    • Anforderung lesen, Klassendiagramm skizzieren, umsetzen, testen, dokumentieren
    • Zeit stoppen und mit der erwarteten Prüfungsdauer vergleichen
    • Ergebnis jemandem in 5 Minuten erklären

    Trainiert Kompetenz A2B3E3

    Lernziel1346

Üben

Übungen aus der Praxis

Bibliotheksverwaltung

Einstieg Einstieg

Eine Schulbibliothek verwaltet Bücher und Ausleihen bisher in Excel.

Weist nach A1B2

  1. Klassen 'Buch', 'Leser' und 'Ausleihe' mit sinnvollen Attributen anlegen
  2. Ein Buch darf nur ausgeliehen werden, wenn es verfügbar ist
  3. Alle aktuell ausgeliehenen Bücher eines Lesers ausgeben
Tipp anzeigen

Überlege, welche Klasse wissen muss, ob ein Buch verfügbar ist: das Buch selbst oder die Bibliothek?

Lösungsskizze anzeigen

Eine Klasse 'Bibliothek' hält Listen von Büchern und Ausleihen. 'ausleihen(buch, leser)' prüft die Verfügbarkeit, erstellt eine Ausleihe und markiert das Buch. Die Abfrage filtert die Ausleihen nach Leser.

Fahrzeugflotte mit Polymorphie

Fortgeschritten Fortgeschritten

Eine Firma hat Autos, E-Bikes und Lieferwagen. Jedes Fahrzeug berechnet seine Kosten pro Kilometer anders.

Weist nach C2D2

  1. Eine gemeinsame Abstraktion für alle Fahrzeuge definieren
  2. Pro Fahrzeugtyp die Kostenberechnung umsetzen
  3. Die Gesamtkosten einer Fahrtenliste berechnen, ohne den Typ abzufragen
Tipp anzeigen

Wenn du 'instanceof' oder einen Typ-String abfragst, ist das ein Zeichen, dass Polymorphie fehlt.

Lösungsskizze anzeigen

Abstrakte Klasse oder Interface 'Fahrzeug' mit 'kostenProKm()'. Drei Implementierungen. Die Fahrt kennt Fahrzeug und Distanz und ruft 'fahrzeug.kostenProKm() * km' auf.

Warenkorb mit Rabattregeln testen

Anspruchsvoll Anspruchsvoll

Ein Online-Shop gewährt 10 % ab CHF 100 und gratis Versand ab CHF 50. Es gibt Kundenbeschwerden über falsche Beträge.

Weist nach C3E2E3

  1. Klassen 'Warenkorb', 'Position' und eine austauschbare Rabattstrategie modellieren
  2. Grenzfälle definieren (genau CHF 50, genau CHF 100, leerer Warenkorb)
  3. Unit-Tests schreiben, Fehler finden und korrigieren
  4. Klassendiagramm und Doc-Kommentare ergänzen
Tipp anzeigen

Rabattregeln ändern sich oft. Eine eigene Klasse pro Regel macht sie einzeln testbar.

Lösungsskizze anzeigen

Interface 'Rabattregel' mit 'anwenden(betrag)'. Der Warenkorb summiert die Positionen und wendet eine Liste von Regeln an. Die Tests decken die Werte knapp unter, genau auf und knapp über jeder Grenze ab.

Selbstcheck

Kannst du das beantworten?

Was ist der Unterschied zwischen einer Klasse und einem Objekt?

Die Klasse ist der Bauplan (welche Attribute und Methoden es gibt). Ein Objekt ist ein konkretes Exemplar mit eigenen Werten, z.B. das Konto von Anna mit CHF 250.

Warum macht man Attribute privat?

Damit Änderungen nur über Methoden laufen, die Regeln prüfen. So bleibt das Objekt immer in einem gültigen Zustand, und man kann die interne Umsetzung später ändern.

Wann wählst du ein Interface statt Vererbung?

Wenn Klassen nur dieselbe Fähigkeit teilen, aber fachlich nichts miteinander zu tun haben. Vererbung passt nur bei einer echten 'ist-ein'-Beziehung mit gemeinsamem Verhalten.

Was bedeutet Polymorphie in einem Satz?

Derselbe Methodenaufruf führt je nach tatsächlichem Objekttyp zu unterschiedlichem Verhalten.

Was bedeutet die Multiplizität 0..* in einem Klassendiagramm?

Ein Objekt kann mit keinem, einem oder beliebig vielen Objekten der anderen Klasse verbunden sein.

Welche drei Teile hat ein gut strukturierter Unit-Test?

Arrange (Ausgangslage vorbereiten), Act (Methode aufrufen), Assert (Ergebnis prüfen).

Prüfung

Stolpersteine & Prüfungstipps

Typische Stolpersteine

  • Eine 'Gott-Klasse', die alles macht: Wenn eine Klasse mehr als eine Aufgabe hat, aufteilen.
  • Vererbung nur, um Code wiederzuverwenden, obwohl keine echte 'ist-ein'-Beziehung besteht.
  • Für jedes Attribut automatisch Getter und Setter generieren und damit die Kapselung aushebeln.
  • Das Klassendiagramm erst nach dem Code zeichnen. Dann zeigt es nur, was ist, nicht was geplant war.
  • Nur den 'Happy Path' testen und Grenzfälle wie leere Listen oder Null-Werte vergessen.

Tipps für den Kompetenznachweis

  • Starte immer mit einer Skizze der Klassen (5 Minuten). Das spart später viel Umbauarbeit.
  • Benenne Klassen mit Nomen und Methoden mit Verben, damit dein Entwurf selbsterklärend ist.
  • Wenn die Zeit knapp wird: lieber weniger Funktionen, dafür sauber gekapselt und getestet.
  • Begründe Designentscheide kurz im Kommentar oder in der Doku, z.B. warum du ein Interface gewählt hast.

Glossar

Begriffe kurz erklärt

Klasse
Bauplan, der festlegt, welche Daten (Attribute) und Fähigkeiten (Methoden) Objekte haben.
Objekt
Konkretes Exemplar einer Klasse mit eigenen Werten.
Kapselung
Interne Daten verstecken und nur über definierte Methoden zugänglich machen.
Vererbung
Eine Klasse übernimmt Eigenschaften und Verhalten einer allgemeineren Klasse und spezialisiert sie.
Interface
Vertrag, der festlegt, welche Methoden eine Klasse anbieten muss, ohne die Umsetzung vorzugeben.
Polymorphie
Gleicher Aufruf, unterschiedliches Verhalten je nach Objekttyp.
Single Responsibility Principle
Jede Klasse sollte genau einen Grund haben, sich zu ändern.
Unit-Test
Automatisierter Test, der eine kleine Einheit (meist eine Methode) isoliert prüft.

Mit KI-Tutor

Jeder Kurs hat einen persönlichen KI-Tutor

  • Erklärt in deinem Tempo
  • Debuggt mit dir
  • Fachgespräch wie im QV
  • Unbegrenzt neue Übungen

Denkanstösse statt fertiger Lösungen. In der Gratis-Lektion zum Ausprobieren.

KI-Tutor · Modul 164Nur Tipps

Mein JOIN liefert plötzlich doppelte Zeilen. Was mache ich falsch?
Gute Frage! Schau dir die Spalte an, über die du verbindest: Ist sie in beiden Tabellen eindeutig? Was passiert mit einer Kundin, die zwei Bestellungen hat?
Ah, dann kommt sie zweimal vor …
Genau. Willst du die Bestellungen zählen oder nur die Kundinnen sehen? Je nachdem hilft dir GROUP BY oder DISTINCT.

Tutavio

So helfen wir dir bei Modul 320

  • Wir gehen mit dir eine Aufgabe aus deinem Unterricht durch und zeichnen gemeinsam das Klassendiagramm, bevor du programmierst.
  • Wir machen ein Code-Review deines Projekts und zeigen dir konkret, wo Kapselung oder Verantwortlichkeiten noch nicht stimmen.
  • Wir üben mit dir Grenzfälle zu finden und Unit-Tests zu schreiben, die echte Fehler aufdecken.
  • Vor dem Kompetenznachweis simulieren wir eine Prüfungsaufgabe unter Zeitdruck und besprechen danach deine Lösung.

Unverbindlich anfragen. Wir melden uns innert 24 Stunden.

Tutor:in für Modul 320 finden

Passende Module

Diese Seite ist eine eigene Lernhilfe von Tutavio und keine offizielle Modulbeschreibung. Nummer, Titel und Einordnung stammen aus den öffentlichen Bildungsplänen. Die verbindliche Modulidentifikation findest du im Modulbaukasten von ICT-Berufsbildung Schweiz.

Gratis-LektionNachhilfe