|
|
|||
Folge 2: Unsere erste eigene Klasse |
|||
Buch-VersionDie Folgen 1 bis 9 gibt es jetzt auch als Buch-Version. Noch nicht gedruckt, aber in Form von drei PDF-Dateien. Die Buch-Version sieht besser aus und enthält Themen, die ich aus Zeitgründen im regulären Kurs nicht behandeln kann, zum Beispiel das komplette Kapitel 6 sowie einige Exkurse. |
|||
Zielsetzung für die Folge 2In der Übung 1.1 der Folge 1 haben Sie die Methoden der Klassen Kreis, Quadrat und Dreieck mit Hilfe der rechten Maustaste aus einem Kontextmenü ausgewählt. Wenn Sie die Farbe des Kreis-Objektes sonne verändern wollten, mussten Sie erst die Methode farbeAendern() mit der Maus anwählen und dann in das Dialogfenster den Wert des Parameters eingeben: "gelb". Ähnlich mussten Sie bei der Änderung der Größe, der Änderung der Position und so weiter verfahren. In dieser Folge werden Sie eine völlig andere Methode kennen lernen, mit der Sie das Gleiche sehr viel eleganter erreichen können. Sie werden programmieren lernen! Programmieren heißt, dass Sie die einzelnen Methoden nicht mit der rechten Maustaste aus einem Kontextmenü auswählen, sondern dass Sie die Methodenaufrufe sowie die nötigen Parameter in der richtigen Reihenfolge in eine Textdatei hineinschreiben. Diese Textdatei wird dann als "Quelltext" bezeichnet. Der Quelltext wird dann kompiliert, das heißt in ausführbaren Maschinencode übersetzt. Diesen Machinencode kann dann der Computer ausführen. Wie von Zauberhand erscheint dann plötzlich in einem neuen Programmfenster das Bild von dem Haus mit der Sonne und dem Mond. |
![]() Programmieren heißt: Befehle werden in der richtigen Reihenfolge und mit den richtigen Parametern in eine Quelltext-Datei geschrieben, die dann kompiliert wird. Das so entstandene Programm kann anschließend vom Rechner ausgeführt werden. |
||
Schritt 1 - Neue Klasse erzeugenÖffnen Sie das Projekt "Figuren" aus Folge 1 und klicken Sie in dem BlueJ-Fenster den Button "neue Klasse" an. Wenn Sie nicht mehr wissen, wie man BlueJ auf die deutsche Sprache umstellt, so folgen Sie dem Hinweis rechts. Dazu muss man wissen, dass es in Java keine "Quelltexte" im klassischen Sinne mehr gibt, sondern nur noch Klassen. Die Textdatei, in der eine solche Klasse definiert wird, kann aber ruhigen Gewissens weiterhin als "Quelltext" bezeichnet werden.
1 Erzeugen einer neuen Klasse Sie werden aufgefordert, der neuen Klasse einen Namen zu geben und einen Klassentyp zuzuweisen. Wählen Sie als Name "Zeichnung" und als Typ "Klasse" bzw. "Class", so wie im Bild gezeigt. Klicken Sie dann auf Ok. Danach müssten Sie Folgendes sehen:
2 Die neue Klasse wurde erzeugt Die in den vorherigen Übungen erzeugten Objekte sind alle verschwunden, dafür sehen wir einen neuen Kasten im Hauptbereich des Fensters, der die Klasse Zeichnung repräsentiert. |
|||
Schritt 2 - Ein Objekt der Klasse erzeugenSchritt 2a - Ein VersuchKlicken Sie mit der rechten Maustaste auf die neue Klasse. Sie werden feststellen, dass Sie noch keine Objekte dieser Klasse erzeugen können. Vorher ist ein weiterer Schritt notwendig: Sie müssen den Java-Quelltext der neuen Klasse kompilieren.Schritt 2b - ÜbersetzenKlicken Sie mit der rechten Maustaste auf die neue Klasse und wählen Sie den Befehl Compile bzw. Übersetzen aus. Der Quelltext der neuen Klasse wird nun in maschinenlesbare Anweisungen übersetzt. Erst nach diesem Schritt können Sie überhaupt Objekte der Klasse erzeugen. Schritt 2c - Objekt erzeugenErstellen Sie jetzt mit Hilfe der rechten Maustaste ein Objekt bild der neuen Klasse Zeichnung.
3 Unsere neue Klasse stellt nur eine Methode zur Verfügung Schritt 2d - Methoden? Welche Methoden?Klicken Sie mit der rechten Maustaste auf das Objekt bild . Es dürfte Ihnen die völlige Abwesenheit von Methoden auffallen. Jede der im Projekt "Figuren" vorhandenen Klassen wie Dreieck oder Kreis hat eine ganze Reihe von Methoden. Unsere neue Klasse Zeichnung besitzt lediglich eine |
Kompilieren = Übersetzen eines Quelltextes in ein ausführbares Programm
Für Einsteiger:
|
||
Schritt 3 - QuelltextWir wollen der Sache jetzt auf den Grund gehen. Wieso existieren keine Methoden für die Objekte der Klasse Zeichnung? Gegenfrage: Haben Sie denn bereits eine einzige Methode programmiert? Na, dann wird es aber höchste Zeit dafür! Schritt 3a - Quelltext öffnenDoppelklicken Sie auf die Klasse Zeichnung. Es öffnet sich ein Fenster mit dem Quelltext der Klasse. Schauen wir uns den Quelltext näher an: 4 Der Quelltext der neuen Klasse |
|||
|
Der Quelltext besteht fast nur aus (gut gemeinten) Kommentaren, die aber sowohl Anfänger wie auch Fortgeschrittene eher verwirren. Richtig sinnvoll sind diese Kommentare nur für Leute, die schon mal mit einer anderen Programmiersprache objektorientiert gearbeitet haben (z.B. Delphi) und sich jetzt schnell in Java einarbeiten wollen. Kommentare dienen an sich zur Erläuterung von komplizierten Java-Befehlen. Man muss keine Kommentarzeilen in den Quelltext schreiben, der Computer versteht auch so, was Sie meinen. Aber denken Sie an sich selbst - wenn Sie später mal ihren Quelltext verbessern wollen, ist es sehr hilfreich, wenn Sie bestimmte wichtige Stellen des Quelltextes ausreichend kommentiert haben. Schritt 3b - Quelltext aufräumenEntfernen Sie sämtliche Kommentare aus dem Quelltext! Danach sieht das Ganze schon wesentlich aufgeräumter aus:
5 Der Quelltext der neuen Klasse - ohne Kommentare |
Kommentare = Hinweise zur Erläuterung eines Quelltextes. Sollte sparsam eingesetzt werden, aber nicht zu sparsam! |
||
Schritt 3c - Quelltext richtig aufräumen!Sie können den Quelltext noch weiter verkürzen, denn auch die Variable int x sowie die Methode int sampleMethod(int y) werden nicht benötigt. Räumen Sie Ihren Quelltext so auf, dass er so aussieht, wie der Quelltext in der Abbildung 6.
6 Der Quelltext der neuen Klasse - auf das unbedingt Notwendige reduziert Schritt 3d - Ein neuer VersuchErzeugen Sie ein Objekt der Klasse Zeichnung, indem Sie mit der rechten Maustaste auf die Klasse klicken und den Befehl "neue Zeichnung" auswählen. Klicken Sie dann mit der rechten Maustaste auf Ihr soeben erzeugtes Objekt. Das Objekt hat noch immer keine Methoden. Kein Wunder, Sie haben ja auch immer noch keine Methoden für die Klasse Zeichnung programmiert. Kleiner Theorie-EinschubWir programmieren die Methoden also nicht auf der Objekt-Ebene, sondern auf der Klassen-Ebene. Alle Objekte einer Klasse haben daher die gleichen Methoden. |
|||
Schritt 5 - Der Minimal-QuelltextSchauen wir uns den Minimal-Quelltext jetzt einmal genauer an und nehmen wir ihn Wort für Wort auseinander. Zunächst einmal der Minimal-Quelltext: public class Zeichnung
{
public Zeichnung()
{
}
}
Wenn Sie ein Programm wie Photoshop starten und den Befehl "Datei / Neu"wählen, so öffnet sich eine neue leere Zeichnung. Bei Word erzeugen Sie mit dem gleichen Befehl ein neues leeres Textdokument. Ähnlich ist dieser Minimal-Quelltext zu verstehen. Es handelt sich um den syntaktisch völlig korrekten, aber gleichzeitig völlig leeren Quelltext einer Java-Klasse.
6b Aufbau einer Java-Klasse Der Minimal-Quelltext besteht aus der Klassen-Deklaration in die eine spezielle Methode eingebettet ist, nämlich der Konstruktor der Klasse. Der Konstruktor enthält hier keine einzige Zeile Quelltext, ist also leer. |
Schreiben Sie sich den Minimal-Quelltext in Ihre Mappe! |
||
Schritt 5 - Der KonstruktorDer Konstruktor ist eine Methode, die immer dann aufgerufen und ausgeführt wird, wenn ein neues Objekt der Klasse erzeugt werden soll. Angenommen, Sie haben eine Klasse erzeugt, z.B. Zeichnung. Im BlueJ-Fenster klicken Sie jetzt mit der rechten Maustaste auf diese Klasse und wählen den Befehl new Zeichnung(). Wenn Sie das machen, rufen Sie - ohne dass Sie es merken - den Konstruktor der Klasse Zeichnung auf und erzeugen so ein neues Objekt der Klasse Zeichnung. Umgekehrt kann man sagen: Nur wenn die Klasse einen Konstruktor enthält, kann man Objekte dieser Klasse erzeugen.
7 Jetzt können wir Objekte der neuen Klasse erzeugen |
Konstruktor: |
||
Schritt 6 - MethodenWir wollen jetzt die erste richtige Methode für unsere Klasse schreiben. Ergänzen Sie den Quelltext der Klasse Zeichnung durch eine Methode void sichtbarMachen():
8 Eine zweite Methode für die neue Klasse Kompilieren Sie dann den Quelltext, erzeugen Sie ein Objekt bild der Klasse Zeichnung, und klicken Sie dann mit der rechten Maustaste auf das neue Objekt:
9 Die neue Methode taucht im Kontextmenü auf Tatsächlich taucht jetzt die neue Methode void sichtbarMachen() im Kontextmenü des Objektes bild auf. Allerdings passiert nichts, wenn Sie auf die Methode klicken. Das ist aber auch kein Wunder, schließlich haben Sie noch keine Java-Befehle in die Methode hineingeschrieben. ZwischenzusammenfassungSie haben jetzt eine Klasse Zeichnung mit einer Methode sichtbarMachen(). Die Methode sichtbarMachen() taucht im Menü der Objekte der Klasse Zeichnung auf, bewirkt aber nichts, weil der Quelltext der Methode noch keine Java-Anweisungen enthält. |
|||
Schritt 7 - BefehleErgänzen Sie den Quelltext der Klasse Zeichnung wie folgt:
10 Die neue Methode wird mit Inhalt gefüllt Sie müssen den Quelltext der Klasse Zeichnung an drei Stellen ergänzen. |
|
||
7.1 - Attribut deklarierenErstens schreiben Sie oberhalb des Konstruktors die Zeile private Kreis sonne; Damit deklarieren Sie eine neue Variable sonne , welche gleichzeitig ein Objekt der Klasse Kreis ist. Die Methode sichtbarMachen(), die Sie jetzt mit Inhalt füllen wollen, muss ja etwas haben, auf das sie einwirken kann. Wenn innerhalb von sichtbarMachen() ein Kreis sichtbar gemacht werden soll, muss dieser Kreis erstmal vorhanden sein. Dieser Kreis wird durch das Objekt sonne repräsentiert.
11 Eine Hat-Beziehung zwischen Zeichnung und Kreis Der neue Pfeil in Abbildung 11 zeigt Ihnen, dass die Klasse Zeichnung jetzt tatsächlich auf die Klasse Kreis zurückgreift. Man spricht hier auch von einer Hat-Beziehung zwischen den Klassen: Zeichnung hat Objekte der Klasse Kreis. |
Hat-Beziehung = Eine Klasse besitzt Objekte einer anderen Klasse.
|
||
7.2 - Initialisierung des AttributsKommen wir wieder zurück zum Quelltext, den Sie verändern sollen. Mit der Deklaration des Objektes sonne ist es noch nicht getan. Die Deklaration eines Objektes ist sozusagen die Vorbereitung; es wird Speicherplatz reserviert, damit überhaupt erst ein Objekt angelegt werden kann. Das Objekt selbst existiert aber noch nicht, wenn Sie es deklariert haben. Dazu ist ein weiterer Schritt erforderlich, nämlich die Initialisierung des Objektes.
12 Ergänzung einer Methode Die Initialisierung von Objekten erfolgt meistens im Konstruktor derjenigen Klasse, welche das oder die Objekte benötigt: public Zeichnung()
{
sonne = new Kreis();
}
Die Initialisierung besteht aus drei Teilen. Erst kommt der Bezeichner des neuen Objektes, hier also "sonne". Dann kommt der Befehl new. Jetzt weiß der Computer bzw. das Java-Programm, dass ein neues Objekt namens "sonne" erzeugt werden soll. Der dritte Teil der Initialisierung besteht in dem Aufruf des Konstruktors des Objektes. Da sonne ein Objekt der Klasse Kreis ist, muss logischerweise der Konstruktor der Klasse Kreis aufgerufen werden. Erinnern Sie sich noch, wie Sie "per Hand" ein Objekt der Klasse Kreis erzeugt haben? Richtig: Sie haben mit der rechten Maustaste auf die Klasse Kreis geklickt und dann den Befehl new Kreis() ausgewählt. Anschließend wurden Sie gefragt, wie das neue Objekt heißen soll. Hier haben Sie "sonne" eingetippt. Genau das gleiche haben wir jetzt in den Konstruktor der Klasse Zeichnung hineinprogrammiert. |
![]() Deklaration eines Objektes: Vorbereiten der Initialisierung; Reservierung von Speicherplatz für das Objekt. Initialisierung eines Objekes: Erzeugen des eigentlichen Objektes und ggf. Voreinstellung bestimmter Attribute des Objektes. |
||
7.3 - Der erste richtige BefehlDie dritte Stelle, die Sie ergänzen müssen, ist die Methode sichtbarMachen(). Die Klasse Zeichnung hat jetzt ein Objekt sonne. Keine Angst, Sie müssen jetzt keine komplizierten Java-Befehle zum Zeichnen von Kreisen lernen, sondern können als Programmierer einfach die bereits vorhandenen Methoden der Klasse Kreis aufrufen: public void sichtbarMachen()
{
sonne.sichtbarMachen();
}
Dieses Vorgehen nennt man auch Delegation. Die Methode sichtbarMachen() der Klasse Zeichnung muss selbst kaum etwas machen, sie ruft lediglich die Methode sichtbarMachen() des Objektes sonne auf und delegiert damit die Hauptarbeit an das Objekt. Wie das Sichtbarmachen des Objektes funktioniert, interessiert weder die Klasse Zeichnung noch den Programmierer, solange die Methode überhaupt funktioniert. |
![]() Prinzip der Delegation: Möglichst viel Arbeit an die Methoden der Objekte übergeben; möglichst wenig selbst machen, das vermeidet Fehler. |
||
Schritt 8 - Die Zeichnung erscheint auf dem BildschirmErzeugen Sie jetzt - nachdem Sie also den Quelltext wie oben angegeben ergänzt haben - ein Objekt bild der Klasse Zeichnung. Klicken Sie das Objekt mit der rechten Maustaste an und rufen Sie dann die Methode sichtbarMachen() auf. Wenn Sie alles richtig gemacht haben, müsste jetzt ein Fenster mit einem kleinen blauen Kreis erscheinen:
13 Die neue Klasse Zeichnung funktioniert! |
|||
Schritt 9 - Zwei ObjekteDas ist - ehrlich gesagt - noch nicht allzu beeindruckend, was wir bisher geschafft haben. Wir wollen jetzt den Quelltext der Klasse Zeichnung um ein weiteres Objekt ergänzen, und zwar um ein großes grünes Quadrat. Was ist dazu alles notwendig? 9.1Wir benötigen für das große grüne Quadrat ein zweites Objekt innerhalb der Klasse Zeichnung - natürlich diesmal ein Objekt der Klasse Quadrat. Also müssen wir als erstes ein Objekt der Klasse Quadrat deklarieren. Nennen wir das Quadrat-Objekt doch einfach mal "haus". 9.2Mit der Deklaration ist es noch nicht getan; das neue Objekt muss auch initialisiert werden. Dazu erweitern wir den Konstruktor von Zeichnung um eine zweite Zeile: public Zeichnung()
{
sonne = new Kreis();
haus = new Quadrat();
}
9.3Wir müssen schließlich die Methode sichtbarMachen() der Klasse Zeichnung so ergänzen, dass auch das Objekt haus sichtbar gemacht wird. Also schreiben wir: public void sichtbarMachen()
{
sonne.sichtbarMachen();
haus.sichtbarMachen();
}
Schauen wir und das Ganze noch mal im Zusammenhang an:
14 Jetzt sollen zwei Objekte gezeichnet werden Dies ist der Quelltext, der - fast - zum richtigen Ergebnis führt. Allerdings ist das Quadrat weder groß noch grün, aber zumindest ist es schon mal vorhanden. |
|
||
| Wie man in der Abbilung 14 gut sehen kann, enthält die Klasse Zeichnung jetzt nicht nur ein Objekt, sondern deren zwei, nämlich sonne und haus. Es bestehen jetzt also zwei Hat-Beziehungen: Einmal zwischen Zeichnung und Kreis, und zusätzlich zwischen Zeichnung und Quadrat. In dem BlueJ-Fenster werden diese Hat-Beziehungen durch Pfeile symbolisiert, die von der Klasse Zeichnung auf die Klassen zeigen, deren Objekte in Zeichnung verwendet werden. |
|
||
Schritt 10 - Verändern eines ObjektesDas haus soll jetzt grün und groß werden. Dazu erinnern wir uns wieder daran, wie wir das in Folge 1 dieses Kurses per Hand gemacht haben: Rechtsklick auf die entsprechenden Objekte und Aufruf der richtigen Methoden. Genau so müssen wir es auch jetzt machen, nur diesmal müssen wir die Methodenaufrufe programmieren:
15 Veränderung des Objektes haus Wenn Sie jetzt kompilieren und ein Objekt der Klasse Zeichnung erzeugen, so führt ein Aufruf der Methode sichtbarMachen() zu dem gewünschten Ergebnis. Das Quadrat ist groß und grün und befindet sich auch schon weiter unten. |
Erinnern Sie sich noch an die Begriffe "sondierende Methode" und "verändernde Methode"? Wenn nicht, lesen Sie sofort(!) den Theorieteil "Klassen und Objekte". |
||
Übung 2.1 (2 Punkte)
Ergänzen Sie den Quelltext der Methode Zeichnung.sichtbarMachen() so, dass obiges Bild erzeugt wird. |
Download: Arbeitsblatt 2.1 mit den Schritten 1 bis 11 in Kurzfassung sowie der Übung 2.1 |
||
Weiter mit Folge 3: Sie werden gewogen!Diese HTML-Seite wurde erstellt von Ulrich Helmich am 23. Januar 2005 und leicht verändert am 14. Juni 2006 sowie am 18. August 2006. |
|||