Zielsetzung und erste Schritte
Herzlich Willkommen zum ersten größeren Projekt in der Jahrgangsstufe Q1. In der Stufe EF haben Sie hoffentlich schon viel über Java-Programmierung gelernt. Hier noch einmal die wichtigsten Punkte, von denen Sie nicht nur schon einmal gehört haben sollten, sondern die Sie auch im Schlaf beherrschen sollten.
- Klassen und Objekte
- Datentypen und Attribute
- Sondierende und manipulierende Methoden
- Konstruktoren
- Parameter
- Fallunterscheidungen bzw. Verzweigungen (if-else)
- Schleifen (for, while)
- Java-Anwendungen
- Buttons, Labels, Textfelder, Ereignisbehandlung
- Arrays
- Sortierverfahren
- Zweidimensionale Arrays
Das erste Projekt in der neuen Jahrgangsstufe will Ihnen keine neuen Lerninhalte vermitteln, sondern soll die in der EF erworbenen Kenntnisse und Fähigkeiten wiederholen und vertiefen.
Dazu wollen wir ein kleines Programm schreiben, das eine Vokabelverwaltung simulieren soll. Wir gehen dabei in mehreren Schritten vor. Zunächst erstellen wir eine Klasse Vokabel. Anschließend erstellen wir eine Klasse Vokabelliste in der eine endliche Anzahl von Vokabeln gespeichert werden kann. Diese Klasse werden wir dann mit Methoden ausstatten, mit denen man beispielsweise eine Übersetzung für einen deutschen oder englischen Begriff finden kann oder mit denen man die Vokabeln sortieren kann.
Schritt 1 - Die Klasse Vokabel
Attribute der Klasse:
Ein Vokabel-Objekt hat zwei Attribute vom Typ String. Das erste Attribut deutsch steht für den deutschen Begriff, das zweite Attribut englisch für die englische Übersetzung.
Methoden der Klasse:
Eigentlich benötigen wir nur zwei Methoden: Erstens den Konstruktor, der ein neues Objekt der Klasse Vokabel erzeugt, und zweitens eine Methode zum Anzeigen des Wortpaares in der Konsole.
Übung 11.1-1 (PC)
Erstellen Sie eine Klasse Vokabel, die eine solche Vokabel repräsentiert.
Lösungshinweise für Schüler(innen), und eine Testklasse zum Kopieren.
Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu
UML-Klassendiagramme, Teil 1
Die schriftlichen Kandidaten unter Ihnen müssen sich jetzt mal etwas Neues aneignen. In den Vorgaben zum Informatik-Abitur NRW wird verlangt, dass Sie sich mit UML auskennen. UML (Unified Modeling Language) ist eine Methode, komplexe informatorische Zusammenhänge graphisch darzustellen - wenn man UML wirklich beherrschen will, ist das schon eine Wissenschaft für sich. Für das Informatik-Abitur bzw. für Klausuren reichen aber ein paar kleinere Dinge schon aus. An dieser Stelle beginnen wir einfach mal mit UML-Klassendiagrammen.
Wenn wir die Klasse Vokabel als UML-Klassendiagramm darstellen wollen, zeichnen wir einen Kasten und unterteilen diesen mit waagerechten Strichen in drei Abschnitte. In den oberen Abschnitt schreiben wir den Namen der Klasse. In den mittleren Abschnitt die wichtigen Attribute der Klasse, und in den unteren Abschnitt die wichtigen Methoden der Klasse. Für die Klasse Vokabel mit ihren beiden Attributen und Methoden sieht das UML-Klassendiagramm noch ganz einfach aus:
Die beiden String-Attribute heißen hier deutsch und englisch. Das Minus-Zeichen vor den beiden Namen bedeutet: Die Attribute wurden als private deklariert. Von außerhalb der Klasse können die beiden Attribute also nicht gesehen werden. Das verhindert versehentliche Veränderungen der Attributwerte.
Der Konstruktor ist mit einem Plus-Zeichen gekennzeichnet. Das heißt, er ist von außerhalb der Klasse sichtbar (public) Eigentlich ist es in UML üblich, Konstruktoren mit einem davorgestellten C zu markieren. Aber in den Abituraufgaben NRW von 2017 und 2018 wurden die Konstruktoren in UML-Diagrammen immer mit einem Plus gekennzeichnet, und diesen Stil übernehmen wir hier einfach mal, damit Sie sich an die Abiturvorgaben gewöhnen.
Ich will einmal gerade nachschauen, ob es im Abitur 2021 auch noch so war...
Tatsächlich, auch hier kein 'C' vor dem Konstruktor, sondern ein '+'.
Die Methode zum Anzeigen in der Konsole heißt in unserem Projektanzeigen(), und der Plus-Operator zeigt an, dass man die Methode von außerhalb der Klasse (zum Beispiel aus der BlueJ-Umgebung oder aus einer anderen Klasse heraus) aufrufen kann.
Die UML-Syntax weicht von der Java-Syntax stark ab. Das liegt daran, dass UML keine Programmiersprache ist, sondern eine programmiersprachen-unabhängige Beschreibung oder Modellierung (modeling language) darstellt. Ein UML-Diagramm kann man in jede beliebige Programmiersprache übersetzen. In Java würde das Attribut deutsch zum Beispiel so deklariert:
private String deutsch;
Im UML-Klassendiagramm dagegen sieht die Deklaration so aus:
- deutsch: String
Wenn Sie genau hinschauen, werden Ihnen sicherlich noch weitere Unterschiede zu Java auffallen.
Schritt 2 - Eine Vokabelliste
Wie bereits angedeutet, ist der nächste Schritt die Erzeugung einer Klasse, welche in der Lage ist, viele Vokabeln zu speichern.
Die einfachste Lösung dafür ist sicherlich ein Array, der in der Lage ist, 100 oder 200 Objekte der Klasse Vokabel zu speichern. Wenn Sie meinen, dass Ihre Vorkenntnisse zum Thema "Arrays" dazu nicht ausreichen, sollten Sie die Folge 7 im Schnelldurchgang erarbeiten. Oder Sie gehen auf den Lernbaustein "Arrays", der einige wertvolle Tipps enthält, die Sie auch für die Vokabelliste verwenden können.
Übung 11.1-2 (PC)
Erstellen Sie eine neue Klasse Vokabelliste, die bis zu 100 solcherVokabel-Objekte in einem Array speichern kann.
Die Klasse sollte neben dem Konstruktor zwei Methoden besitzen: Eine Methode zum Hinzufügen einer neuen Vokabel und eine Methode zum Ausgeben der gesamten Liste.
Lösungshinweise für Schüler(innen), mit einer Testklasse zum Kopieren.
Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu
UML-Klassendiagramme, Teil 2
Jetzt haben wir bereits drei verschiedene Klassen in unserem kleinen Java-Projekt. In BlueJ sieht das dann so aus:
Klassendiagramm in der BlueJ-Umgebung
Die Klasse Vokabelliste greift über eine HAT-Beziehung auf Objekte der Klasse Vokabel zu, und die Klasse TestKlasse wiederum greift über eine weitere HAT-Beziehung auf Objekte der Klasse VokabelListe zu. Diese Anzeige ist schon mal ganz hilfreich, mehr Informationen enthält aber nur ein UML-Klassendiagramm.
UML-Diagramme für Abiturienten
Schriftliche Kandidaten und vor allem Leute, die Informatik im Abitur wählen wollen oder schon gewählt haben, sollten sich die folgenden Ausführungen sehr aufmerksam durchlesen.
Ein Klassendiagramm zum aktuellen Projekt
Autor: Ulrich Helmich 2022, Lizenz: siehe Seitenende.
Hier sehen sie zwei verschiedene Versionen eines UML-Klassendiagramms für das bisherige Projekt. Beide Versionen lehnen sich an die Beispiele aus den NRW-Abituraufgaben an, die rechte Variante noch etwas stärker als die linke.
Am besten, man fängt unten an, wenn man ein Klassendiagramm lesen bzw. verstehen will. Es gibt da also eine Testklasse mit einem Attribut liste, das ein Objekt der Klasse Vokabelliste ist. Darum zeigt auch ein Pfeil auf den Kasten für die Klasse Vokabelliste. Neben dem Konstruktor hat diese Testklasse keine weiteren Methoden.
Die Klasse Vokabelliste hat zwei Attribute. Einmal das Attribut anzahl, in dem die Zahl der tatsächlich gespeicherten Vokabel-Objekte verwaltet wird. Dann das Attribut liste.
In einigen NRW-Aufgaben ist es üblich, solche Attribute nicht in den Kasten für Attribute zu schreiben, sondern durch einen Pfeil darzustellen, der aus diesem Kasten herauskommt und auf eine Datenstruktur zeigt, in diesem Fall einem Array. An diesen Pfeil schreibt man dann den Namen des Attributs, hier also liste.
Der Array wird durch die kleine Zeichnung mit den drei leeren Feldern dargestellt. In der linken Variante symbolisiert ein Pfeil, welche Objekte in diesem Array stecken, nämlich Objekte der Klasse Vokabel. In der rechten Variante - und das ist eigentlich die typische Darstellungsweise im NRW-Abitur - macht man ein kleines Hinweisschild an die Datenstruktur und schreibt dann den Inhaltstyp (ContendType) in dieses Schild.
Schritt 3 - Übersetzung suchen
Wir wollen jetzt eine Funktion zum Suchen einer Übersetzung programmieren. Gegeben ist der deutsche Begriff, gesucht wird die englische Übersetzung.
Prinzipielles Vorgehen
- Eingabe: Wir geben den deutschen Begriff als String ein.
- Die Vokabeln der Liste werden der Reihe nach durchsucht. Wenn die Eingabe mit dem deutschen String-Attribut einer Vokabel übereinstimmt, ist die Suche beendet.
- In diesem Fall wird das englische String-Attribut der gefundenen Vokabel zurück gegeben. Andernfalls wird mit der Suche weitergemacht.
- Sind wir mit der Suche bei der letzten Vokabel des Arrays angekommen und haben die Vokabel nicht gefunden, wird eine entsprechende Meldung zurück gegeben: "nicht vorhanden".
Implementierung
Die nun folgende Übung 11.1-3 ist sehr wichtig. Sie sollen hier eine sondierende Methode implementieren, die das oben Gesagte leistet.
Übung 11-1-3 (PC)
Ergänzen Sie die KlasseVokabellisteum eine entsprechende sondierende Methode.
Parameter:
Der einzige Parameter dieser Methode soll ein String sein, der für die deutsche Vokabel steht.
Rückgabewert:
Der Rückgabewert dieser sondierenden Methode ist der gefundene englische Begriff. Sollte die Vokabel nicht im Array enthalten sein, soll "nicht vorhanden" als String-Wert zurückgeliefert werden.
Zu einer solchen schon recht aufwendigen Implementierung gehört natürlich auch eine entsprechende Dokumentation. Stellen Sie den oben beschriebenen Ablauf ("prinzipielles Vorgehen") als Flussdiagramm graphisch dar.
Lösungshinweise für Schüler(innen)
Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu
Schritt 4 - Vokabeln sortieren
Die Methode zum Anzeigen der Vokabeln funktioniert schon ganz gut, nur leider werden die Vokabeln in der Reihenfolge angezeigt, in der sie in den Array aufgenommen wurden - völlig ungeordnet also.
Übung 11-1-4 (PC)
Schreiben Sie zwei Methoden
public void sortierenDeutsch()
public void sortierenEnglisch()
die den Array der Vokabel-Objekte nach den deutschen bzw. englischen Begriffen aufsteigend sortieren.
Lösungshinweise für Schüler(innen)
Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu
Seitenanfang -
Teil 2 dieser Folge...