Kursthemen

  • 12 E: Softwareentwicklung

    Herzlich Willkommen im Kurs Informatik 12 E zum Thema Objektorientierte Softwareentwicklung!

    Sie werden in diesem Kurs lernen, wie komplexe Softwareprojekte geplant, entwickelt und realisiert werden. Die dabei notwendigen Handlungsschritte ermöglichen Ihnen einen Zugang zu Problemlösetechniken der Informatik. Grundlagen sind die in Klasse 10 und im vorherigen Kapitel "Algorithmen und Daten" wiederholten algorithmischen Strukturen und Konzepte. 

    Der Moodle-Kurs begleitet den Unterricht. Sie finden hier Tafelbilder, Aufgaben, Dateien, Arbeitsblätter sowie Lösungen. Die Unterlagen werden schrittweise und i. d. R nach dem Unterricht veröffentlicht. 

    Hinweis: 2023-10-02 Der Kurs wird aktuell gepflegt und bearbeitet.

    • Kommunikation im Kurssystem

      Neben der direkten Kommunikation mithilfe des Moodle-Mitteilungsdienstes, der auch auf der App funktioniert und der E-Mail-Option, gibt es öffentliche Austausch- und Informationsmöglichkeiten in den Foren.

    • Fachbegriffe und Hilfen

      Als Hilfen stehen Tafelwerkergänzungen zur Verfügung, die jederzeit - auch in Lernkontrollen, Klausuren und in der Abiturprüfung - verwendet werden dürfen.

      Zusätzlich gibt es ein Informationsheft von Klett sowie ein Glossar. Diese Unterlagen sind nicht als Hilfsmittel in Lernkontrollen, Klausuren und in der Abiturprüfung zugelassen.

    • Icon Datei
      BlueJ-Buch Teil 1 Datei
      Nicht verfügbar, es sei denn: Sie sind in einer Gruppe
    • Software im Themenfeld

      Der Großteil der im Unterricht eingesetzten Programmwerkzeuge ist als Open Source oder Freeware deklariert. Für Hausaufgaben oder zum Nachvollziehen der Unterrichtsbeispiele kann der IoStick für die Sekundarstufe II benutzt werden. 

  • Allgemeines/Organisatorisches

    Unabhängig von den Softwareprojekten gibt es hier allgemeine Aktivitäten.

  • Projekt Banksystem

    "Was ist ein Einbruch in eine Bank gegen die Gründung einer Bank?"
    Mackie Messer in Brechts "Die Dreigroschenoper"

    Die Entwicklung einer Software zur Verwaltung von Kunden und deren Geldtransaktionen über deren Konten unsere Wossi-Bank ist unser erstes komplexes Softwareprojekt. Es wird deutlich über die bisherigen algorithmischen Ansätze hinausgehen. Für die Analyse der Geschäftsvorgänge und die Abbildung dieser in ein informatisches Modell nutzen wir konsequent die sogenannte objektorientierte Modellierung und anschließend die objektorientierte Implementierung, die uns bereits ansatzweise in den Projekten mit dem Turtlezeichner bzw.  Turtlerechner joe begegnet ist.

    • Entwicklung einer Anforderungsdefinition

    • Icon Datei
      1. Reflektieren Sie die Schrittfolge für das Abheben von Bargeld von Ihrem Konto mit Ihrer Kundenkarte an einem Geldautomaten. Erfassen Sie in einer Übersicht weitere Transaktionen, die Sie am Bankautomaten bzw. am Bankschalter durchführen könnten. Geben Sie Details der Tätigkeiten an (z. B. Karte einstecken, PIN eingeben, ...) an.
      2. Führen Sie beispielhaft Transaktionen mit der Bankingsoftware durch. Vergleichen Sie mit Ihren Aufzeichnungen. Ergänzen und korrigieren Sie. Seien Sie kreativ und versuchen Sie, die Sicherheitsmaßnahmen der Bankingsoftware zu umgehen (hier dürfen Sie das zwinkernd).
        Hinweis: Die Daten der Kunden befinden sich in der zugehörigen Text-Datei. 
      3. Erfassen Sie alle Aspekte, die in der Bankingsoftware nicht korrekt laufen bzw. die verbesserungswürdig sind.
    • Icon Aufgabe

      Spielen Sie das Bankwesen an der Wossi-Bank durch. In den Dateien finden Sie Karten für Kunden und Konten sowie mögliche Szenarien. Beobachten Sie alle Transaktionen und das Verhalten der Kunden/Bankangestellten.

    • Analyse eines Kunden - Klasse Kunde

      Zur Darstellung des Grundmodells nutzen wir in der objektorientierten Modellierung das Klassendiagramm. Es funktioniert ähnlich dem ER-Diagramm in der Datenbankentwicklung. 

      Eine Klasse beschreibt den Aufbau und die Funktionalität von gleichartigen Objekten. Sie ist ein Bauplan für die Erzeugung solcher Objekte. In der ER-Modellierung kennen wir den Entitätstyp dafür. Die neue Qualität der objektorientieren Modellierung liegt in der Angabe von Fähigkeiten (sog. Methoden), die ein Objekt hat. Diese werden nach Auftrag und Anfrage unterschieden. Eine besondere Fähigkeit ist die Erzeugung und Initialisierung eines Objekts. Dafür wird ein Konstruktor benötigt.

      Beispiel: Kunde

      Den Entitätstyp Kunde kennen wir aus der Datenbankmodellierung. Er kann mithilfe der Eigenschaften Kundennummer, Name, Vorname und Geburtsdatum beschrieben werden.

      ER-Diagramm des Entitätstyps Kunde

      Erst in der physischen Phase der Datenbankentwicklung erfolgt die Festlegung der Datentypen der einzelnen Attribute.

      In der objektorientierten Softwareentwicklung beschreiben wir im Klassendiagramm die Attribute und die Fähigkeiten (Methoden) und überlegen uns gleich geeignete Datentypen zur Speicherung der Daten. Wie bei Variablen können wir dabei primitive Datentypen (GANZZAHL, GLEITKOMMAZAHL, ZEICHEN, WAHRHEITSWERT) oder Objekttypen (in Java z. B. ZEICHENKETTE) verwenden.

      Attribute:

      • kundennummer: GANZZAHL
      • name, vorname, geburtsdatum: ZEICHENKETTE

      Auch für Methoden werden Datentypen verwendet, die die Rückgabe beschreiben. Da ein Auftrag keine Rückgabe hat, lautet in Java die Typangabe void. Konstruktoren haben keine Typangabe. Für jeden Parameter einer Methode muss ebenfalls der Datentyp festgelegt werden. Somit ist die Klasse Kunde beschrieben mit:

      1. Erzeugen und Initialisieren eines Objekts mithilfe von Parameter für Kundennummer, Name, Vorname und Geburtsdatum → Konstruktor Kunde
      2. Abfrage der Eigenschaften → Anfrage getKundennummer, getName, getVorname und getGeburtsdatum
        Die Datentypen entsprechen den Typen der angefragten Eigenschaften.
      3. Änderungen ausgewählter Eigenschaften, beispielsweise des Namens nach Heirat → Auftrag setName
        Da sich in der Regel Vorname, Kundennummer und Geburtsdatum nicht ändern, gibt es dafür auch keine Aufträge.
      4. Ausdruck aller Kundeninformationen (Recht auf Dateneinsicht) → Auftrag druckeDaten


      Klassendiagramm (Klassenkarte) der Klasse Kunde mit Datentypen für Java

      Das Klassendiagramm gibt die obige Beschreibung kompakt wieder. Oberer Kasten - Klassenname, mittlerer Kasten - Eigenschaften nebst Datentyp, unterer Kasten: Konstruktor und Fähigkeiten/Methoden. 

    • Entwicklung eines Grundmodells

      Ausgehend von den Grundregeln der Wossi-Bank erfolgt nun eine objektorientiere Analyse der Geschäftsvorgänge. Ziel ist dabei die Erweiterung des Klassendiagramms Kunde um die Klasse Konto. Wir nutzen dazu eine ähnliches Vorgehen wie bei der Entwicklung eines ER-Modells. 

      Für die Entwicklung des Modells stehen die Aufzeichnungen aus der Analyse der Bankingsoftware und des Rollenspiels sowie die darin enthaltenen Objektkarten zur Verfügung.

      1. Ermittlung von Substantiven/Eigennamen zur Identifikation von Objekten/Klassen
        Die Hauptwörter beschreiben mögliche Objekte oder Klassen. Liegen Oberbegriffe vor, handelt es sich in der Regel um eine Klasse.
      2. Ermittlung von Adjektiven zur Identifikation der Eigenschaften der Objekte/Klassen
        Adjektive bezeichnen häufig die Eigenschaftsangaben von Objekten. Es sind die Eigenschaft und alle möglichen Werte pro Objekt/Klasse zu erfassen. 
      3. Ermittlung von Verben zur Identifikation der Fähigkeiten der Objekte/Klassen bzw. der Beziehungen zwischen den Objekten/Klassen
        Verben bezeichnen häufig Fähigkeiten von Objekten oder Zusammenhänge zwischen Objekten. Im ersten Fall ist zu prüfen, ob für das Realisieren der Fähigkeit weitere Angaben (Parameter) notwendig sind oder ob die Fähigkeit in eine Antwort mündet (Anfrage). Im zweiten Fall ist zu erfassen, welche und wie viele Objekte miteinander in Beziehung stehen. 
    • Entwurf 1 für Konto und Kunde

    • Icon Aufgabe

      Öffnen Sie das Projekt in BlueJ. Sie finden einen Entwurf der Klassen Kunde und Konto vor, der sich jedoch von unseren Überlegungen unterscheidet. Die Unterschiede gibt es zu finden und zu beheben. Außerdem sind einige Funktionalitäten noch nicht oder fehlerhaft implementiert. Daher ist es notwendig, die Klassen gründlich zu prüfen.

      1. Erzeugen Sie die Klassenkarten der Klassen Kunde und Konto über das Kontextmenü der jeweiligen Klasse. Vergleichen Sie mit der Vorgabe. Notieren Sie sich Unterschiede.
      2. Öffnen Sie den Quelltext der Klassen. Betrachten Sie die Realisierung von Attributen und Methoden. Ergänzen Sie die fehlenden Attribute und Methodenköpfe mit leerem Rumpf. Beachten Sie dabei, dass Anfragemethoden stets eine Rückgabe erwarten. Dies kann vorläufig auch ein fester Wert sein.
      3. Wenn die Klassendiagramme identisch sind, dann erzeugen Sie Objekte der Klasse und testen Sie die Funktionalität der Methoden. Beheben Sie alle Probleme.

    • Prinzip der Datenkapselung

      Wer hat eigentlich Zugriff auf unsere Konten? Könnte ein Dieb in unsere Bank einbrechen und Geld stehlen? 

    • Icon Aufgabe

      Fügen Sie in BlueJ über "Bearbeiten - Klasse aus Datei hinzufügen..." die Klasse Dieb ins Projekt ein. Legen Sie mindestens zwei Konten an und einen Dieb an. Dieser benötigt natürlich auch ein Konto, daher müssen Sie eines der beiden Konten dem Dieb zuordnen. Versuchen Sie nun, mithilfe der Methoden des Diebs das andere Konto zu "erleichtern". Was geht, was nicht?

      Ändern Sie die Klasse Konto so ab, dass jedes Attribut mit der Sichtbarkeit private deklariert wird. Testen Sie anschließend erneut.

    • Die Schlüsselwörter public und private legen kontrollierte Zugriffsoptionen auf Attribute und Methoden fest. Dies bezeichnet man als Kapselung. Damit können Klassen den internen Zustand anderer Klassen nicht unkontrolliert lesen oder ändern. Der Zugriff auf die Eigenschaften und Methoden erfolgt über wohldefinierte Schnittstellen. Der innere Aufbau einer Klasse und der darin implementierten Algorithmen soll den Anwender nicht interessieren (Geheimnisprinzip). Durch die Kapselung werden nur Angaben über die Funktionsweise einer Klasse nach außen sichtbar, nicht aber die interne Darstellung.

      Veranschaulichung der Datenkapselung an einem Beispiel

      Das folgende Bild veranschaulicht das Prinzip. Nur über definierte Methoden ist ein Zugriff auf die Eigenschaften möglich. So gibt es z. B. keine Möglichkeit, auf die PIN direkt zuzugreifen.


    • Beziehungen zwischen Objekten

      Wieso gab es eigentlich eine Linie zwischen Dieb und Konto? Wo kommen überhaupt die ganzen Linien her?

    • Icon Aufgabe

      Analyse

      Erforschen Sie die Realisierung der Beziehung zwischen Dieb und Konto. Geben Sie Gründe und Ursachen für die Beziehung an.

      Realisierung/Transfer

      Erzeugen Sie im aktuellen Arbeitsstand des Projekts eine Beziehung zwischen Kunde und Konto in dem Sinne, dass ein Konto genau einem Kunde gehört. Stellen Sie eine Analogie zur Umwandlung einer 1:n-Beziehung im ER-Modell zu dieser Beziehung her. Erweitern Sie die Klasse so, dass der Kontoinhaber im Konstruktor festgelegt wird und es eine Methode zum Abfragen des Inhabers gibt. Testen Sie Ihr Szenario.

    • Eine Assoziation ist eine Beziehung zwischen Objekten. Wir können Sie mit einer 1:1- oder 1:n-Beziehung aus der Datenbankentwicklung vergleichen. In unserem Fall besitzt das Konto genau einen Inhaber, daher gibt es ein der Klasse Konto einen Verweis (Referenz) auf ein Objekt der Klasse Kunde. Dies wird in der Klasse durch das Referenzattribut inhaber deutlich.


    • 3-Schicht-Architektur

      Unser bisheriges Modell bildet das Banksystem ab. Als echte Nutzersoftware geht es aber noch nicht durch, da stören mehrere Aspekte:

      1. Alle Objekte (Kunden und Konten) existieren nur zur Laufzeit des Programms. Es gibt keine Möglichkeit der Datenspeicherung etwa in einer Datenbank.
      2. Es gibt keine grafische Benutzeroberfläche. Selbst ein Bankautomat hat wenigstens Eingabefelder, Schaltflächen und Informationselemente.


      Diese beiden Erweiterungen werden durch die 3-Schicht-Architektur realisiert. 

      Die Grafik- und die Fachkonzeptschicht wird in der Literatur auch als Model-View-Controller-Prinzip bezeichnet. 

    • Mögliche Weiterentwicklung GUI/Controller mit:

      • Exceptions
        Erarbeiten Sie sich ein Merkblatt über Exceptions (Überwachen möglicher (Konvertierungs-) Fehler und dem Aufruf speziellen Programmcodes zur Fehlerbehandlung). Verwenden Sie dazu Christian Ullenboom: Java ist auch eine Insel.
        Nutzen Sie Ihr Wissen zur Verbesserung Ihrer GUI.
      • Standarddialoge
        Erarbeiten Sie sich ein Merkblatt über die Verwendung einfacher Standarddialoge aus der GUI heraus, um etwa Fehlermeldungen oder Eingaben zu realisieren. Verwenden Sie dazu Christian Ullenboom: Java ist auch eine Insel.
        Nutzen Sie Ihr Wissen zur Verbesserung Ihrer GUI.
  • Crossroads

    • Das CrossRoads-Modell zeigt eine beleuchtete Ampelkreuzung mit vier Fahrzeugampeln, acht bedarfsgesteuerten Fußgängerampeln für die Überwege, sechs Induktionsschleifen, einem Blitzer und einem Helligkeitssensor. Das Modell wird über USB mit dem PC verbunden und kann in der Entwicklungsumgebung über das unsichtbare Objekt hardware der Klasse Hardware verwendet werden.

      Wir verwenden BlueJ in einer 32-bit-Version, da die Ansteuerung der Kreuzung leider nur darüber funktioniert.

    • crossroads.jpg
    • Hardware.png
    • Icon Link/URL
      Alternatives Abgabesystem für Crossroads-Projekt Link/URL
      Nicht verfügbar, es sei denn: Sie sind in einer Gruppe
  • Systematisierung: Entwicklung von Software

    Hervorgehoben
    • Softwarequalitätskriterien (Auswahl)

      • Korrektheit - Integrität
      • Robustheit - Zuverlässigkeit
      • Erweiterbarkeit
      • Wiederverwendbarkeit
      • Kompatibilität (zu anderen Produkten)
      • Effizienz
      • Portabilität (auf andere Plattformen)
      • Verifizierbarkeit (Prüfbarkeit)
      • Benutzerfreundlichkeit

      Die Kriterien wirken z. T. gegeneinander. Erfüllung aller Kriterien ist nicht zu erwarten im Beziehungsgeflecht zwischen Auftraggebern, Benutzer und Programmierer.

    • Icon Verzeichnis
      Lernplakate/Lernposter Verzeichnis
      Nicht verfügbar, es sei denn: Sie sind in einer Gruppe
  • Kleine Übungsprojekte (nicht im Schuljahr 2023/24)

    • Zeigeruhr

    • Automodellierung mit Material von G. Röhner

    • Hinweis: Bitte entpacken Sie die Datei GUIAuto in ihrem Projektordner. Im Anschluss sollten darin die Dateien GUIAuto.java, JNumberField.class und ein Ordner mit einem Bild vorhanden sein.

    • Schüler in Kursen

  • Projekt Symmetrische Verschlüsselung (nicht im SJ 2023/24)

  • Computerspiel Snake

    • Benutzen und Analysieren des Computerspiels Snake

      1. Spielen Sie das Spiel Snake und erforschen Sie die Spielregeln.
        Eine Schlange wird durch ein Spielfeld steuert und soll Futter aufnehmen. Mit jedem Futterhappen wird sie ein Glied länger und bewegt sich schneller. Auftauchende Hindernisse, die Spielfeldbegrenzungen und der Rumpf der Schlange dürfen nicht berührt werden.
      2. Ermitteln Sie Objekte und deren Eigenschaften im Spiel.
        Objekt Schlange mit Kopf(-punkt), Rumpf(-punkten) und einer Laufrichtung
        Objekt Futter(-punkt) mit einer veränderlichen Position
        Objekt Hindernis aus verschiedenen Punkten
        Objekt Spielfläche mit Höhe und Breite
      3. Ordnen Sie den Objekten Fähigkeiten/Fertigkeiten/Dienste zu.
        Objekt Schlange kann wachsen und kriechen, die Laufrichtung ändern, reagiert auf Futter, Hindernisse und scih selbst
        Objekt Futter(-punkt) verändert die Position
        Objekt Hindernis kann um Punktreihen ergänzt werden
        Objekt Spielleiter der das Spiel leitet und überwacht
      4. Leiten Sie Beziehungen zwischen den Objekten ab.
        Snake besteht aus Punkten, Futter ist ein Punkt, Hindernis ist eine Menge von Punkten, Spielleiter verwaltet eine Schlange, die Hindernisbarriere und das Futterelement, die GUI zeichnet den Spielzustand, den der Spielleiter beschreibt.
      5. Entwickeln daraus ein Klassendiagramm.
        Überlegung: Java bietet mit der Klasse Point eine Möglichkeit zur Beschreibung von Punkten, eine Menge von Punkten lässt sich mit einer Liste verwalten. Damit sind keine Klassen für Futter und Hindernis erforderlich.
    • Das Entwicklerteam der GUI hat eine entsprechende Klasse erzeugt, jedoch keine Beschreibung der Schnittstellen zwischen GUI und Modell geliefert. Analysieren Sie die Quellcode der Klasse GUI und ermitteln Sie:

      • die verwendeten Klassen und deren Namen
      • die benutzen Methoden der Modellklassen
      • die Datentypen der übergebenen Parameter und Eigenschaften

      Ergänzen Sie das Klassendiagramm um die gefundenen Informationen (Methoden, Parameter, Datentypen).

    • Entwicklung der Klassen Snake und Spielleiter in Java

      1. Generieren Sie aus dem Klassendiagramm in Dia den Quellcode für die beiden Klassen Snake und Spielleiter mit Hilfe der Funktion "Exportieren in Code".
      2. Kopieren Sie die beiden Klassen in den vorhandenen BlueJ-Projektordner.
      3. Öffnen Sie dann das Projekt in BlueJ.
      4. Ergänzen Sie in den Klassen Snake und Spielleiter fehlende Angaben so, dass die Klassen keine Syntaxfehler mehr enthalten.
    • Entwicklung der Methoden der Klasse Snake

    • Die Klasse Snake verwendet mit dem Attribut kopf ein Objekt der Java-Klasse Point und mit koerper ein Objekt mit der Datenstruktur ArrayList.

      1. Informieren Sie sich in der Java-Hilfe über Erzeugung und Dienste/Methoden eines Point-Objekts. Erstellen Sie sich eine zweckmäßige Übersicht.
      2. Informieren Sie sich auf der Tafelwerksergänzung Datenstruktur ArrayList über Erzeugung und Dienste/Methoden von Listenobjekten.
      3. Entwickeln Sie einen Konstruktor für die Klasse Snake, der die Eigenschaften analog zum fertigen Spiel im Startzustand initialisiert.
      4. Entwickeln Sie alle Anfragemethoden und testen Sie diese im Interaktionsmodus von BlueJ.
        Hinweis: Um Objekte der Klasse Point zu erzeugen, nutzen Sie die BlueJ-Funktion "Werkzeuge - Klasse aus Bibliothek" verwenden. Geben Sie den vollständigen Bibliothekspfad an: java.awt.Point. Ananlog können Sie eine ArrayList erstellen (Pfad: java.util.ArrayList).
      5. Methode kriechen():
        1. Beschreiben Sie zunächst genau, was bei einem Kriechschritt ohne Berücksichtigung der Richtungsänderung passiert. Nutzen Sie eine Tabelle mit Punktangaben.
        2. Leiten Sie daraus einen Algorithmus ab.
        3. Implementieren und testen Sie diesen Algorithmus in der Methode kriechen().
      6. Methode wachsen():
        1. Beschreiben Sie genau, was beim Wachsen ohne Berücksichtigung der Richtungsänderung passiert. Nutzen Sie eine Tabelle mit Punktangaben. Brücksichtigen Sie, dass anschließend ein Kriechschritt folgt.
        2. Leiten Sie daraus einen Algorithmus ab.
        3. Implementieren und testen Sie diesen Algorithmus in der Methode wachsen().
      7. Berücksichtigung der Laufrichtung:
        1. Erstellen Sie sich eine Tabelle, die die Änderung der Laufrichtung unter Berücksichtigung der aktueller Laufrichtung  und der gedrückter Tasten aufzeigt.
        2. Implementieren Sie Ihre Überlegungen in die Methode setzeLaufrichtung().
        3. Ändern Sie die Methode krieche() so ab, das die Änderung der Laufrichtung in jedem Kriechschritt berücksichtigt wird.
      8. Prüfen Sie die Klasse Snake auf Korrektheit.
    • Entwicklung der Methoden der Klasse Spielleiter

    • Die Klasse Spielleiter steuert und verwaltet die Objekte des Spiels.

      1. Entwickeln Sie einen geeigneten Konstruktor für die Klasse, welcher zunächst alle primitiven Eigenschaften für ein Spiel initialisiert.
      2. Erweitern Sie den Konstruktor um die Initialisierung aller vorhandenen Objekte. Nutzen Sie ggf. private Methoden.
      3. Entwickeln Sie die Methode spiele(), die bei jedem Spielschritt mit Übergabe der zuletzt gedrückten Taste aufgerufen wird. Verzichten Sie zunächst auf die Erweiterung der Barriere.
      4. Sorgen Sie dafür, dass das neue Futter so positioniert wird, das es nicht in die Schlange oder die Barriere gesetzt wird.
      5. Entwickeln Sie eine Methode, die die vorhandene Barriere erweitern.
      6. Prüfen Sie die Klasse Spielleiter unter Verwendung der GUI.