Home > Informatik > Informatik EF > Folge 3

Folge 3.1: Sie werden gewogen

Schritt 1 - Neues Projekt erzeugen

Erzeugen Sie eine neues leeres Projekt "Waage01":

So sollte das Fenster aussehen, das auf Ihrem Bildschirm auftaucht, wenn Sie den Befehl "Neues Projekt" aus dem BlueJ-Menü ausgeführt haben und als Projektnamen "Waage01" gewählt haben. Aber bitte die Projektdatei nicht irgendwo auf der Festplatte speichern, sondern in einem neuen Ordner "Folge03-Waage" oder so ähnlich. Im Laufe dieses Lehrgangs werden Sie noch sehr viele Projekte speichern müssen, und da ist es doch sinnvoll, mit Hilfe einer übersichtlichen Ordnerstruktur den Überblick zu behalten.

Dies ist die neue Version meiner alten Webseiten "Einführung in Java mit BlueJ". Ich habe zunächst nur das Design an meine anderen Seiten angepasst und ein paar Fehler beseitigt. Im nächsten Durchgang werde ich die Seiten dann gründlich überarbeiten.

Ulrich Helmich im Mai 2015

Schritt 2 - Neue Klasse erzeugen

Ein neues BlueJ-Projekt ist wie ein neues Word-Dokument: Es enthält absolut nichts. Ein Java-Projekt muss aber mindestens eine Klasse besitzen. Was eine Klasse ist, wozu sie dient und so weiter, diese wichtigen Fragen werden wir noch später behandeln. Zunächst einmal möchte ich Ihnen zeigen, wie man eine solche Klasse erzeugt.

Klicken Sie bitte auf den Button Neue Klasse bzw.New Class, der sich im BlueJ-Fenster links oben befindet:

Es erscheint ein Eingabefenster; offensichtlich sollen Sie einen Namen für die neue Klasse wählen. Geben Sie hier bitte "Waage" ein. Die Art der Klasse verändern Sie bitte nicht; es soll eine ganz normale Java-Klasse erzeugt werden.

Und siehe da! Sie haben eine neue Klasse Waage erzeugt.

Interne Links:

Schritt 3 - Quelltext vereinfachen

Doppelklicken Sie auf die Klasse Waage. Jetzt öffnet sich der Quelltexteditor:

Was Sie hier sehen, ist der Quelltext oder Sourcecode für die Klasse Waage. Ziemlich kompliziert sieht das aus. Die Autoren von BlueJ haben sich offensichtlich sehr bemüht, dem unerfahrenem Benutzer die Arbeit zu erleichtern. Ich persönlich komme allerdings immer leicht durcheinander, wenn ich diesen Standard-Quelltext einer normalen Klasse sehe; er besteht hauptsächlich aus Kommentaren und einer Beispiel-Methode, die wir noch gar nicht benötigen. Also verfahren wir jetzt wie folgt:

Entfernen Sie

Wenn Ihnen das zu kompliziert ist, entfernen Sie einfach den kompletten Quelltext und tippen Sie dann den Minimal-Quelltext ein:

public class Waage
{
   public Waage()
   {
   }
}

Interne Links:

Schritt 4 - Ein Attribut einrichten

Wenn ich meinen Kollegen erzähle, dass ich mir ein neues Auto gekauft habe, wollen diese natürlich Einzelheiten wissen. Welche Marke, welchen Typ, welche Farbe und so weiter. All das sind Eigenschaften oder Attribute des Autos. Die Summe aller Attribute definiert einen ganz bestimmten Autotyp, zum Beispiel den neuen VW Golf Variant Trendline.

In der Informatik, speziell in objektorientierten Sprachen wie Java, wird eine Klasse durch ihre Attribute definiert. Natürlich könnte man jetzt den Hersteller der Waage, den genauen Typ, ihre Farbe etc. als Attribute verwenden. Wenn wir ein Programm zur Warenverwaltung schreiben wollten, wären diese Attribute sicherlich wichtig. Wir wollen aber ein Programm schreiben, das sich wie eine Waage verhält, also zum Beispiel das Gewicht einer Person ermittelt und anzeigt. Also beschränken wir uns auf eine Teilmenge der möglichen Attribute.

Ergänzen Sie den Quelltext der Klasse nun bitte wie folgt:

public class Waage
{
   double gewicht;
   
   public Waage()
   {
   }
}

Das Attribut hat den Namen gewicht und den Datentyp double.

Mit dem Datentyp double legen wir fest, dass wir reelle Zahlen in dem Attribut gewicht speichern wollen. Hätten wir ganze Zahlen speichern wollen, so hätten wir int als Datentyp angeben müssen. Und hätten wir eine Zeichenkette wie "Ich bin eine Waage" in dem Attribut gewicht speichern wollen, so hätten wir String als Datentyp festlegen müssen.

Interne Links:

Schritt 5 - Kompilieren

Es folgt nun ein sehr wichtiger Schritt - das Kompilieren oder Übersetzen des Quelltextes. Bisher liegt unser Java-Programm in einer Form vor, die ein Mensch gut verstehen kann. Aber der Computer kann mit unserem Java-Quelltext noch gar nichts anfangen. Dazu müssen wir den Java-Quelltext erst in einen maschinennahen Code umwandeln, der dann von dem Java-System ausgeführt wird, das auf Ihrem Rechner installiert ist.

Sie können den Quelltext auf zwei Weisen kompilieren:

Entweder klicken Sie den Button Kompilieren bzw. Compile im BlueJ-Fenster an, oder Sie drücken die Tastenkombination ApfelK bzw. StrgK.

Nun kommt die Stunde der Wahrheit. Wenn Ihr Quelltext noch irgendwelche Fehler enthält, kann er nicht kompiliert werden. Die Kompilierung bricht mit einer Fehlermeldung ab, und Sie müssen den Quelltext verbessern. War der Quelltext aber fehlerfrei, erscheint in der Statuszeile des BlueJ-Fensters eine Meldung wie "Compiling... Done." Außerdem verändert der orangefarbene Kasten, der die Klasse symbolisiert, sein Aussehen. Vor dem Kompilieren war er schwarz schraffiert; nach dem Kompilieren ist die Schraffur verschwunden.

So sollte das BlueJ-Fenster nach dem Kompilieren aussehen.

Interne Links:

Schritt 6 - Ein Objekt erzeugen

Klicken Sie einfach mit der rechten Maustaste auf den orangefarbenen Kasten, der die Klasse Waage symbolisiert.

Sie sehen ein Popup-Menü mit fünf Optionen. Für uns ist jetzt die erste Option wichtig: new Waage(). Mit den anderen vier Optionen können wir den Quelltexteditor öffnen, die Klasse kompilieren, die Klasse untersuchen und die Klasse schließlich wieder entfernen.

Wählen Sie nun die Option new Waage() und erzeugen Sie ein Objekt der Klasse Waage.

BlueJ schlägt den Namen "waage1" für das Objekt vor - übernehmen Sie den Namen, indem Sie einfach auf den OK-Button klicken.

In dem unteren Bereich des BlueJ-Fensters ist ein roter Kasten mit der Beschriftung "waage1:Waage" aufgetaucht. Diese Beschriftung will uns mitteilen, dass wir ein Objekt waage1 der Klasse Waage erzeugt haben.

Wir können auch weitere Objekte der Klasse Waage anlegen. Klicken Sie noch einmal mit der rechten Maustaste auf die Klasse und wählen Sie dann wieder den Befehl zum Erzeugen eines neuen Objektes:

Und schon haben wir zwei Objekte der Klasse Waage. Von einer Klasse kann man theoretisch beliebig viele Objekte anlegen - und damit haben wir auch schon eine ungefähre Vorstellung von dem Unterschied zwischen Klassen und Objekten. Klassen sind Vorlagen, Vorschriften oder Baupläne für die Herstellung von Objekten.

So etwas Ähnliches kennen Sie von Textverarbeitungsprogrammen. Wenn Sie Pages oder Word starten, so werden Sie meistens gefragt, welche Dokumentenvorlage Sie verwenden wollen. Solche Dokumentenvorlagen kann man durchaus mit Java-Klassen vergleichen. Haben Sie sich dann für eine Dokumentenvorlage entscheiden, zum Beispiel "Erpresserbrief", dann wird ein konkretes Dokument erzeugt, in das Sie Ihren Text eintippen können. Dieses Dokument können wir jetzt mit einem Java-Objekt vergleichen. Aus der abstrakten Dokumentvorlage (Klasse) wurde ein konkretes Dokument (Objekt) erzeugt.

Interne Links:

Schritt 7 - Der Objektinspektor

Klicken Sie mit der rechten Maustaste auf das Objekt waage1 und rufen Sie mit dem Befehl inspect bzw. inspizieren den Objektinspektor auf.

In dem Objektinspektor können Sie alle Attribute betrachten und nachschauen, welche Werte die Attribute gerade besitzen. Das Attribut gewicht hat im Augenblick den Attributwert 0.0 - was ja auch logisch ist, da sich noch keine Person gewogen hat.

Schließen Sie den Objektinspektor nun wieder.

Schritt 8 - Eine Methode zum Wiegen

Öffnen Sie nun wieder den Quelltexteditor durch einen Doppelklick auf die Klasse Waage und ergänzen Sie die Klasse wie folgt:

public class Waage
{
    double gewicht;
    
    public Waage()
    {
    }
    
    public void wiegen(double gew)
    {
       gewicht = gew;
    }
}

Bisher konnten Objekte der Klasse Waage zwar das Gewicht einer Person speichern, aber weder konnten die Objekte das Gewicht ermitteln, noch konnten sie das Gewicht anzeigen. Solche Tätigkeiten, Aktionen oder wie immer man das Ganze auch nennen will, fehlten unserer Waage bisher. Aber jetzt können Objekte der Klasse Waage tatsächlich das Gewicht einer Person ermitteln, weil Sie die Klasse um eine Methode wiegen ergänzt haben.

Interne Links:

Schritt 9 - Arbeiten mit der Methode

Beobachten Sie nun, wie die Methode arbeitet. Kompilieren Sie die Klasse Waage, erzeugen Sie ein Objekt waage1 und klicken Sie mit der rechten Maustaste auf das Objekt.

Wählen Sie dann die Methode wiegen aus. Es öffnet sich ein Fenster "BlueJ: Method Call", in dem die Methode einschließlich angezeigt wird.

Sie müssen jetzt nur noch ein reelle Zahl für das gemessene Gewicht eintragen, z.B. 67.3 - achten Sie darauf, dass Java und BlueJ englischsprachigen Ursprungs sind, Kommazahlen müssen also einen Dezimal-Punkt enthalten, kein Komma.

Klicken Sie dann auf den OK-Button und rufen Sie dann den Objektinspektor für das Objekt auf. Das Attribut gewicht müsste dann den Wert haben, den Sie soeben als Parameter übergeben haben. Parameter sind Werte, die einer Methode beim Aufrufen direkt übergeben werden.

Schließen Sie den Objektinspektor und klicken Sie wieder mit der rechten Maustaste auf das Objekte waage1. Rufen Sie erneut die Methode wiegen auf und geben Sie ein anderes Gewicht ein. Inspizieren Sie dann das Objekt und kontrollieren Sie mit dem Objektinspektor, ob sich der Attributwert des Attributs gewicht entsprechend verändert hat.

Externe Links:

Schritt 10 - Eine zweite Methode

Wir wollen jetzt aus unserer normalen Waage eine Superwaage machen. Sie soll nämlich nicht nur Ihr Gewicht wiegen können, sondern auch Ihre Körpergröße erfassen, um dann Ihr Idealgewicht zu berechnen. Und schon kommt die erste Übung in dieser Folge. Allerdings wird diese Übung noch nicht bewertet, da ich Ihnen die Lösung im Anschluss verrate.

Übung 3.1

Ergänzen Sie die Klasse Waage so, dass sie auch die Körpergröße einer Person erfasst und speichert.

Wir wollen diese Übung mal gemeinsam lösen - falls Sie nicht schon von selbst auf eine Lösung gekommen sind.

Betrachten wir noch einmal den bisherigen Quelltext. Unsere Klasse Waage besitzt ein Attribut gewicht zum Speichern des aktuellen Gewichts sowie eine Methode wiegen zum Erfassen des Attributwertes.

Wenn wir jetzt die Waage so ergänzen wollen, dass auch die Körpergröße erfasst und gespeichert wird, benötigen wir

a) ein neues Attribut zum Speichern der Körpergröße und

b) eine neue Methode zum Erfassen des entsprechenden Attributwertes.

Nennen wir das neue Attribut doch einfach groesse (bitte keine Umlaute wie "ö" oder sonstige Sonderzeichen in Attributnamen verwenden!). Dann könnten wir die neue Methode messen nennen.

Lösung der Übung 3.1

Betrachten wir nun die Lösung der Übung 3.1 im kompletten Quelltext:

public class Waage
{
    double gewicht, groesse;
    
    public Waage()
    {
    }
    
    public void wiegen(double gew)
    {
       gewicht = gew;
    }
    
    public void messen(double kg)
    {
       groesse = kg;
    }
}

Das war ja eigentlich nicht schwer.

Schritt 11 - Eine Methode zum Anzeigen der Werte

Auf die Dauer ist es lästig, wenn man immer den Objektinspektor aufrufen muss, um sich wichtige Attributwerte anzuschauen. Andererseits ist der Objektinspektor auch recht nützlich, man kann sich die Werte mehrerer Attribute gleichzeitig ansehen:

Hier zeigt der Objektinspektor die Attributwerte der beiden von uns definierten Attribute gewicht und groesse an.

Sie werden jetzt lernen, wie man eine Methode anzeigen schreibt, die das Anzeigen von Attributwerten für Sie erledigt.

public void anzeigen()
{
   System.out.println("Sie wiegen "+ gewicht);
   System.out.println("Sie sind "+ groesse);       
}

Tippen Sie die Methode anzeigen in den Quelltext der Klasse Waage ein. Beim Aufruf dieser Methoden soll sich ein so genanntes Terminalfenster öffnen, das dann die Attributwerte von gewicht und groesse anzeigt:

0.0
0.0

Dass beide Attribute noch die Anfangswerte haben, liegt daran, dass vor dem Ausführen der Methode anzeigen weder wiegen noch messen aufgerufen wurde.

Die Methode System.out.println dient hier zur Ausgabe von Zahlen. Die Ausgabe erfolgt in dem so genanntenTerminalfenster bzw. in der Konsole. Unter dieser Konsole müssen Sie sich so etwas Ähnliches vorstellen wie einen uralten Textcomputer, der 16 Zeilen mit jeweils 64 hellgrünen Zeichen auf dunkelgrünem Hintergrund darstellen konnte.

Schritt 12 - Eine Verbesserung der anzeigen-Methode

Die beiden Zahlen in der Konsole sind relativ nichtssagend. Woher soll der Benutzer wissen, dass die erste Zahl für das Gewicht steht, die zweite aber für die Größe. Wäre es nicht besser, die Ausgabe in der Konsole sähe so aus:

Sie wiegen 67.4 kg!
Sie sind 182.6 cm groß!

Wie erreicht man eine solche Ausgabe?

Verändern Sie die Methode anzeigen folgendermaßen:

public void anzeigen()
{
   System.out.println
      ("Sie wiegen "+ gewicht + " kg!");
   System.out.println
      ("Sie sind "+ groesse + " cm groß!");       
}

Die System.out.println-Methode ist mächtiger, als es zunächst den Anschein hatte. Man kann mit ihr nicht nur einfache Zahlen ausgeben, sondern komplexe Zeichenketten, die aus mehreren Teilen zusammengesetzt sind. Das Konkatenierungszeichen zum Zusammensetzen dieser Teile ist in Java der Plus-Operator +. Somit bestehen die Zeichenketten in den beiden println-Methoden jeweils aus zwei Teilen:

1. Ein String (erkennbar an den Anführungszeichen)

2. Eine reelle Zahl

Der String teilt dem Benutzer des Programms mit, um welches Attribut es sich handelt, und die Zahl enthält den Attributwert.

Weiter mit Folge 3.2: Berechnung des Idealgewichts