Abschnittsübersicht

  • "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

      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.
    • 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.

    • 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. 
    • 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. 

    • Entwurf 1 für Konto und Kunde

    • Ö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? 

    • Fügen Sie in BlueJ über "Bearbeiten - Klasse aus Datei hinzufügen..." die Klasse Dieb ins Projekt ein. Legen Sie mindestens zwei Kontoobjekte 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 Methode des Diebs das andere Konto zu "erleichtern". Warum geht das?

      Ä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. So 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.

    • 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.


    • Beziehungen zwischen Objekten

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