Einführung in die Programmiersprache JAVA

Größe: px
Ab Seite anzeigen:

Download "Einführung in die Programmiersprache JAVA"

Transkript

1 Einführung in die Programmiersprache JAVA unter Verwendung der Entwicklungsumgebung BlueJ Text von K.Spier (2004), überarbeitet von B.Spier ( )

2 JAVA-Einführung, Seite 2 Inhaltsverzeichnis Kapitel 1: Vorstellung der Entwicklungsumgebung BlueJ und erstes Projekt... 3 Installation... 3 Projekt Beispiel_1 (Quader)... 4 Der Editor von BlueJ für JAVA-Quelltexte... 5 Kapitel 2: Zweites Projekt: Bankkonto (Bank_1)... 8 Erstellen einer vollständigen Übersicht zur Klasse 'Konto' (Dokumentation) Kapitel 3: Drittes Projekt: Bank_ Informationen zu private und public Kapitel 4: Viertes Projekt: Fahrkartenautomat Zahlen formatieren Kapitel 5: Fünftes Projekt: Person (Vererbung / GregorianCalendar) Vererbung Überschreiben von Methoden Kapitel 6: Sechstes Projekt: Wir programmieren ein Applet Aufbau eines HTML-Quelltextes Kapitel 7: Siebentes Projekt: Das Applet reagiert auf eine Maus-Aktion Kapitel 8: Achtes Projekt: Das Puzzle mit 25 Feldern Klassenvariablen und Instanzvariablen Array For-Schleife Start und Stop While-Schleife Kapitel 9: Was haben wir jetzt gelernt? (Wdh. und kleine Ergänzungen) (Klassen, Variablen, Methoden, Konstruktoren, Fallunterscheidung, Schleifen) Kapitel 10: Schlussbemerkung Anhang JAVA-Programm ohne Entwicklungsumgebung erstellen Listen, die nur Instanzen einer einzigen Klasse verwalten Formatierungen von numerischen Werten (2 Beispiele für String.format)... 42

3 JAVA-Einführung, Seite 3 Vorbemerkung Mit JAVA wurde eine objektorientierte Programmiersprache entwickelt, die unabhängig vom Betriebssystem des Computers ist, auf dem die Programme laufen. Es gibt viele so genannte Entwicklungsumgebungen, um JAVA-Programme zu erstellen. Eine Entwicklungsumgebung ist zwar nicht Voraussetzung zum Programmieren JAVA-Programme ließen sich auch mit einem einfachen Texteditor erstellen. Mit einem Compiler können daraus Dateien erstellt werden, die ein JAVA-Runtime-Environment ausführen kann, solche Datei kann also ein fertiges Programm aufgefasst werden. Mit Hilfe einer Entwicklungsumgebung können Quelltexte sowohl erstellt als auch kompiliert und ausgeführt werden, dadurch sind die Arbeitsschritte erheblich einfacher und übersichtlicher. Außerdem ist der Editor dann üblicherweise mit Syntaxhervorhebung (s. S. 5) versehen, so dass die Programmstruktur besonders gut sichtbar wird. Interessierte finden im Anhang eine kurze Beschreibung, wie man auch ohne Entwicklungsumgebung ein JAVA-Programm erstellen kann. Für den Einstieg in das Programmieren mit JAVA ist BlueJ besonders gut geeignet. 1. Vorstellung der Entwicklungsumgebung BlueJ und erstes Projekt JAVA installieren JAVA wird durch Ausführen der Datei jdk-7u25-windows-i586.exe 1 oder auf 64-Bit-Systemen jdk-7u25-windows-x64.exe installiert. (Ein Java-Runtime-Environment jre..., das mit OpenOffice, Geogebra oder anderen Programmen vielleicht bereits installiert ist, genügt nicht für BlueJ wird ein Java-Development-Kit jdk... benötigt. Für Download nach java se downloads oder jdk suchen!) JAVA muss vor BlueJ installiert werden. BlueJ installieren BlueJ darf für Bildungszwecke verwendet werden ohne dass Lizenzgebühren zu zahlen sind. (Siehe Homepage von BlueJ, Download der Version von dort.) Zur Installation wird die Datei bluejsetup-308.msi 2 ausgeführt. Beim ersten Programmstart sucht BlueJ die zu verwendende JAVA-Version und zeigt eventuell ein Auswahlfenster, wenn die Zuordnung nicht automatisch erfolgen kann. Spracheinstellung: Deutsch Wenn die Entwicklungsumgebung in deutscher Sprache erscheinen soll, muss die Datei BlueJ.defs mit einem Text-Editor bearbeitet werden, geeignet ist z.b. WordPad (Startmenü/Zubehör). Dieser Editor muss bei aktuellen Windows-Versionen als Administrator ausgeführt werden, damit im Installationsordner (vermutlich: C:\Programme(x86)\BlueJ\) Schreibberechtigung erreicht wird. BlueJ.defs liegt im Unterverzeichnis lib des Installationsordners von BlueJ. Zum Öffnen muss als Dateityp Alle Dokumente (*.*) eingestellt werden. bluej.language=english In dieser Datei findet man (ungefähr Zeile 31) die Festlegung der Sprache: Hier kann bluej-language=english in bluej.language=german wird zu: geändert werden. Danach wird die Datei gespeichert. bluej.language=german 1 Aktuelle Version im August Aktuelle Version im August 2013

4 JAVA-Einführung, Seite 4 Ein Projekt beginnen: Projekt Beispiel_1 Wir starten BlueJ und wählen den Menüpunkt Projekt/Neues Projekt. Es erscheint das Dialogfenster, in dem wir angeben, wo das Projekt gespeichert werden soll. Ein Projekt besteht immer aus mehreren Dateien, deshalb wird für jedes Projekt ein eigener Ordner angelegt. Ordner, die ein BlueJ-Projekt enthalten, werden von BlueJ durch ein spezielles Symbol gekennzeichnet (siehe Abbildung). Mit dem Schalter Erzeugen wird der Ordner mit dem eingegebenen Namen angelegt und die Projektdateien werden darin gespeichert. Die Arbeitsfläche von BlueJ enthält zunächst nur ein Symbol für eine Readme-Datei, die für eine Beschreibung des Projekts vorgesehen ist. Nicht nur im Schulunterricht macht es Sinn, in einer solchen Datei eine ganz knappe Beschreibung des Projektes anzugeben. Die Datei wird mit einem Doppelklick auf das Symbol geöffnet, dann bearbeitet, gespeichert und wieder geschlossen. Nun werden wir als erstes Beispiel eine Klasse mit Namen 'Quader' erstellen (wie im Info-Kasten oben rechts). Eine Klasse im Projekt erstellen Info: In der objektorientierten Programmierung arbeitet man mit Objekten. (logisch) Objekte können Eigenschaften haben. Beispiel: Ein Quader hat die Eigenschaften Länge, Breite, Höhe. Diesen Eigenschaften können verschiedene Werte zugeordnet sein. Ein zweiter Quader hat die gleichen Eigenschaften, aber mit anderen zugeordneten Werten. Ein Zylinder hat dagegen andere Eigenschaften, denn er ist durch Radius und Höhe bestimmt. Alle Quader können wir zu einer Klasse zusammenfassen: Wenn wir eine Klasse 'Quader' definieren, dann legen wir darin eine Art Bauplan fest. Alle Quader sind Objekte, die nach diesem Bauplan konstruiert werden. In der Definition der Klasse 'Quader' wird außer den Eigenschaften Länge, Breite, Höhe auch eine Methode zum Erzeugen von Quader-Objekten festgelegt, sie wird als Konstruktor oder Constructor bezeichnet. Anmerkungen: 1. Die genannten Begriffe werden allgemein bei der objektorientierten Programmierung verwendet unabhängig davon, ob man z.b. mit JAVA oder mit Delphi arbeitet. 2. Gelegentlich sagt man auch, in der Definition einer Klasse wird der Objekt-Typ beschrieben, und das danach konstruierte Objekt wird auch als Objekt-Instanz bezeichnet. Wir klicken auf den Schalter Neue Klasse und geben als Namen für diese Klasse Quader ein. Daraufhin erscheint ein neues Symbol für diese Klasse in der Projektübersicht. Wir klicken doppelt auf dieses Symbol, um die Klasse zu bearbeiten. Zunächst sehen wir schon einige Zeilen vorgegebenen Text im Editor für unseren Java-Quelltext, den wir nach unseren Erfordernissen anpassen werden (einige Zeilen löschen, andere ergänzen).

5 Der Editor von BlueJ für JAVA-Quelltexte JAVA-Einführung, Seite 5 Der Editor arbeitet mit sogenannter Syntax- Hervorhebung, d.h. dass z.b. reservierte Wörter oder Kommentare in bestimmter Weise farblich hervorgehoben werden. Die Tatsache, dass hier der größte Teil des Textes in blau dargestellt ist, zeigt bereits, wie wichtig Kommentare in Computerprogrammen sind. Bei genauem Hinsehen können wir sogar zwei verschiedene Arten von Kommentaren unterscheiden: Einfache Kommentare werden mit zwei Schrägstrichen eingeleitet und dienen oft dem Programmierer als Notiz. Die anderen, die mit /** eingeleitet, mit * fortgesetzt und mit */ beendet werden, dienen zusätzlich zur Information für andere darauf wird später näher eingegangen (Seite 10). Auf die Begriffe public und private wird ebenfalls später eingegangen (Seite 15). Wir sehen, dass die Klassendefinition mit dem Wort class eingeleitet wird, gefolgt vom Namen der Klasse. Dann folgt eine öffnende geschweifte Klammer, die zugehörige schließende Klammer steht in der letzten Zeile. Der BlueJ-Editor gestaltet nicht nur den Schriftstil, er hebt auch die Struktur durch die Hintergrundfarbe hervor (z.b. Texte innerhalb eines -Klammerpaares).

6 JAVA-Einführung, Seite 6 Zum Aufbau dieses Programm-Quelltextes: Nach dem Klassennamen werden im obigen Beispiel die Eigenschaften (hier: Variablen) für die Instanzen festgelegt: Jede Instanz, die wir gemäß diesem Bauplan erzeugen, soll je eine Variable für Länge, Breite und Höhe besitzen. Der Variablentyp wird in JAVA immer dem Variablennamen vorangestellt. Hier wird int als Variablentyp angegeben, d.h. die aufgeführten Variablen sind vom Typ integer, sie können nur ganzzahlige Werte aufnehmen. (Wir folgen damit dem Vorschlag von BlueJ für die Variablentypen, andere lernen wir später kennen.). Da diese Variablen hier den Instanzen zugeordnet sind, heißen sie auch Objektfelder oder Datenfelder oder auch Instanzvariablen. In Java sind auch Umlaute in Variablennamen zugelassen. Umlaute werden jedoch nicht in allen Entwicklungsumgebungen (bzw. Betriebssystemen, z.b. Linux) gleich codiert. Die BlueJ-Version kann zwar Quelltexte übersetzen, in denen Methoden- oder Klassen-Bezeichner Umlaute enthalten, jedoch führen Methodenaufrufe dann zu Fehlern. Variablen-Bezeichner können Umlaute enthalten, ohne dass es zu Fehlern kommt. Version kann offenbar gut mit Umlauten umgehen. Die Vermeidung von Umlauten und anderen Sonderzeichen ist dennoch zu empfehlen. Es folgt die Festlegung des Standard-Konstruktors. Der Name des Konstruktors stimmt in JAVA immer mit dem Namen der Klasse überein. Dieser Konstruktor ist hier sehr einfach aufgebaut: Er legt nur Werte für die Variablen eines Quaders fest, der mit ihm erzeugt wird. Alle Quader- Instanzen, die mit diesem Konstruktor erzeugt werden, haben die gleichen Werte für die Höhe, die Länge und die Breite. Für die Zuweisung von Werten an eine Variable wird in JAVA ein einfaches Gleichheitszeichen verwendet (wie in BASIC, C++, aber anders als in PASCAL u. DELPHI). Auch für den Konstruktor werden Anfang und Ende durch öffnende bzw. schließende geschweifte Klammer gekennzeichnet. Beachten Sie die übersichtlichen Positionen aller -Klammerpaare! Das Beispiel zeigt außerdem, dass eine Klasse mehrere Konstruktoren besitzen kann: Ein zweiter Konstruktor dient dazu, Quader zu konstruieren, bei denen mit Aufruf des Konstruktors Werte für die Länge, die Breite und die Höhe erfragt und übernommen werden. Zum Schluss zeigt das Beispiel, dass die Klasse außer Konstruktoren auch noch andere Methoden besitzen kann, hier zur Berechnung des Volumens. Diese Methode berechnet aus Länge, Breite und Höhe der Quader-Instanz ihr Volumen. Durch die Angabe von return wird festgelegt, welcher Wert bei Aufruf dieser Methode zurückgegeben wird. Bei allen Methoden, die einen Wert zurückgeben, muss vor dem Namen der Methode ähnlich wie bei Variablen der Typ des Rückgabewertes angegeben werden, hier also int für integer (ganzzahlig). Wenn wir die Klasse 'Quader' so wie oben beschrieben festgelegt haben, lassen wir diesen Text übersetzen (auch als compilieren bezeichnet, Schalter links oben, Shortcut Strg-k). Dabei wird dieser Text in einen vom Computer interpretierbaren Code übersetzt. Beim Compilieren zeigen sich (nicht nur bei Anfängern) oft kleine Fehler, die eine Übersetzung verhindern, z.b. eine fehlende Klammer, ein fehlendes Semikolon oder ähnliches. Tipp 1: Da zu jeder öffnenden geschweiften Klammer eine schließende gehört, ist es vernünftig, nach der öffnenden auch gleich die schließende (in der nächsten Zeile) zu tippen. Den weiteren Text kann man dann dazwischen einfügen. Tipp 2: Einrückungen wie im Beispiel sind für die Interpretation des Quelltextes zwar nicht erforderlich, sie werden aber für die Übersichtlichkeit (auch von Profis) vorgenommen. Da die Programme mit zunehmendem Lernfortschritt komplizierter werden, sollte man sich diesen Stil von Anfang an zu Eigen machen. Beobachten Sie, wie BlueJ nach der öffnenden Klammer automatisch einrückt und die schließende Klammer an die passenden Position setzt! (Editor-Menü Bearbeiten, Befehl Auto-Layout, Shortcut Strg- Umschalt-I!) Die Einrückposition für Kommentare erreicht man am einfachsten mit der TAB-Taste. Nach dem Kompilieren der Klasse 'Quader' werden wir mit Hilfe von BlueJ Instanzen zu dieser Klasse erzeugen und untersuchen.

7 Instanzen der Klasse Quader erzeugen JAVA-Einführung, Seite 7 Wenn die Klasse 'Quader' erfolgreich compiliert wurde, ist das Symbol für diese Klasse nicht mehr schraffiert. Um nun eine Instanz von dieser Klasse zu erzeugen, klicken wir mit der rechten Maustaste auf das Klassensymbol. Aus dem sich öffnenden Kontextmenü wählen wir zunächst new Quader() aus. Der (Standard-) Konstruktor wird ausgeführt, nachdem wir einen Namen für die Instanz festgelegt haben. Auf dem Hauptfenster erscheint unten ein Symbol für das soeben erzeugte Objekt. Wir können den Vorgang wiederholen und somit weitere Instanzen derselben Klasse erzeugen. Wählen wir das nächste Mal aus dem Kontextmenü new Quader(la,br,ho) aus, so werden wir zum Ausführen des zweiten Konstruktors nach den Werten für die Parameter la, br und ho gefragt: Im oberen Abschnitt des Dialogfensters wird der Kommentar angezeigt, der im Quelltext dem Konstruktor vorangestellt worden war. Klicken wir nun mit der rechten Maustaste auf ein rotes Objektsymbol, so können wir u.a. aus dem Kontextmenü auswählen, ob wir das Objekt löschen oder untersuchen (inspizieren) wollen. Das Inspizieren zeigt uns, welche Werte die Variablen laenge, breite und hoehe besitzen. Außerdem können wir über das Kontextmenü die Methode zur Volumenberechnung aufrufen. (Dort gezeigte geerbte Methoden interessieren an dieser Stelle nicht.) Fragen und Aufgaben zum Text 1. Braucht man BlueJ, um Programme in JAVA zu schreiben? 2. Der Begriff Objekt wird manchmal sowohl für Klasse als auch für Instanz verwendet. Erläutern Sie diese Begriffe an dem hier vorgestellten und an einem anderen selbst gewählten Beispiel. 3. Muss eine Klasse einen Konstruktor besitzen? (Probieren Sie es mit einem Testprojekt aus!) 4. Kann eine Klasse verschiedene Konstruktoren besitzen? 5. Was ist im Quader-Quelltext der Unterschied zwischen la und laenge? 6. Ergänzen Sie in der Klasse 'Quader' ein Datenfeld rauminhalt und eine Methode public void berechnerauminhalt(), die aus laenge, breite und hoehe den Rauminhalt berechnet und in das Datenfeld rauminhalt einträgt. [Erläuterungen zu void folgen im nächsten Kapitel.] 7. Testen Sie die Methode von Aufgabe 6, indem Sie eine Quaderinstanz vor und nach Ausführen dieser Methode untersuchen (inspizieren).

8 JAVA-Einführung, Seite 8 2. Zweites Projekt: Bankkonto (Bank_1) In diesem Projekt werden wir eine Klasse 'Konto' erstellen. Dann werden zwei Instanzen dieser Klasse erzeugt, die Girokonten darstellen sollen. Mit Hilfe geeigneter Methoden sollen Einzahlungen und Abhebungen vom Girokonto möglich sein, aber auch Überweisungen von einem Konto auf das andere. Vorüberlegungen zur Klasse 'Konto' Zunächst überlegen wir uns, welche Eigenschaften für Konto- Instanzen in dieser Klasse festgelegt werden müssen: Ein Konto besitzt auf jeden Fall eine Kontonummer, einen Kontoinhaber und einen Kontostand. Wir benötigen eine Methoden zum Einzahlen, eine zum Abheben, eine zum Überweisen. Aber auch zum Auslesen des Kontostands werden wir eine Methode verwenden. Diese Vorüberlegungen ( Entwurf eines Modells ) sind von der Programmiersprache noch weitgehend unabhängig. Erstellen des Konto-Projekts in BlueJ: Wir starten BlueJ und beginnen ein neues Projekt, dem wir den Namen Bank_1 geben (ein weiteres Bank-Projekt werden wir dann Bank_2 nennen). Beachten Sie die Hinweise zur Readme.txt Datei sowie zu den Kommentaren vom ersten Beispiel. Bei den Variablen (Datenfelder) lernen wir neue Datentypen kennen (bisher wurde nur int verwendet): Der Typ double lässt zu, dass Zahlen mit Dezimalkomma (bzw. Dezimalpunkt) als Wert zugewiesen werden können. Für den Kontoinhaber soll ein Name zugewiesen werden und nicht eine Zahl oder Nummer. Hier wird der Typ String verwendet. Genau genommen ist String gar kein Variablentyp, sondern eine Java-Klasse, damit wird auch der Großbuchstabe am Wortanfang gerechtfertigt. In JAVA wird im Gegensatz zu einigen anderen Programmiersprachen zwischen Groß- und Kleinbuchstaben unterschieden. Klassennamen beginnen üblicherweise immer mit einem Großbuchstaben. Variablen- und Methodennamen beginnen üblicherweise mit einem Kleinbuchstaben. Zur Verbesserung der Lesbarkeit werden bei Wortzusammensetzungen oft mitten im Bezeichner Großbuchstaben verwendet (zum Beispiel getkontostand ). Die Datenfelder werden am Beginn der Klasse festgelegt (wie auch bei der Klasse 'Quader'). Der einfachste Konstruktor könnte als Kontonummer und Kontostand jeweils den Wert 0 zuweisen, als Kontoinhaber "" oder "dummy". Das ist für das Erzeugen mehrerer Konto-Instanzen natürlich nicht sinnvoll also wird man dafür sorgen, dass gleich beim Erzeugen einer Konto-Instanz nach dem Namen und der Kontonummer gefragt wird. Der Kontostand kann mit 0 initialisiert werden, aber auch die Kontoeinrichtung mit einem Startguthaben könnte vorgesehen werden. 'Konto' besitzt nach diesen Überlegungen 3 Datenfelder und 5 Methoden (eine davon ist der Konstruktor), vergl. Kasten oben links. Es folgt der Quelltext für dieses Projekt (im folgenden werden Quelltexte nicht als Screenshot dargestellt, sondern als Text mit Syntax-Hervorhebung; hier außerdem mit Zeilenummern): 1: /** 2: * Es wird eine Klasse 'Konto' programmiert. 3: * 4: B. Spier 5: : */ 7: public class Konto 8: // Instanzvariablen (Datenfelder) Modell der Klasse 'Konto': Klasse: Konto Felder: ktonummer (int) ktoinhaber (String) ktostand (double) Konstruktor: Konto(ktoNr,ktoInh) Methoden: einzahlen() abheben() getkontostand() überweisen(kto, betrag)

9 9: private int ktonummer; 10: private String ktoinhaber; 11: private double ktostand; 12: /** 13: * Konstruktor für Objekte der Klasse 'Konto' 14: * 15: ktonr Parameter für Kontonummer 16: ktoinh Parameter für Kontoinhaber 17: */ 18: public Konto(int ktonr, String ktoinh) 19: // Initialisieren der Datenfelder 20: ktonummer = ktonr; 21: ktostand = 0; 22: ktoinhaber = ktoinh; 23: 24: 25: /** 26: * Auslesen des Kontostands 27: * 28: Wert des Kontostands 29: */ 30: public double getkontostand() 31: 32: return ktostand; 33: 34: 35: /** 36: * Einzahlung vornehmen 37: * 38: betrag Betrag der Einzahlung 39: */ 40: public void einzahlen(double betrag) 41: 42: ktostand = ktostand + betrag; 43: 44: 45: /** 46: * Auszahlung vornehmen, falls Kontostand ausreichend 47: * 48: betr Betrag der Auszahlung 49: */ 50: public void auszahlen(double betr) 51: 52: if (ktostand >= betr) 53: einzahlen(-betr); 54: else // Meldung ausgeben, wenn Konto nicht gedeckt: 55: System.out.println("Das Guthaben reicht nicht aus!"); 56: 57: 58: /** 59: * Überweisung auf ein anderes Konto vornehmen 60: * 61: empfaenger Konto des Empfängers 62: geldbetrag Betrag der Überweisung 63: */ 64: public void ueberweisen(konto empfaenger, double geldbetrag) 65: 66: auszahlen(geldbetrag); 67: empfaenger.einzahlen(geldbetrag); 68: 69: JAVA-Einführung, Seite 9 Auf die Eigenschaft private der Instanzvariablen dieser Klasse wird auf Seite 15 eingegangen. Es werden jetzt die 5 Methoden der Klasse 'Konto' erläutert: 1. Die Methode Konto ist ein Konstruktor, denn sie heißt genauso wie die Klasse. Sie trägt die als Parameter übergebenen Werte in die Datenfelder der jeweiligen Instanz ein.

10 JAVA-Einführung, Seite Mit der Methode getkontostand wird der aktuelle Kontostand ausgelesen. 3. Die Methode einzahlen hat keinen Rückgabewert, deshalb muss sie mit dem reservierten Wort void deklariert werden. Beim Einzahlen eines Betrages wird der Kontostand um diesen Betrag erhöht. Bei der Schreibweise ktostand = ktostand + betrag muss man sich klar machen, dass es sich nicht um eine Gleichung handelt, sondern um eine Wertzuweisung: Zuerst wird der Wert von ktostand + betrag ermittelt, dann wird dieser wieder dem Datenfeld ktostand zugewiesen. Die Schreibweise ist professionellen Programmierern noch zu umständlich, deshalb ist auch die kürzere aber besonders für den Anfänger erheblich schwerer lesbare Schreibweise zugelassen, die dasselbe bewirkt: ktostand += betrag 4. Das Auszahlen entspricht dem Einzahlen eines negativen Betrags, deshalb kann man die Methode zum Einzahlen verwenden. Hier im Beispiel wurde einmal angenommen, dass man das Konto nicht überziehen darf; falls man mehr abheben möchte als der Kontostand beträgt, wird eine entsprechende Meldung ausgegeben. Der Vergleichsoperator >= steht für größer oder gleich. Die weiteren sind <= für kleiner oder gleich und == für gleich (s. S. 13). 5. Die interessanteste Methode ist hier die zum Überweisen. Beim Überweisen wird der angegebene Betrag vom Konto abgehoben und beim angegebenen Konto(-Objekt) eingezahlt. Das Überweisen eines negativen Betrags ist nicht verhindert, woraus sich natürlich ein Auftrag zur Programm-Verbesserung ergibt! Die Syntax für die if-anweisung kann der Methode auszahlen entnommen werden. Hinweis zum Ausführen des Konstruktors: Der Kontoinhaber muss mit Anführungszeichen ("Meier") eingegeben werden! Probieren Sie das Überweisen aus, nachdem mindestens zwei Konten erzeugt worden sind und auf das Absender-Konto ein (positiver) Betrag eingezahlt wurde! Als Parameter muss hier der Name des Konto-Objekts für das Empfängerkonto eingegeben werden, dies kann auch mit Mausklick auf das Objektsymbol erfolgen. Fragen und Aufgaben zum Text 8. Wie verfährt ein Konto im dargestellten Quelltext bei einer Überweisung, wenn die Deckung nicht ausreicht? Testen Sie es, überprüfen Sie die Kontostände! 9. Steht in der Methode ueberweisen die Variable empfaenger für den Inhaber des Empfängerkontos oder für die Konto-Instanz des Empfängerkontos? Begründen Sie! Erstellen einer vollständigen Übersicht zur Klasse 'Konto' Wir wählen den Menüpunkt Werkzeuge- Dokumentation erzeugen. Dieser Menüpunkt erstellt eine html-seite (Text-Format für Web- Seiten) und zeigt sie im Standard- Browser an (es dauert vielleicht ein Weilchen). Auf dieser html-seite ist alles beschrieben, was als public deklariert ist die als private deklarierten Datenfelder erscheinen nicht. Wer unsere Klasse 'Konto' verwenden will, muss nicht wissen, ob wir die intern verwendete Variable für die Kontonummer kontonummer oder ktonr genannt haben, weil er darauf nicht zuzugreifen braucht (s. auch S. 15).

11 JAVA-Einführung, Seite 11 Wenn Programmierer Java-Klassen austauschen oder weitergeben, geben sie in der Regel auch die Dokumentation mit. Die Klassen können als Quelltext (Datei mit der Extension.java ) oder als compilierte Klasse (Extension.class ) weitergegeben werden. Sie finden diese Dateien, wenn Sie mit dem Windows-Explorer den Ordner aufsuchen, in dem Sie Ihr Projekt gespeichert haben. Die Dokumentation zeigt Ihnen außer den Bezeichnungen der öffentlichen Methoden auch die Bedeutung der Kommentare, die Sie mit '/**' eingeleitet haben: Sie finden nicht nur die Kommentare zu den Methoden in der Method Summary wieder, sondern bei der differenzierten Beschreibung der einzelnen Methoden (weiter unten) auch die Bedeutung der Parameter oder die Bedeutung des Rückgabewerts der Methode getkontostand. Klicken Sie in der Constructor Summary auf den Klassenbezeicher 'String': Sie werden auf eine völlig gleichartig aufgebaute Webseite geführt, welche die Klasse 'String' beschreibt. Auf diesen Typ von Webseiten trifft man (fast) immer, wenn man Erklärung zu JAVA-Klassen sucht. Kommentare, die dagegen mit // eingeleitet wurden (einzeilige Kommentare), sind als Notizen aufzufassen, die der Programmierer für sich selbst (oder einen Leser des Quelltextes) angefertigt hat. Das gilt auch für die mehrzeiligen Kommentare, die zwischen '/*' und '*/' stehen. Fragen und Aufgaben zum Text 10. Untersuchen Sie, wie sich die Dokumentation der Klasse ändert, wenn Sie vor einem der Datenfelder das Schlüsselwort private durch public ersetzen! (Siehe auch Seite 15.) 11. Untersuchen Sie, wie sich die Dokumentation der Klasse ändert, wenn Sie vor einem der Datenfelder das Schlüsselwort private (bzw. public) entfernen (machen Sie dies anschließend für die weitere Verwendung des Projekts rückgängig!). Testen Sie auch den Shortcut Strg-j. Dieses Beispiel hat gezeigt, dass Instanzen auch auf Methoden anderer Instanzen zugreifen können: Beim Überweisen ruft das überweisende Konto die Methode einzahlen des empfangenden Kontos auf. Die Syntax dafür erfordert die Angabe des Objekts, dessen Methode aufgerufen werden soll, sowie den Namen der Methode als Trennzeichen steht dazwischen ein Punkt. Es mag als unbefriedigend erscheinen, dass beim Überweisen von einem Konto auf ein anderes jeweils der Name des Kontos eingegeben werden muss, und dass es hier nicht über die Eingabe der Kontonummer geht. Die Ursache liegt darin, dass es kein übergeordnetes Objekt gibt, das die Fähigkeit besitzt, aus der Kontonummer zu ermitteln, welche Kontoinstanz dazu gehört. Wenn man bei einer Überweisung eine Kontonummer als Parameter übergeben möchte, müssten alle vorhandenen Kontoinstanzen daraufhin durchsucht werden, ob sie die betreffende Kontonummer besitzen. Wenn das Konto nicht gefunden wird, muss die Überweisung abgelehnt werden. Dieser anspruchsvollen Aufgabe widmet sich das folgende Kapitel. 3. Drittes Projekt: Bank_2 Legen Sie ein neues Projekt mit dem Namen 'Bank_2' an. Dieses Projekt verwendet wieder eine Klasse 'Konto', dessen Quelltext fast vollständig mit dem des vorigen Projekts übereinstimmen wird. Klicken Sie nicht auf Neue Klasse, sondern wählen Sie im Menü Bearbeiten / Klasse aus Datei hinzufügen...! So können Sie aus Bank_1 die Klasse Konto ins Projekt Bank_2 kopieren. Bearbeiten Sie jetzt in 2 Punkten den Quelltext dieser Klasse: Als erstes löschen Sie die Methode ueberweisen der Klasse 'Konto' im Projekt Bank_2, denn Überweisungen wird die noch zu erstellende Klasse 'Bank' übernehmen. Die Klasse 'Konto' benötigt aber noch eine kurze Methode getkontonummer(): public int getkontonummer() return ktonummer; Ergänzen Sie diese Methode, gern auch mit den Kommentaren für die Dokumentation!

12 JAVA-Einführung, Seite 12 Anschließend erstellen wir eine weitere Klasse in diesem Projekt mit dem Namen 'Bank' dies wird damit unser erstes Projekt, in dem wir zwei Klassen definieren. Die Konten, die im Bankmodell verwaltet werden sollen, müssen in irgendeiner Form gespeichert werden. JAVA stellt dafür die Klasse ArrayList zur Verfügung. Instanzen dieser Klasse sind Listen-Objekte, sie besitzen Methoden zum Verwalten der Listenelemente. Die wichtigste ist die zum Hinzufügen. Natürlich kann eine solche Liste eingetragene Elemente auch wieder löschen, eine Kontoauflösung ist aber hier bei unserem Bankmodell nicht vorgesehen. Damit solche Listen-Objekte vielseitig sind, verwalten sie nur Zeiger auf die eingetragenen Elemente, aber keine Information darüber, von welchem Typ die eingetragenen Elemente sind. Die Liste merkt Modell der Klasse 'Bank': Klasse Bank Felder: Liste der Konten Konstruktor Bank() Methoden neueskonto() einzahlen() abheben() getkontostand() ueberweisen() sich also in unserem Beispiel nicht, ob ein Konto oder ein Quadrat eingetragen ist die Konsequenzen zeigen sich, wenn man ein Element aus der Liste verwenden will (s.u.). Der Quelltext der Klasse 'Bank' wird nun in Abschnitten erläutert: 1: import java.util.*; // macht ArrayList verfügbar! 2: /** 3: * Die Klasse Bank kann in einer Liste mehrere Konten verwalten, 4: * zwischen denen Überweisungen ausgeführt werden können. 5: * 6: B.Spier 7: : */ 9: public class Bank 10: 11: // einzige Instanzvariable 12: private ArrayList kontoliste; 13: 14: /** 15: * Konstruktor für Objekte der Klasse Bank 16: */ 17: public Bank() 18: 19: // Instanzvariable initialisieren 20: kontoliste = new ArrayList(); 21: Da ArrayList nicht ein gewöhnlicher Typ wie z.b. int ist, sondern eine Klasse, muss von dieser Klasse erst eine Instanz (kontoliste) erzeugt werden, bevor sie verwendet werden kann. Das geschieht mit der Zeile 20 im Konstruktor für das Bankobjekt: Hier wird der Konstruktor von ArrayList aufgerufen. Diese Syntax (new...) haben Sie vielleicht auch schon bei der Erzeugung der Quadrate oder Konten von Hand bei BlueJ bemerkt. 22: /** 23: * Einrichten eines neuen Kontos: 24: * Es ist kein Parameter für den Inhaber vorgesehen, weil das Testen 25: * des Programms dann einfacher ist. Alle Konten gehören "Meier"! 26: kontonr für die Kontonummer 27: */ 28: public void neueskonto(int kontonr) 29: 30: Konto neukto; // Variable neukto vom Typ Konto 31: neukto = new Konto(kontoNr,"Meier"); // Konto-Objekt erzeugen 32: kontoliste.add(neukto); // Konto in die Liste eintragen 33:

13 JAVA-Einführung, Seite 13 Anders als im vorigen Beispiel werden neue Konten jetzt nicht mehr durch BlueJ nach Rechtsklick auf das Klassensymbol für 'Konto' erzeugt, sondern durch die Methode neueskonto eines Bankobjekts. Wir müssen also erst ein Bankobjekt erzeugen, dann können wir nach Rechtsklick auf das Objektsymbol dessen Methode neueskonto() aufrufen, die den Konstruktor der Klasse 'Konto' verwendet. Das neu erzeugte Konto besser eine Referenz darauf (auch Zeiger genannt) wird dann mit add in die Liste eingetragen. Eine Bankinstanz verwaltet so jedes erzeugte Konto in seiner Liste der Konten. 35: /** 36: * Suchen des Konto-Objekts an Hand seiner Kontonummer 37: * 38: num für die Kontonummer 39: Referenz auf das (hoffentlich!) gefundene Konto(-Objekt) 40: */ 41: private Konto findbynumber(int num) 42: 43: int i; // Zähler für die Schleife, Referenzen 44: Konto einkto, daskto; // Zeiger für laufendes bzw. gefundenes Kto. 45: // (in der Schleife benötigte Variablen) 46: i = 0; // Initialisierung für die Schleife 47: daskto = null; // Null-Zeiger, steht für ungültiges Konto 48: while (i < kontoliste.size()) // Schleifenkopf 49: // Alle Konten in der Liste werden geprüft. 50: einkto = (Konto) kontoliste.get(i); // Ein Konto aus der Liste 51: if (einkto.getkontonummer() == num) // KtoNr. prüfen 52: daskto = einkto; // hier: Konto gefunden! 53: i++; // entspricht i = i + 1; 54: 55: if (daskto == null) 56: System.out.println("ungültige Kontonummer!"); 57: return daskto; // Referenz auf das gefundene Konto (oder null) 58: Mit Hilfe der Methode findbynumber kann das Bankobjekt alle Konten, die in die Liste eingetragen sind, nach der Kontonummer durchsuchen. Wir verwenden hier eine while-schleife, weil dies die einfachste Schleifenprogrammierung ist; die Kommentare erklären schon fast alles: Wenn in der Liste z.b. 5 Konten eingetragen sind, wird die Schleife 5-mal durchlaufen, wobei i nacheinander die Werte 0, 1,, 4 annimmt. Die Schleife wird auch dann 5 mal durchlaufen, wenn das gesuchte Konto schon früher gefunden wurde das ist zwar keine optimale Programmierung, erlaubt aber eine leicht verständliche Form unserer ersten Schleife (mehr zu while s.s. 39). Zeile 50: Weil die Liste mit get(i) nur einen untypisierten Zeiger auf das Listenelement am Platz i zurück gibt, muss dieser vor der Zuweisung an die Variable einkonto eine Typumwandlung erfahren. Das geschieht durch das vorangestellte (Konto) der Fachmann spricht dabei von einem Cast-Operator. Eine unpassende Typumwandlung kann schlimme Fehler verursachen, deshalb gibt es beim Übersetzen eine Warnmeldung! (Ergänzende Information siehe Anhang, Seite 41) Die Methoden einzahlen und abheben verwenden diese Methode findbynumber: 60: /** 61: * Einzahlen auf ein Konto unter Angabe der Parameter 62: * 63: kontonr für die Kontonummer 64: betrag für den Geldbetrag 65: */ 66: public void einzahlen(int kontonr, double betrag) 67: 68: Konto daskonto; 69: daskonto = findbynumber(kontonr); 70: if (daskonto!= null) daskonto.einzahlen(betrag); 71:

14 JAVA-Einführung, Seite 14 Zeile 70 prüft, ob überhaupt eine Konto mit der angegebenen Nummer gefunden wurde: In JAVA steht das Ausrufezeichen für die Negation,!= heißt also ungleich. Die if-anweisung ist hier ohne else verwendet worden. Bei ungültiger Kontonummer wurde ein Hinweis bereits von findbynumber ausgegeben. Weil die Anweisung in Zeile 70 bzw. 83 so kurz ist, wird auf den sonst bei if-anweisungen üblichen Zeilenumbruch verzichtet. 73: /** 74: * Abheben von einem Konto unter Angabe der Parameter 75: * 76: kontonr für die Kontonummer 77: betrag für den Geldbetrag 78: */ 79: public void abheben(int kontonr, double betrag) 80: 81: Konto daskonto; 82: daskonto = findbynumber(kontonr); 83: if (daskonto!= null) daskonto.auszahlen(betrag); 84: Abrufen des Kontostands (können Sie eine Prüfung auf gültige Kontonummer ergänzen?): 86: /** 87: * Abrufen des Kontostands unter Angabe der Kontonummer 88: * 89: kontonr für die Kontonummer 90: Kontostand 91: */ 92: public double kontostandabrufen(int kontonr) 93: 94: Konto daskonto = findbynumber(kontonr); 95: return daskonto.getkontostand(); 96: Haben Sie bemerkt, dass die Deklaration einer Variablen (daskonto) und die Zuweisung an diese in einem einzigen Schritt erfolgen kann? Hier wird der Zeiger auf das gefundene Konto zugewiesen. Nun zur Methode zum Überweisen von einem Konto auf ein anderes: 98: /** 99: * Überweisen unter Angabe der Parameter 100: * 101: ktonra Konto des Absenders 102: ktonrb Konto des Empfängers 103: betrag Betrag der Überweisung 104: */ 105: public void ueberweisen(int ktonra, int ktonrb, double betrag) 106: 107: Konto empf, absd; // Konto-Objekte 108: absd = findbynumber(ktonra); 109: empf = findbynumber(ktonrb); 110: if ((absd!= null) & (empf!= null)) 111: 112: absd.auszahlen(betrag); 113: empf.einzahlen(betrag); 114: 115: 116: Hier muss die Gültigkeit beider Kontonummern geprüft werden. Nur wenn Absender-Konto absd und Empfänger-Konto empf gültig sind, wird die Überweisung ausgeführt. Die logische UND- Verknüpfung wird in JAVA durch das &-Zeichen dargestellt. Da im WENN-Fall zwei Anweisungen stehen, sind geschweifte Klammern zur Kennzeichnung von Anfang und Ende des Blocks erforderlich. Dasselbe gilt auch für den SONST-Fall, wenn er aus mehreren Anweisungen besteht.

15 JAVA-Einführung, Seite 15 (Die Klammern dürfen selbstverständlich auch gesetzt werden, wenn sie nur eine einzige Anweisung einschließen). Wenn sich der Quelltext für die Klasse 'Bank' fehlerfrei übersetzen ließ, können wir jetzt unser Bankinstitut eröffnen und Kundenkonten einrichten, um die von uns programmierten Klassen und deren Instanzen zu testen! Also: Bankinstanz mit Rechtsklick erstellen, Bank-Namen wählen (z.b. "JGiro", "DieBank" o.ä.) und dann in dieser Bank mindestens 2 Konten einrichten. Nach einer Einzahlung sollte dann auch eine Überweisung möglich sein. Die Klasse 'Konto' wird jetzt nicht mehr von uns, sondern nur von dem Bank-Objekt benutzt. Diese Beziehung Bank verwendet Konto (allgemein <Klasse> verwendet <AndereKlasse> ) stellt BlueJ durch einen gestrichelten Pfeil in der Projektübersicht dar. Fragen und Aufgaben zum Text 12. Ergänzen Sie in einem der Bank-Projekte eine Methode, die zur Kontonummer den Namen des Kontoinhabers zurück gibt. 13. Ein Objekt A soll die Methode tuirgendwas() eines Objekts B aufrufen. Wie ist der Aufruf zu schreiben? 14. Im Projekt Bank seien zwei Instanzen erzeugt: HASPA und DEUTSCHE_BANK. Mit beiden Instanzen wurden mehrere Konten erzeugt. Welche Überweisungen sind möglich? Informationen zu private und public Bisher wurden alle Datenfelder als private deklariert. Das ist üblich, wenn keine fremde Instanz direkten Zugriff auf den Wert einer solchen Variablen zu haben braucht. Stellen wir uns vor, von der Klasse 'Konto' haben wir keinen eigenen Quelltext, sondern nur die compilierte Klassendatei und die Dokumentation. Wir erstellen eine Klasse 'Bank', welche Instanzen der Klasse 'Konto' verwalten soll. Dadurch, dass ktostand als private deklariert ist, kann nur über öffentliche Methoden (getkontostand, auszahlen, einzahlen) auf den Kontostand zugegriffen werden. Der Programmierer der Klasse 'Konto' könnte diese Methoden so erweitern, dass erst eine Geheimnummer eingegeben werden muss, bevor der Kontostand ausgelesen oder eine Auszahlung/Überweisung vorgenommen werden kann. Methoden, die den Kontostand ändern, könnten auch jeweils einen Text ausgeben, der einem Kontoauszugs-Eintrag entspricht. Wäre ktostand jetzt public, so könnten wir in der Klasse 'Bank' die folgende Methode programmieren, die eine Berechtigungsprüfung umgeht, indem sie auf den Kontostand direkt zugreift: public void ueberweisen(int ktonra, int ktonrb, double betrag) Konto empf, absd; // Konto-Objekte absd = findbynumber(ktonra); empf = findbynumber(ktonrb); if ((absd!= null) & (empf!= null)) absd.ktostand -= betrag; // Kontostand verringern empf.ktostand += betrag; // Kontostand erhöhen Nicht nur Variablen, auch Methoden können private oder public sein. Unsere Klasse Bank benötigt die Methode findbynumber, die wir aber beim simulierten Zahlungsverkehr mit der Maus im BlueJ-Fenster nie aufzurufen brauchen und deshalb als private deklariert haben.

16 JAVA-Einführung, Seite 16 Hätten wir sie als public deklariert, wäre die Auswahl der möglichen Methoden beim Rechtsklick auf ein Bankinstanzsymbol um eine unnötige Zeile unübersichtlicher geworden, wie die Abbildung zeigt. Grundsätzlich sollten also nur die Methoden und Datenfelder öffentlich sein, auf die der Zugriff von außen tatsächlich benötigt wird. 4. Viertes Projekt: Fahrkartenautomat Mit diesem Projekt testen Sie sich, wie weit Sie eigenständig (nach wenigen Vorgaben) programmieren können. Fast alles, was Sie benötigen, wurde in den bisherigen Kapiteln genannt: Namen für das Projekt festlegen (also einen Ordner einrichten), neue Klasse erzeugen (wieder einen Namen überlegen), private Datenfelder deklarieren, diese mit dem Konstruktor initialisieren, weitere Methoden programmieren (siehe folgende Punkte 1, 2, 3, 5). Orientieren Sie sich dabei an den bisher erstellten Programmen! Unser virtueller Fahrkartenautomat soll folgendes können: 1. Der Anwender muss einen Fahrpreis für die gewünschte Fahrkarte eingeben können (Festlegung des zu zahlenden Betrags, z.b. 4.3 für 4,30 ), die Klasse benötigt dafür eine sinnvoll benannte Methode. Ein Datenfeld fahrpreis vom Typ double muss dann den gewünschten Fahrpreis speichern. Zum Testen des Automaten ist es zweckmäßig, bereits im Konstruktor den Fahrpreis mit z.b. 3.8 zu initialisieren dann muss man nicht bei jedem Neustart erst einen Fahrpreis eingeben. 2. Der Anwender muss nach der Festlegung des Fahrpreises Geld einwerfen können (z.b. mehrmals 1 oder 0,50 o.ä.), eine Prüfung auf tatsächlich möglichen Münzwert entfällt. Die Klasse benötigt im Prinzip also eine Methode einzahlen(betrag) wie im vorigen Projekt. Ein weiteres Datenfeld einwurf vom Typ double muss den bereits gezahlten Betrag speichern. 3. Eine Methode druckefahrkarte soll einen von der bisherigen Zahlung abhängigen Text ausgeben: Zuerst wird der gewählte Fahrpreis ausgedruckt, dann der bisher gezahlte Betrag. Wenn dieser noch nicht reicht, wird der Fehlbetrag ausgegeben. Wurde genug gezahlt, ist der Kauf abgeschlossen, und die Höhe des Wechselgeldes wird ausgegeben. Außerdem muss der eingeworfenen Betrag auf 0 zurückgesetzt werden. Info zum Drucken : System.out.println (print line) gibt eine Zeile, also Text mit anschließendem Zeilenumbruch aus. Neu ist hier: System.out.print System.out.println("BlueJ-Bahngesellschaft"); System.out.print("Fahrkahrte zu "); // Text System.out.println(fahrPreis); // Wert... (u.s.w.) (ohne ln) gibt Text aus, ohne dass sich ein Zeilenumbruch anschließt. Sie können die beiden letzten Zeilen aber auch zu einer einzigen zusammenfassen: System.out.println("Fahrkarte zu " + fahrpreis); Mit + können Strings aneinander gehängt werden, in diesem Fall wandelt JAVA die Zahl fahrpreis dazu in einen String um. 4. Diesen Punkt können Sie ergänzen, nachdem alles andere fehlerfrei läuft:

17 JAVA-Einführung, Seite 17 Die Klasse soll ein drittes Datenfeld gesamteinnahmen besitzen, in dem die Einnahmen bei jedem Kauf eines Fahrscheins aufsummiert werden. Es genügt, dass dieses Datenfeld durch Inspizieren geprüft werden kann oder möchten Sie eine Methode getgesamteinnahmen() schreiben? 5. Optional können Sie den Fahrkartenautomaten verbessern, indem Sie eine Methode zum Abbrechen des Fahrkartenkaufs ergänzen. Sie sollte als Text die Rückzahlung des bisher eingeworfenen Betrags melden. Was muss sie sonst noch tun? Die Abbildung zeigt ein mögliches Ergebnis des Projekts: Sie können den Namen des Projekts, den Namen der Klasse und den aktuell gewählten Namen für die Instanz dieser Klasse herauslesen. Ein Fahrpreis wurde festgelegt, Geld wurde eingeworfen. Das Bild zeigt das Fenster nach Aufruf der Methode druckefahrkarte. Mit Sicherheit wird Ihr Ergebnis noch nicht so wie hier aussehen können, denn hier wurde die Ausgabe auf 2 Nachkommastellen und mit Dezimalkomma formatiert. Diese Formatierung rundet zugleich, so dass Rechenfehler ausgeglichen werden. Es folgen hierzu weitere Informationen: Wie entstehen Rechenfehler beim Computer? Computer rechnen im Zweiersystem. Brüche wie 1 2, 1 4, 1 8, 5 8 sind in diesem System abbrechende Dualbrüche. Brüche, deren Nenner jedoch keine Zweierpotenz sind, sind periodische Dualbrüche. Der Grund ist der, den wir aus dem Dezimalsystem kennen: Wenn der Nenner sich nicht aus Potenzen von 2 oder 5 zusammensetzt, wird der Dezimalbruch periodisch. 2 und 5 sind Teiler der Basis 10, daher ist z.b. 3 = 3 = 12 =0, abbrechend. 4 =0,36 11 ist dagegen periodisch. Da die Basis 2 nur die 2 als echten Teiler hat, können im Zweiersystem nur Brüche wie die oben genannten abbrechend sein, 1 5 oder 1 10 sind in diesem System dagegen periodisch, also unendlich lang. Da der Computer aber Zahlen nur in wenigen Bytes speichert, muss er die Darstellung abbrechen. Selbst wenn dabei richtig gerundet wird, entstehen Ungenauigkeiten. Die Ungenauigkeit zeigt sich beim Fahrkartenautomaten z.b. bei einem Fahrschein zu 3,80, wenn 0,10 bezahlt sind. Als Restbetrag werden 3, berechnet! (Probieren Sie es aus!) Zahlen formatieren JAVA stellt verschiedene Methoden zum Formatieren von Zahlen zur Verfügung. In JAVA sind alle Methoden an Klassen gebunden, wir verwenden hier die Methode format der Klasse String. String.format("Noch zu zahlen: %.2f ",(fahrpreis einwurf)) liefert einen formatierten String für den Wert von (fahrpreis einwurf), er enthält am Beginn den Text Noch zu zahlen:. Das %-Zeichen kennzeichnet das Einfügen aus nachfolgend angegebenen Parametern..2 kennzeichnet die Genauigkeit von 2 Nachkommastellen, f kennzeichnet die Umwandlung eines float- oder double-werts (Fließkommazahl). Die weiteren Zeichen folgenden dem eingefügten String, sodass das Ergebnis z.b. im Falle des Werts

18 JAVA-Einführung, Seite der String Noch zu zahlen: 0,20 wird, weil die Methode zugleich auch rundet. Die Umwandlung des Dezimalpunkts in ein Komma erfolgt auf Grund der Spracheinstellung des Betriebssystems. Die format-methode der Klasse String ist sehr vielseitig, mit ihr können z.b. auch Datumswerte formatiert werden (siehe nachfolgendes Kapitel). Ein weiteres Beispiel für die Formatierung auf 2 Nachkommastellen: System.out.println(String.format("Fahrkahrte zu %.2f ",fahrpreis)); Diese Art der Formatierung können Sie überall dort verwenden, wo ein Euro-Wert mit 2 Nachkommastellen ausgeben werden soll. 5. Fünftes Projekt: Person (Vererbung / GregorianCalendar) Ein bedeutendes Merkmal objektorientierter Programmierung (und darum geht es bei JAVA) ist die Möglichkeit, bereits programmierte Klassen als Ausgangsbasis für weitere Klassen mit zusätzlichen Datenfeldern und Methoden zu verwenden. Die so von einer Basisklasse abgeleiteten Klassen erben die Datenfelder und Methoden der Basisklasse, wodurch der Quelltext der neuen Klasse weniger umfangreich ist. Die Verwendung fertiger Basisklassen ist für den Programmierer eine deutliche Arbeitserleichterung. Dieses Prinzip werden wir in Kapitel 6 nutzen, um mit Hilfe bereits in JAVA vorgegebener Klassen Applets (Anwendungen) zu programmieren, die in einem Browser ablaufen können. Erzeugen Sie das neue Projekt mit dem Namen Vererbung. Erstellen Sie in diesem Projekt eine Klasse mit der Bezeichnung Person. Eine Person hat einen Vornamen, einen Nachnamen, ein Geburtsdatum. Außerdem soll vermerkt werden können, ob die Person Informatiker ist oder nicht. Vor- und Nachname sind Strings, das Geburtsdatum müssen wir als Instanz der in JAVA vordefinierte Klasse GregorianCalendar festlegen (die Bezeichnung bezieht sich auf den Gregorianischen Kalender, der seit dem 15. Oktober 1582 regelt, welche Jahre Schaltjahre sind). Die Informatiker-Eigenschaft kann nur die Werte true oder false annehmen, dieser Typ heißt boolean. Wenn eine Person geboren wird, steht das Geburtsdatum fest darum wird hier vorgeschlagen, dass der Konstruktor beim Erzeugen einer Instanz der Klasse Person Tag, Monat und Jahr der Geburt erfragt.

19 JAVA-Einführung, Seite 19 Wenn wir jetzt eine Instanz erzeugen, müssen wir also Werte für t, m, j eingeben. Da GregorianCalendar die Monate als Zahlen von 0 bis 11 verwaltet, muss die Eingabe für m um 1 vermindert werden! Beim Inspizieren der Person werden Sie feststellen, dass Sie das Geburtsdatum nicht in der Form von Tag, Monat und Jahr auslesen können. Möchten Sie eine Methode getgeburtsdatum() schreiben, die dieses Datum als String zurückgibt? Dazu müssen Sie herausfinden, wie aus der Instanz geburtsdatum ein Datumsstring gewonnen werden kann! Sie müssen jetzt keine Suchmaschine oder Foren bemühen, holen Sie sich mit BlueJ (siehe Abb.) die Hilfe über Klassenbibliotheken! Sie führt auf die Webseite (Stand vom September 2014) Sie finden dann in der Beschreibung der Klasse String etwas weiter unten die Beschreibung der beiden format-methoden. Klicken Sie wie in der Abbildung angedeutet auf format, von dort können Sie zu einer so umfangreichen Beschreibung gelangen, wie ein format string aussehen kann, dass Sie erleichtert sein dürften, einen Weg zur formatierten Ausgabe eines Datums auch im folgenden Absatz zu finden:

20 JAVA-Einführung, Seite 20 Die folgende Methode gibt das in geburtsdatum gespeicherte Datum formatiert als String zurück: public String getgeburtsdatum() return String.format("%1$td.%1$tm.%1$tY", geburtsdatum); Vielleicht gelingt es Ihnen ja, mit Hilfe der angegebenen Webseite das Datum auch so zu formatieren, dass zusätzlich noch der Wochentag ausgegeben wird (Aufgabe 22)! Anmerkungen: Methoden, die Daten auslesen, beginnen üblicherweise mit get. Daran lehnt sich hier der Vorschlag für den Methodennamen zum Auslesen des Geburtsdatums an. Wenn Sie solche Sprachvermischungen vermeiden wollen, können Sie getdayofbirth oder holegeburtsdatum verwenden. Ein Vorteil deutscher Wortanteile ist der, dass sofort erkennbar ist, ob vordefinierte oder eigene Bezeichner verwendet sind. Zur Übung und damit unsere Person etwas mehr zu vererben hat (darum geht es ja in diesem Kapitel), folgen zunächst noch einige Aufgaben: Fragen und Aufgaben zum Text 15. Wie ändert sich die formatierte Datumsausgabe, wenn Sie im format-string für das Jahr ein kleines y verwenden? 16. Damit die Person einen Namen bekommt, wird eine Methode setname(string v, String n) benötigt, mit der Vor- und Nachname festgelegt werden. Schreiben Sie diese. 17. Schreiben Sie eine Methode setinfomatikeryes(), die das Datenfeld informatiker auf true setzt. 18. Schreiben Sie eine Methode setinfomatikerno(), die informatiker auf false setzt. 19. Schreiben Sie eine Methode setinfomatiker(boolean x), die informatiker auf einen Wert setzt, den der Anwender eingibt. 20. Schreiben Sie eine Methode getganzername(), die die Kombination aus Vor- und Nachnamen als String zurück gibt. 21. Schreiben Sie eine Methode druckeganzennamen(), die mit System.out.println den vollständigen Namen auf das Konsolenfenster ausgibt. Diese Methode sollte getganzername verwenden! 22. Schaffen Sie es, das Geburtsdatum einschließlich Wochentag auszugeben? Berechnung des Alters einer Person Wir ergänzen jetzt noch eine Methode, die das Alter der Person liefert. Dafür brauchen wir eine Instanz von GregorianCalender, die das aktuelle Datum enthält. Wir nennen sie heute und erhalten sie, indem wir den Konstruktor ohne Parameter aufrufen. Dann schließt sich die Berechnung des Alters an, die nicht ganz einfach ist, weil zunächst festgestellt werden muss, ob die Person im laufenden Jahr bereits Geburtstag hatte (oder gerade hat). Die Verwendung einer Hilfsvariablen hatteschongeburtstag macht den folgenden Quelltext (hoffentlich) leicht verständlich:

21 JAVA-Einführung, Seite 21 public int getalter() boolean hatteschongeburtstag = false; // wird nach Prüfung evt. true GregorianCalendar heute = new GregorianCalendar(); // Kalenderobjekt für // heutiges Datum if (heute.get(calendar.month) > geburtsdatum.get(calendar.month)) // Person hatte in diesem Jahr hatteschongeburtstag = true; // schon Geburtstag. Weitere Prüfung else // bei gleichem Monat: if (heute.get(calendar.month) == geburtsdatum.get(calendar.month) & heute.get(calendar.day_of_month) >= geburtsdatum.get(calendar.day_of_month)) // Tag vergleichen hatteschongeburtstag = true; if (hatteschongeburtstag) return heute.get(calendar.year) - geburtsdatum.get(calendar.year); else return heute.get(calendar.year) - geburtsdatum.get(calendar.year) - 1; Vererbung Jetzt sollen zwei weitere Klassen erstellt werden: Eine Klasse Schüler und eine Klasse Lehrer. Da Schüler und Lehrer natürlich Personen sind, sollen auch sie Namen und Geburtsdatum besitzen. Zusätzlich sollen Schüler aber ein Datenfeld für ihre Schulklasse (z.b. "11c", also vom Typ String) besitzen. Lehrern geben wir keine Schulklasse, dafür aber zwei Unterrichtsfächer (weil das für die meisten Lehrer am Gymnasium zutrifft). Natürlich könnte man den Quelltext von Person kopieren, um alles zu übernehmen, und man müsste nur die Klassenbezeichnung (Objektklasse, nicht Schulklasse der Begriff Klasse ist in diesem Abschnitt leider nicht eindeutig!) im Konstruktor anpassen. Für den Zugriff auf Unterrichtsfächer bzw. die Schulklasse wären noch wenige Methoden zu ergänzen. Dann hätten wir aber einen großen Teil des Quelltextes 3 mal zu verwalten. Ein Fehler in der Berechnung des Alters müsste in 3 Textdateien korrigiert werden. Um solche Nachteile zu vermeiden, wurde die Möglichkeit geschaffen, von vorhandenen Klassen erweiterte Klassen abzuleiten. Die abgeleiteten Klassen erben dann alle Eigenschaften und Methoden der Vorgängerklasse. Zunächst erstellen wir in unserem Projekt eine neue Klasse mit der Bezeichnung Schüler (oder Schueler ) und eine weitere mit der Bezeichnung Lehrer. Es gibt bei BlueJ zwei Verfahren, um diese Klassen als Erweiterungen von Person zu deklariereren. Methode 1: Im BlueJ-Fenster wählen wir mit der Maus den Pfeil mit durchgezogener Linie aus und ziehen damit einen Pfeil von Lehrer zu Person. Methode 2: Wir fügen in der Klasse Schüler die zwei Wörter extends Person ein (s. Abb.). public class Schüler extends Person... <u.s.w.>...

22 JAVA-Einführung, Seite 22 Die Konstruktoren der neuen Klassen sollen nun so überarbeitet werden, dass sie Lehrer- bzw. Schülerinstanzen mit Geburtsdatum erzeugen: Ein Konstruktor der abgeleiteten Klasse muss einen Konstruktor der Vorgängerklasse durch Verwendung des Schlüsselworts super aufrufen. Für die Klasse Lehrer sind hier als Beispiel zwei Konstruktoren angegeben. Ganz ähnlich gestalten wir den Quelltext für die Klasse Schüler. /** * Beschreibung der Klasse Schüler. * B.Spier Jan */ public class Schüler extends Person String klasse; /** * Konstruktor für Schüler */ public Schüler(int t, int m, int j) super(t, m, j); klasse = ""; /** * Beschreibung der Klasse Lehrer. * B. Spier Jan */ public class Lehrer extends Person private String fach1, fach2; /** * Konstruktoren für Lehrer */ public Lehrer(int t, int m, int j) super(t, m, j); public Lehrer(int t, int m, int j, String f1, String f2) super(t, m, j); fach1 = f1; fach2 = f2; Wenn Sie jetzt Instanzen von Lehrer und Schüler erzeugen, stehen diesen alle Methoden von Person zur Verfügung. Fragen und Aufgaben zum Text: 23. Ergänzen Sie für die Klasse Schüler eine Methode zum Setzen der Schulklasse! 24. Erzeugen Sie Instanzen von Person, Schüler, Lehrer und testen Sie deren Methoden, so dass z.b. beim Inspizieren von schüler1 die abgebildete Situation entsteht! Überschreiben Wenn eine Klasse eine Vorgängerklasse erweitert, so erbt sie deren Methoden. Manchmal ist es sinnvoll, eine geerbte Methode für die erweiterte Klasse speziell anzupassen. Man könnte zum Beispiel annehmen, dass ein Lehrer auch das Fach Informatik unterrichtet, wenn er Informatiker ist.

23 Es soll jetzt die Methode setinfomatikeryes() speziell für Lehrer erweitert werden, so dass dabei fach2 auf Informatik gesetzt wird. Weil informatiker in Person als private deklariert ist, verwenden wir die geerbte öffentliche Methode setinformatikeryes() von Person. Nun kann aber public void setinformatikeryes() setinformatikeryes(); fach2 = "Informatik"; nicht funktionieren, weil jetzt die Methode des Lehrers immer wieder sich selbst aufruft, anstatt auf die geerbte Methode zuzugreifen! Die Lösung ist das Schlüsselwort super, das wir schon beim Aufruf des geerbten Konstruktors kennen gelernt haben (s. rechts). JAVA-Einführung, Seite 23 Als Nachweis, das dies wirklich funktioniert, ergänzen wir einige Zeilen in der Klasse Schüler: public class Schüler extends Person String klasse; Person einlehrer; // <--- ERGÄNZUNG public Schüler(int ta, int mo, int ja) super(ta, mo, ja); klasse = ""; Methode in der Basisklasse Person (Lösung von Aufgabe 18): einlehrer = new Lehrer(2,5,1961); // <--- ERGÄNZUNG einlehrer.setinformatikeryes(); // <--- ERGÄNZUNG public void setinformatikeryes() informatiker = true; Methode, die in der Klasse Lehrer ergänzt wird, und damit die geerbte überschreibt: public void setinformatikeryes() super.setinformatikeryes(); fach2 = "Informatik" //... Erzeugen Sie jetzt eine Instanz von Schüler. Inspizieren Sie diesen Schüler, inspizieren Sie dann dessen Objekt einlehrer! Dass einlehrer einem Datenfeld vom Typ Person zugewiesen wurde, hat hier keine Auswirkung, es hätte ebenso gut auch ein Feld vom Typ Lehrer verwendet werden können.

24 JAVA-Einführung, Seite Sechstes Projekt: Wir programmieren ein Applet Das Wort Applet ist eine zusammengesetztes Kunstwort, das aus Application (= Anwendung) und Snippet (= Schnipsel) gebildet ist. Es bezeichnet hier ein JAVA-Programm, das in einem Web- Browser läuft. Mit der Bearbeitung dieses Kapitels schreiben Sie also ein Programm, dass unabhängig von BlueJ läuft. Sie können es weitergeben oder auf Ihre Homepage setzen. Es kann auf jedem Computer laufen, auf dem eine JAVA-runtime-engine installiert ist, also auch unter anderen Betriebssystemen als Windows. Auch wenn unser erstes Beispiel nichts Beeindruckendes leistet, so zeigt es doch im Ansatz die Möglichkeiten, die sich mit Applets eröffnen! Wir beginnen ein neues Projekt und legen dafür den Namen Zeichnen_1 fest, denn wir werden auf der Applet-Fläche ein wenig zeichnen. (Kreise? Quadrate? Linien? Ausgefüllte Flächen? Man wird sehen!) Für die neue zu erstellende Klasse wählen wir den Namen Applet1. Wichtig: Art der Klasse ist jetzt nicht die Voreinstellung Klasse, sondern Applet! Das schon recht umfangreiche Quelltext-Gerüst, das BlueJ vorgibt, reduzieren wir in diesem Projekt zunächst auf die folgenden wenigen Zeilen: import java.awt.*; import javax.swing.*; /** * Minimal-Applet * B.Spier Feb.2010 */ public class Applet1 extends JApplet /** * Methode, die für das gewünschte Aussehen der Appletfläche sorgt. * (public: wird von dem Programm aufgerufen, welches das Applet darstellt) g das Graphics-Objekt für dieses Applet */ public void paint(graphics g) // einfacher Text wird im Applet angezeigt. Er beginnt bei x=20 // und y=30, bezogen auf die obere linke Ecke der Appletfläche. g.drawstring("dies ist ein JApplet!", 20, 30); Jetzt erkennen Sie deutlich: Die Klasse Applet1 ist von JApplet abgeleitet. Sie hat eine Fülle von Methoden von JApplet und dessen Vorgängerklassen geerbt (bei Interesse sehen Sie sich die Dokumentation an!). Außerdem sollte Ihnen auffallen: Es gibt hier keine Methode public Applet1() diese Klasse hat also keinen eigenen Konstruktor! Zwar können Sie mit BlueJ eine new-methode aufrufen, das ist dann ein von einem Vorgänger geerbter Konstruktor ohne Parameterübergabe. Den Konstruktor brauchen wir aber nicht, denn zum Ausführen von Applets rufen wir nie einen Konstruktor auf! Das übernimmt die installierte JAVA-Umgebung, wenn ein Applet zum Laufen gebracht wird. Dazu führen Sie folgende Schritte aus:

25 JAVA-Einführung, Seite 25 Klicken Sie mit der rechten Maustaste auf das Applet1-Symbol und wählen Sie den Punkt Applet ausführen. Bevor nun das Applet ausgeführt wird, können Sie zwischen zwei Varianten der Ausführung wählen: Browser oder Appletviewer. Der Appletviewer ist deutlich schneller, weil er nicht eine komplette Browser-Oberfläche laden muss. Nehmen Sie also diesen für den ersten Test dieses Applets. Außerdem können Sie die Breite und Höhe der Applet-Fläche einstellen, die Abbildung zeigt das Applet bei Pixeln. Ob Sie das Applet im Viewer anzeigen, im Browser anzeigen, oder nur die Webseite erstellen: In jedem Fall wird eine html-textdatei erzeugt, die mit jedem Browser dargestellt werden kann. Sie finden sie in Ihrem Projektordner und können Sie von dort (auch ohne BlueJ) mit dem Internet- Explorer (Firefox, GoogleChrome usw.) öffnen. Wählen Sie erneut Applet ausführen, wählen Sie jetzt aber Applet im Browser ausführen. Die Abbildung links stellt das Applet im Internet-Explorer dar. Je nach Sicherheitseinstellungen müssen Sie eventuell die Ausführung von JAVA-Applets zulassen, bevor das Applet angezeigt wird. Die html-seite, die BlueJ für diese Darstellung erzeugt hat, befindet sich im Projektordner und heißt Applet1.html. Unter Umständen zeigen (vor allem ältere) Browser die Hintergrundfläche nicht in weiß, sondern in schwarz. Darum soll als nächstes die Paint-Methode derart erweitert werden, dass vor der Textausgabe der Hintergrund gelöscht wird. Außerdem zeichnen ein wir ein Rechteck, eine Linie, eine Rechteckfläche und eine Kreisfläche: public void paint(graphics g) Rectangle r = getbounds(); // Applet-Position und -Größe holen g.clearrect(r.x, r.y, r.width, r.height); // Hintergrund löschen g.setcolor(new Color(180,200,230)); // Farbe (RGB) setzen g.fillrect(10,10,100,50); // Rechteckfläche zeichnen g.setcolor(color.black); // vordefinierte Farbkonstante g.drawstring("kleine Applet-Demo", 20, 20); g.setcolor(color.red); // vordefinierte Farbkonstante g.filloval(70,30,60,60); // ausgefüllter Kreis g.drawrect(15,40,20,30); // Rechteck-Rand g.setcolor(color.blue); // vordefinierte Farbkonstante g.drawline(40,30,119,119); // Linie (Start-Pos. - End-Pos.) Das abgebildete Applet ist in der Größe erzeugt, Sie können aber die Größe des Appletviewer-Fensters noch nachträglich verändern. Aufbau eines HTML-Quelltextes Jetzt wollen wir uns noch ein wenig mit der html-seite befassen, die BlueJ beim Ausführen im Browser erzeugt. Öffnen Sie dazu die Datei Applet1.html mit dem Windows-Editor. HTML ist die Abkürzung für hypertext markup language, eine Textform, die Markierungen und Links ermöglicht. Eine html-

26 JAVA-Einführung, Seite 26 Seite wird stets mit dem Tag <html> eingeleitet und mit </html> beendet. Zwischen diesen Tags gibt es einen head-abschnitt, der mit <head> eingeleitet und mit </head> abgeschlossen wird, sowie einen body-abschnitt, für den Entsprechendes gilt (<body> </body>). Textabschnitte, die mit <!-- beginnen und mit --> enden, sind Kommentare. Sie beeinflussen daher das Aussehen der html-seite in keiner Weise und können gelöscht werden, nachdem Sie sie gelesen haben. Im head-abschnitt stehen Informationen für den Browser; zwischen <title> und </title> steht der Titel für die Kopfleiste des Browserfensters (bzw. die Registerkarte). Ändern Sie den Titel auf Applet1 anzeigen. Der body-abschnittt enthält den Inhalt der html-seite. <h1> steht für eine Überschrift (headline) mit vordefinierten Schriftattributen, ändern Sie den Text auf Demo-Applet. <hr> liefert eine horizontale Trennlinie, wir finden dieses Tag auch unmittelbar vor Ende des body-abschnitts. Zwischen diesen beiden Linien steht der für die Ausführung des Applets entscheidende Code, eingeleitet mit <applet> und abgeschlossen mit </applet>. Das <applet>-tag ist erweitert durch Angabe der class-datei, zu der unser Applet-Quelltext compiliert wurde, es folgen Breite und Höhe des Applet-Bereichs in der html-seite. codebase="." wird hier nicht erläutert. Die Zeile archive="file:/c:/programme/bluej/lib/bluejcore.jar,..." verweist auf Speicherorte auf dem gerade verwendeten Computer. Löschen Sie diese Zeile! Sie führt sonst leicht zu Fehlermeldungen, wenn das Applet auf einem anderen PC laufen soll! Mit alt wird ein alternativer Text angegeben, der angezeigt wird, wenn die Anzeige des Applets nicht funktioniert. Das daran anschließende >-Zeichen schließt das <applet>-tag ab. Wenn Sie noch eigenen Text in der html-seite ergänzen möchten, können Sie das gern tun das hier gezeigte Beispiel ( Sieht das nicht schön aus? ) soll aber verdeutlichen, dass hier nur ein minimaler Aspekt zum html-aufbau dargestellt wurde. Selbst einfache Umlaute müssen als Sonderzeichen speziell codiert werden, weshalb html-seiten meistens mit Hilfsprogrammen geschrieben werden. Der folgende html-quelltext liefert das abgebildete Applet-Aussehen. <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>applet1 anzeigen</title> </head> <body> <h1>demo-applet</h1> <hr> <applet code="applet1.class" width=200 height=120 codebase="." alt="applet wird (noch) nicht ausgeführt." > Ihr Browser ignoriert das <APPLET>-Tag! </applet> <hr> Sieht das nicht schön aus? </body> </html> (Vergleichen Sie auch mit dem html-text, der im Anhang angegeben ist!)

27 JAVA-Einführung, Seite 27 Speichern Sie den Text nach den vorgenommenen Änderungen. Beachten Sie, dass bei erneutem Aufruf zum Ausführen im Browser BlueJ die html-seite neu erstellt und Ihre Änderungen verloren gehen! Kopieren deshalb Sie diese Datei zusammen mit der Datei Applet1.class auf einen USB-Stick (in einen gemeinsamen Ordner) und testen Sie dieses Applet auf einem Computer, der BlueJ nicht kennt! Vielleicht haben Sie ja sogar die Möglichkeit, dieses Applet unter Linux oder einem Apple-Betriebssystem zu testen. 7. Siebentes Projekt: Das Applet reagiert auf eine Maus-Aktion In diesem Kapitel lernen Sie, wie ein Applet auf die Betätigung einer Maustaste reagieren kann. Das ist der erste Schritt in Richtung auf ein richtiges Programm, also ein Applet, das auf Aktionen des Anwenders reagiert. Unsere Maus-Demo erstellen wir in 3 Versionen, die schrittweise kompakter werden. MausDemo3 hat den kürzesten Quelltext, dieser ist aber ohne MausDemo1 und MausDemo2 kaum zu verstehen. Alle 3 Maus-Demo-Applets leisten dasselbe: Sie stellen auf der Applet- Fläche eine farbige Kreisfläche dar, die beim Klicken mit der Maus (genau genommen: beim Drücken einer Maustaste) die Farbe zwischen rot und blau wechselt. Dabei spielt es noch keine Rolle, ob die Kreisfläche oder der Bereich daneben getroffen wurde. Für die Übersicht Ihrer Ordner- Struktur ist es zweckmäßig, diese 3 Projekte in einem eigenen Ordner Mausdemo123 zu speichern. Wählen Sie also Neues Projekt, navigieren Sie zum Ordner Ihrer BlueJ-Projekte, erstellen Sie einen neuen Ordner Mausdemo123, speichern Sie in diesem das neue Projekt als Mausdemo1. Erstellen Sie zuerst die Klasse Kreis. Der Konstruktor zeigt, wie man auf die Instanzvariable x zugreift, wenn der übergebene Parameter ebenfalls x heißt: this ist ein Zeiger auf die aktuelle Instanz der Klasse Kreis. Als nächstes erstellen Sie die Klasse MausDemo1, als Art der Klasse wählen Sie Applet. Die nicht verwendeten vorgegebenen Methoden sind auf der folgenden Seite nicht abgebildet. import java.awt.*; /** Klasse Kreis: * Eine Fläche mit Farbe * Spier Feb.2010 */ public class Kreis private int r; private int x, y; private Color farbe; /** Konstruktor für Kreis x,y,r: Mitte, Radius */ public Kreis(int x, int y, int r) this.x = x; this.y = y; this.r = r; farbe = Color.red; Quelltext für die Klasse Quelltext für die Kreis Klasse Kreis /** Diese Methode zeichnet die Kreisfläche. grafikobjekt: Objekt, mit dem auf * die Appletfläche gezeichnet wird. */ public void zeichnen(graphics grafikobjekt) grafikobjekt.setcolor(farbe); grafikobjekt.filloval(x-r, y-r, 2*r, 2*r); /** Diese Methode wechselt die Farbe * rot <--> blau und zeichnet neu. */ public void farbwechsel(graphics gr) if (farbe == Color.red) farbe = Color.blue; else farbe = Color.red; zeichnen(gr); // mit neuer Farbe zeichnen

28 JAVA-Einführung, Seite 28 Wenn sich beide Klassen fehlerfrei übersetzen lassen, können Sie das Applet testen: Es muss eine rote Kreisfläche auf weißem Grund zeigen. import java.awt.*; import javax.swing.*; /** Das Applet Klasse MausDemo1 demonstriert * die Verwendung von MeinMausAdapter, einer * Erweiterung von MouseAdapter. * (Siehe separate Quelltextdatei) * Quelltext für das Applet Spier Quelltext für das Applet Feb.2010 MausDemo1 (vorläufig) MausDemo1 (vorläufig) */ public class MausDemo1 extends JApplet // das Applet verwaltet einen Kreis // MeinMausAdapter greift darauf zu, // daher nicht private! public Kreis meinkreis; Jetzt erzeugen wir im selben Projekt eine weitere neue Klasse, wir nennen sie MeinMausAdapter. Diese Klasse ist eine Erweiterung der in java.awt.event.* vordefinierten Klasse MouseAdapter. MeinMausAdapter hat die Methode mousepressed geerbt. Da diese bisher nichts tut, wird sie hier so überschrieben, dass sie den Kreis mit gewechselter Farbe neu zeichnet (siehe Fortsetzung des Quelltextes auf der nächsten Seite). import java.awt.event.*; /** Wird vom Browser oder Applet-Viewer * aufgerufen,... */ public void init() // Workaround für... JRootPane rootpane = this.getrootpane(); rootpane.putclientproperty( "defeatsystemeventqueuecheck",true); // Kreis erzeugen: Mitte (40 40), Radius 35 meinkreis = new Kreis(40, 40, 35); // HIER WIRD NOCH DER MAUSADAPTER ERGÄNZT! // Methode zum Zeichnen des Applets public void paint(graphics g) Rectangle r = getbounds(); g.clearrect(r.x, r.y, r.width, r.height); meinkreis.zeichnen(g); /** MeinMausAdapter überschreibt die geerbte Methode mousepressed. Feb.2010 */ Quelltext für Quelltext für public class MeinMausAdapter extends MouseAdapter MeinMausAdapter (Teil 1) MeinMausAdapter (Teil 1) /** Die geerbte Methode mousepressed von MouseAdapter tut nichts. * Hier wird sie überschrieben, so dass beim Drücken einer Maustaste * etwas geschehen kann: Kreisfarbe wechseln! * e MouseEvent-Instanz, die von JAVA verwaltet wird. */ public void mousepressed(mouseevent e) // Wir brauchen einen Zeiger auf das Applet. MausDemo1 md1; // Der MouseEvent e besitzt die Methode getcomponent(), // mit der wir diesen Zeiger erhalten.

29 JAVA-Einführung, Seite 29 // Vor der Zuweisung ist eine Typumwandlung nötig: md1 = (MausDemo1) e.getcomponent(); // Graphics-Objekt holen und damit den Farbwechsel ausführen: md1.meinkreis.farbwechsel(md1.getgraphics()); Quelltext für Quelltext für MeinMausAdapter (Teil 2) MeinMausAdapter (Teil 2) In der Methode mousepressed muss auf das Applet zugegriffen werden, um auf dessen Kreis zugreifen zu können. Da die Kreis-Methode "farbwechsel" als Parameter das Graphics-Objekt des Applets benötigt, müssen wir ihr dieses übermitteln. Das Applet hat freundlicherweise die Methode getgraphics() geerbt, mit der wir dieses Graphics-Objekt erhalten. Wenn sich diese Klasse fehlerfrei übersetzen lässt, können Sie fortfahren: Der Mausadapter muss nun in das Applet eingebaut werden. Das geschieht in der init-methode von MausDemo1, direkt nach dem Erzeugen des Kreises (siehe Seite 28), durch Einfügen der Diese Ergänzung vervollständigt abgebildeten Zeilen. Diese Ergänzung den Quelltext vervollständigt für das Applet den MausDemo1. Quelltext für das Applet MausDemo1. MeinMausAdapter mausreaktion = new MeinMausAdapter(); addmouselistener(mausreaktion); Zunächst wird hier also eine Variable vom Typ MeinMausAdapter deklariert, sie wird noch in derselben Zeile initialisiert. Der Konstruktor-Aufruf (ohne Parameter) führt auf einen geerbten Konstruktor. Dann wird diese Instanz unseres Mausadapters durch die (geerbte) Methode addmouselistener in das Applet eingebunden. Wenn Sie es gern kürzer wünschen, geht es auch in einer einzigen Zeile ohne Verwendung einer Variablen: addmouselistener(new MeinMausAdapter()); Auch wenn die Zusammenhänge kompliziert erscheinen: Nur Dank der geerbten Methoden bleibt der Umfang des Quelltextes bei diesem Projekt überschaubar! Wenn Sie jetzt das Applet MausDemo1 ausführen, sollte der Kreis bei Maustasten-Betätigung die Farbe wechseln sonst müssen Sie sich auf Fehlersuche begeben! Kommen wir jetzt zu Mausdemo2. Öffnen Sie Mausdemo1, falls es nicht das aktuelle Projekt ist. Wählen Sie jetzt im BlueJ- Hauptfenster den Menüpunkt Speichern unter... und speichern Sie das vorhandene Projekt als Mausdemo2. Löschen Sie jetzt in diesem Projekt die Klasse MeinMausAdapter! Bearbeiten Sie dann den Quelltext von MausDemo1 (noch fand keine Umbenennung der Appletklasse statt) wie nachfolgend beschrieben. Vorhandene Kommentare passen Sie so weit an, wie erforderlich sie sind hier nicht mit aufgeführt. Im Übrigen besteht die Änderung hauptsächlich darin, dass die Klasse MeinMausAdapter jetzt innerhalb der Klasse MausDemo1 deklariert wird. Das ist einerseits sinnvoll, weil sie speziell nur für dieses Applet entworfen ist. Andererseits braucht sie jetzt keinen Zeiger mehr auf das Applet aus dem MouseEvent zu ermitteln, weil sie als Bestandteil des Applets auf dessen gesamte Methoden und Datenfelder problemlos zugreifen kann. Und nun geht es los: Vergessen Sie nicht, die zusätzliche import-anweisung (java.awt.event.*) zu ergänzen! Das Umbenennen der Klasse in MausDemo2 erfolgt im Quelltext (hinter dem Schlüsselwort class). Die Umbenennung kann sich aber erst auswirken, wenn sich der Quelltext fehlerfrei kompilieren lässt, also erst nach der vollständigen Anpassung dieses Quelltextes, so wie er auf der folgende Seite dargestellt ist.

30 JAVA-Einführung, Seite 30 Wenn Sie diesen Applet-Quelltext fehlerfrei übersetzen konnten, prüfen Sie, ob Sie die Klasse schon von MausDemo1 in MausDemo2 umbenannt haben, holen Sie es gegebenenfalls nach und übersetzen Sie erneut. Beachten Sie, dass hier das Datenfeld meinkreis als private deklariert werden kann! Auch meinmausadapter ist nicht öffentlich, denn nur MausDemo2 braucht darauf zuzugreifen. Die Vorteile überwiegen deutlich, üblicherweise werden deshalb Reaktionen auf Aktionen mit der Maus daher so wie hier oder so wie nachfolgend in Mausdemo3 programmiert! Speichern Sie nun das Projekt als Mausdemo3 und passen Sie den Quelltext wie abgebildet an: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class MausDemo3 extends JApplet private Kreis meinkreis; public void init() JRootPane rootpane = this.getrootpane(); rootpane.putclientproperty( "defeatsystemeventqueuecheck", true); meinkreis = new Kreis(40, 40, 35); import java.awt.*; import javax.swing.*; import java.awt.event.*; public class MausDemo2 extends JApplet private Kreis meinkreis; addmouselistener(new MouseAdapter() public void mousepressed(mouseevent e) meinkreis.farbwechsel(getgraphics()); ); public void paint(graphics g) Rectangle r = getbounds(); g.clearrect(r.x, r.y, r.width, r.height); meinkreis.zeichnen(g); public void init() JRootPane rootpane = this.getrootpane(); rootpane.putclientproperty( "defeatsystemeventqueuecheck", true); Quelltext für das Applet Quelltext für das Applet MausDemo2 (Kommentare MausDemo2 nicht dargestellt) (Kommentare nicht dargestellt) meinkreis = new Kreis(40, 40, 35); addmouselistener(new MeinMausAdapter()); public void paint(graphics g) Rectangle r = getbounds(); g.clearrect(r.x, r.y, r.width, r.height); meinkreis.zeichnen(g); private class MeinMausAdapter extends MouseAdapter public void mousepressed(mouseevent e) meinkreis.farbwechsel(getgraphics()); Mausdemo3 unterscheidet sich von Mausdemo2 darin, dass die Erweiterung MeinMausAdapter von MouseAdapter nicht mehr explizit aufgeführt wird. Die Erweiterung ist vielmehr anonym direkt in den Aufruf des Konstruktors integriert, indem sie sich diesem unmittelbar anschließt, und zwar eingeschlossen in geschweiften Klammern. Erst dann folgt die schließende runde Klammer von addmouselistener(). Quelltext für das Applet MausDemo3 Quelltext für das Applet MausDemo3 (Kommentare nicht dargestellt) (Kommentare nicht dargestellt)

31 JAVA-Einführung, Seite 31 Sinnvolle Verbesserungen der Mausdemo: In Hinblick auf ein Puzzle-Spiel, das wir im nächsten Kapitel programmieren, wollen wir Mausdemo2 (oder Mausdemo3) in zwei Schritten noch verbessern: Die Farbe des Kreises soll sich nur ändern, wenn er beim Anklicken getroffen wurde. Nur mit der linken Maustaste soll die Farbe gewechselt werden können, weil üblicherweise nur diese Taste Aktionen auslöst. Für den ersten Schritt ergänzen wir in der Klasse Kreis eine Methode istdrin(), die true zurück gibt, wenn die übergebenen Koordinaten einen Punkt innerhalb der Kreisfläche beschreiben, und sonst false. Die Rückgabe ist also vom Typ boolean, die ganze Methode lautet: /** * Diese Methode prüft, ob der durch (u v) beschriebene Punkt * im Innern des Kreises liegt. true, falls Punkt im Innern */ public boolean istdrin(int u, int v) // Anwendung des Satzes von Pythagoras: return ((u-x)*(u-x) + (v-y)*(v-y) <= r*r); Jetzt erweitern wir die Methode mousepressed so, dass sie prüft, ob der Kreis getroffen wurde: public void mousepressed(mouseevent e) int mausx = e.getx(); int mausy = e.gety(); if (meinkreis.istdrin(mausx, mausy)) meinkreis.farbwechsel(getgraphics()); Zur Erläuterung: Der Mausklick wird von JAVA registriert. Dabei werden Mausposition und betätigte Taste erkannt. Weil unser Applet einen MouseListener einbaut, gibt JAVA diese Daten an unser Applet (genauer an den MouseAdapter) weiter. Der MouseAdapter ruft dann je nach Aktion eine seiner Methoden (mousepressed, mouseclicked, mousereleased o.ä.) auf. Die Mausdaten werden dabei mit einer Instanz der Klasse MouseEvent übermittelt. Diese Instanz heißt hier e (für event ), ihre Methoden getx und gety liefern die Mausposition. (Die Methode mouseclicked ist hier leider weniger geeignet, denn sie wertet eine Mausaktion nur dann als Klick, wenn das Loslassen der Maustaste an genau derselben Position wie das vorherige Drücken der Maustaste geschieht. Man muss also mit ruhiger Hand klicken! Im Interesse besserer Lesbarkeit ist das Drücken der Maustaste in diesem Kapitel manchmal als Klicken bezeichnet.) Um jetzt nur auf die linke Maustaste zu reagieren, testen wir zusätzlich den Wert, den e.getbutton() liefert dazu muss nur die if-zeile von mousepressed erweitert werden: if (meinkreis.istdrin(mausx, mausy) && e.getbutton() == MouseEvent.BUTTON1) Zwei Anmerkungen: BUTTON1 ist eine Konstante, die in der Klasse MouseEvent definiert ist. Die Verknüpfung && ist ein logisches UND, sie unterscheidet sich vom einfachen & dadurch, dass die zweite Bedingung nicht mehr geprüft wird, wenn die erste Bedingung bereits false ist. Das bringt im Prinzip einen Geschwindigkeitsvorteil!

32 JAVA-Einführung, Seite Achtes Projekt: Das Puzzle mit 25 Feldern In diesem Kapitel programmieren wir ein richtiges Spiel, das vielleicht nicht nur Ihnen Freude macht, sondern auch Bekannten aus Ihrem Umfeld. Sie können es also weitergeben an Mitmenschen, die gerne Denksport betreiben oder sich für sehr schlau halten! In dem Spiel geht es darum, alle zunächst weißen Kreise durch Anklicken rot zu färben. Das Problem besteht darin, dass die Nachbarfelder bei jedem Klick ebenfalls die Farbe wechseln! Beginnen Sie ein neues Projekt und geben Sie ihm den Namen 25er-Puzzle. Da unser Puzzle die Klasse Kreis aus den Mausdemo-Projekten verwendet, wählen Sie jetzt im Menü von BlueJ den Punkt Projekt/Importieren... und importieren Sie die Mausdemo, in der die Klasse Kreis die Methode istdrin besitzt. Beim Import erhalten Sie eine Meldung über einige Dateien, die nicht importiert werden konnten klicken Sie einfach auf Weiter. Löschen Sie jetzt die importierte Applet-Klasse MausDemo2 bzw. MausDemo3. Öffnen Sie den Kreis-Quelltext. Überprüfen Sie, ob er neben dem auf Seite 27 dargestellten Text auch die Methode istdrin von Seite 31 enthält, andernfalls ergänzen Sie diese wenigen Zeilen. Klassenvariablen und Instanzvariablen Für dieses Spiel wird die Klasse Kreis noch leicht modifiziert: Den Radius r legen wir für alle Quadrate gleich fest, und zwar in einer einzigen gemeinsamen Variablen. Damit sich die Kreise nicht berühren, wird außerdem eine Randbreite rand festgelegt, die ebenfalls für alle Kreise gilt. Diese Variablen werden durch das Schlüsselwort static zu gemeinsamen Variablen sie existieren in der Klasse unabhängig davon, ob überhaupt eine Instanz (also ein Kreis) erzeugt wurde. Deshalb nennt man sie auch Klassenvariablen. Im Gegensatz dazu sind die in x und y gespeicherten Werte für den Mittelpunkt des Kreises für jeden Kreis individuell verschieden, sie werden für jede Instanz der Klasse Kreis neu angelegt und existieren nur innerhalb der Instanzen. Solche Datenfelder heißen daher auch Instanzvariablen. Da die noch zu erstellende Appletklasse auf den Radius und die Randbreite zugreifen, sind die statischen Variablen als public deklariert. (Auch Methoden können als static deklariert werden, hier ergibt sich dafür aber kein Anlass.) Der Konstruktor wird angepasst, denn ihm wird jetzt kein Radius mehr übergeben, der ist ja bereits für alle Kreise mit dem Wert 40 festgelegt. Die Farbe wird mit weiß initialisiert. import java.awt.*; /** * Klasse Kreis mit festem Radius * Spier Feb.2010 */ public class Kreis public static int r = 40; public static int rand = 3; private int x, y; private Color farbe; /** * Konstruktor für Objekte der * Klasse Kreis int x,y Mittelpunkt */ public Kreis(int x, int y) this.x = x; this.y = y; farbe = Color.white;

33 JAVA-Einführung, Seite 33 Die Methode zum Zeichnen muss den Rand berücksichtigen und wird ebenfalls angepasst: /** * Diese Methode zeichnet die Kreisfläche mit dem Radius r-rand. grafikobjekt für die Appletfläche */ public void zeichnen(graphics grafikobjekt) grafikobjekt.setcolor(farbe); grafikobjekt.filloval(x-r+rand,y-r+rand,2*(r-rand),2*(r-rand)); In der Methode farbwechsel sorgen wir dafür, dass der Wechsel zwischen weiß und rot stattfindet. Damit sich später im Spiel leicht testen lässt, ob bei allen Kreisen die Farbe rot erreicht ist, ergänzen wir noch eine Methode istrot. public boolean istrot() return farbe == Color.red; Als letztes bearbeiten wir noch die Methode istdrin: public void farbwechsel(graphics gr) if (farbe == Color.white) farbe = Color.red; else farbe = Color.white; zeichnen(gr); public boolean istdrin(int u, int v) return ((u-x)*(u-x) + (v-y)*(v-y) <= (r-rand)*(r-rand)); Die Kreisfläche hat nur noch den Radius (r-rand) und entsprechend wurde die Methode angepasst. Jetzt ist die Klasse Kreis fertig programmiert. Wir erstellen nun im Projekt 25erPuzzle die Appletklasse, der wir den Namen Puzzle geben. import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Puzzle extends JApplet // Ein Array von 25 Kreisen private Kreis[] diekreise = new Kreis[25]; private MeinMausAdapter mma; Quelltext der Klasse Puzzle, Quelltext Teil der 1 Klasse Puzzle, Teil 1 // Initialisierung des Applets public void init() // "Workaround"... JRootPane rootpane = this.getrootpane(); rootpane.putclientproperty("defeatsystemeventqueuecheck", true); // Mausadapter erzeugen: mma = new MeinMausAdapter(); Array Ein Array speichert Zeiger für eine festgelegte Anzahl von Objekten des gleichen Typs. Hier können im Array diekreise 25 Instanzen unserer Klasse Kreis verwaltet werden. diekreise[0] ist der erste von ihnen und diekreise[24] ist der letzte, die Zählung beginnt also bei 0.

34 JAVA-Einführung, Seite 34 // 25 Kreise mit gewünschter Position erzeugen: for (int i = 0; i < 25; i++) Quelltext der Klasse Puzzle, Quelltext Teil der 2 Klasse int zeile = i / 5; Puzzle, Teil 2 int spalte = i % 5; diekreise[i] = new Kreis(Kreis.r*(2*spalte+1)+Kreis.rand, Kreis.r*(2*zeile+1)+Kreis.rand); For-Schleife Eine Schleife ist eine Programmstruktur, die mehrmals durchlaufen wird. For-Schleifen werden typischerweise dann verwendet, wenn die Anzahl der Schleifendurchläufe von vornherein fest steht (beachten Sie aber auch den Hinweis zu Schleifen in Kapitel 9!). Dieser Schleifentyp besteht aus dem Schleifenkopf for (<Schleifenvariable mit Startwert>; <Wiederholungsbedingung>; <Änderungsanweisung für die Schleifenvariable>) und dem Schleifenkörper, der von geschweiften Klammern eingeschlossen ist. Das Spielfeld hat 5 Zeilen und 5 Spalten mit Kreisen. Die Schleifenvariable i läuft von 0 bis 24. Der ganzzahlige Anteil von i/5 liefert bei den ersten 5 Durchläufen (i=0, 1,... 4) den Wert 0 und damit zeile = 0. Bei den nächsten 5 Durchläufen wird zeile = 1, dann 2 (usw.) und schließlich 4 (für 20/5 bis 24/5). Der Operator % ist die Rechenanweisung für den Divisionsrest, die Ergebnisse für die Spalte sind bei den Schleifendurchläufen also 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1,... Beim 8. Schleifendurchlauf ist z.b. i=7, zeile = 1, spalte = 2. Der Kreis, der bei diesem Schleifendurchlauf erzeugt werden soll, ist in der Abbildung mit einem Kreuz gekennzeichnet (Zeilen- und Spaltenzählung beginnen bei 0). Der Mittelpunkt hat die x-koordinate 5 Radius. Damit auch das Spielfeld einen Rand besitzt, wird noch die Randbreite addiert. Die y-koordinate ergibt sich entsprechend zu 3 Radius + Randbreite. Die so berechneten Mittelpunktskoordinaten werden bei jedem Schleifendurchlauf an den Konstruktor für den Kreis übergeben, und der erzeugte Kreis wird der i-ten Position im Array (diekreise[i]) zugewiesen. Wie im Kopf angegeben wird i am Ende jedes Durchlaufs um 1 erhöht (i++ ist gleichbedeutend mit i = i + 1). Damit ist die init-methode abgeschlossen. Start und Stop Der Mausadapter mma wurde in der init-methode erzeugt. Wenn er in der start()-methode des Applets hinzugefügt und in der stop()-methode wieder entfernt wird, funktionieren auch die Menüpunkte Neu starten, Starten, Abbrechen des Appletviewers. Probieren Sie es aus, wenn das Applet fertig programmiert ist! Auch wenn im Browser ein entsprechendes Menü nicht angezeigt werden kann, erscheint es sinnvoll, grundsätzlich wie folgt zu verfahren: public void start() addmouselistener(mma); public void stop() removemouselistener(mma); Quelltext der Klasse Puzzle, Quelltext Teil der 3 Klasse Puzzle, Teil 3

35 JAVA-Einführung, Seite 35 Die anschließend von BlueJ vorgeschlagene destroy()-methode bleibt leer, sie kann gelöscht werden. Kommen wir also zur paint-methode: Zunächst wird die Größe der Appletfläche ermittelt und in der lokalen Variablen r gespeichert, diese Fläche wird als Hintergrund mit einem leicht bläulich getöntem Grau gefärbt. Dann folgt eine for-schleife: Der Schleifenkopf ist identisch mit dem aus der init-methode. Im Schleifenkörper wird für jeden im Array gespeicherten Kreis dessen Methode zum Zeichnen aufgerufen. public void paint(graphics g) Rectangle r = getbounds(); g.setcolor(new Color(200,200,220)); g.fillrect(r.x, r.y, r.width, r.height); for (int i = 0; i < 25; i++) diekreise[i].zeichnen(g); meldung(); Quelltext der Klasse Puzzle, Quelltext Teil der 4 Klasse Puzzle, Teil 4 Die abschließend aufgerufene Methode meldung() gibt einen Text aus und wird im folgenden Absatz beschrieben: private void meldung() boolean geloest = true; int a = 10*Kreis.r+2*Kreis.rand; // Spielfeld-Kantenlänge // while-schleife: Anfang int i = 0; while (geloest && i<25) gelöst = diekreise[i].istrot(); Quelltext der Klasse i++; // while-schleife: Ende Puzzle, Quelltext Teil der 5 Klasse Puzzle, Teil 5 Graphics gr = getgraphics(); if (gelöst) gr.setcolor(new Color(230,255,200)); gr.fillrect(0, a, a, 22); gr.setcolor(color.black); gr.drawstring("puzzle gelöst, Glückwunsch!", 5, a+17); else gr.setcolor(color.blue); gr.fillrect(0, a, a, 22); gr.setcolor(color.white); gr.drawstring("klicken Sie, bis alle Kreise rot sind!",5,a+17); Die lokale Variable gelöst wird zunächst auf true gesetzt, dann wird in einer while-schleife geprüft, ob vielleicht doch noch ein Kreis weiß ist. Abhängig vom Ergebnis wird unterhalb des Spielfeldes eine Rechteckfläche gefärbt und einer der beiden Texte ausgegeben. While-Schleife Hier muss die Schleife nicht 25 mal durchlaufen werden, denn sobald ein weißer Kreis gefunden ist, steht fest, dass das Puzzle noch nicht gelöst ist. Die Schleife wird solange (=while) durchlaufen, wie gelöst wahr ist, und außerdem i<25 gilt. Nur wenn i=25 erreicht wird, ist das Puzzle gelöst. Dieser Schleifentyp besteht aus dem Schleifenkopf while (<Wiederholungsbedingung>) und dem Schleifenkörper, der von geschweiften Klammern eingeschlossen ist. Der Schleifenkörper wird

36 JAVA-Einführung, Seite 36 solange immer wieder durchlaufen, bis die Wiederholungsbedingung nicht mehr erfüllt ist. Die in der Schleife verwendeten Variablen müssen vor Schleifenbeginn deklariert und initialisiert sein (i = 0), die Erhöhung des laufenden i erfolgt innerhalb des Schleifenkörpers (i++). Letzteres wird leicht vergessen dann hat man meistens eine Totschleife programmiert, die nie verlassen wird, das Applet hängt sich auf und muss gewaltsam beendet werden! In Kapitel 9 können Sie nachlesen, wie while-schleifen oft durch for-schleifen ersetzt werden können! Es folgt der letzte Teil des Applet-Quelltextes, der sich durch die Kommentare selbst erklärt: // Meine MausAdapter-Klasse mit mousepressed-methode: private class MeinMausAdapter extends MouseAdapter public void mousepressed(mouseevent e) int x = e.getx(); // Mausposition holen int y = e.gety(); // Zeile und Spalte ermitteln: int spalte = (x-kreis.rand) / (2*Kreis.r); int zeile = (y-kreis.rand) / (2*Kreis.r); // Index des Keises, der getroffen sein könnte: int nr = 5*zeile + spalte; // Wenn getroffen, dann Farbe wechseln: if (diekreise[nr].istdrin(x,y) && e.getbutton() == MouseEvent.BUTTON1) Graphics gra = getgraphics(); diekreise[nr].farbwechsel(gra); // Nachbarfeld-Farbwechsel, soweit nötig: if (spalte > 0) diekreise[nr-1].farbwechsel(gra); if (spalte < 4) diekreise[nr+1].farbwechsel(gra); if (zeile > 0) diekreise[nr-5].farbwechsel(gra); if (zeile < 4) diekreise[nr+5].farbwechsel(gra); meldung(); // abschließende Klammer der Klasse Puzzle Quelltext der Klasse Puzzle, Quelltext Teil der 6 Klasse Puzzle, Teil 6 Die Zeile und die Spalte des eventuell getroffenen Kreises ergeben sich durch Division von (Mauskoordinate Rand) durch Kreisdurchmesser. Nachkommastellen werden bei der Zuweisung an eine Ganzzahl-Variable abgeschnitten. Aus Zeile und Spalte lässt sich leicht der Index des in Frage kommenden Kreises berechnen. Die Methode mousepressed ruft am Schluss meldung() auf, damit nach jedem Klick die Prüfung erfolgt, ob das Puzzle gelöst ist. Rufen Sie das Applet mit einer Höhe von 434 und einer Breite von 406 (=5*Durchmesser+2*Rand) auf! Versuchen Sie Ihr Glück, nutzen Sie die Möglichkeit des Neustarts mit dem Menü des Appletviewers! Viel Spaß beim Spielen! Zum Weitergeben lassen Sie BlueJ die html-seite erzeugen und bearbeiten Sie die Datei Puzzle.html mit dem Windows-Editor so, wie auf Seite 26 beschrieben. Der Anwender muss diese Datei und die Dateien Puzzle.class, Kreis.class, Puzzle$MeinMausAdapter.class im selben Ordner speichern, um das Spiel im Browser ausführen zu können.

37 JAVA-Einführung, Seite Was haben wir jetzt gelernt? (Wdh. und kleine Ergänzungen) Sie haben in den vorangegangenen Kapiteln Grundlagen der Programmiersprache JAVA kennen gelernt. Hier können Sie zur Wiederholung nachlesen, wie ein JAVA-Quelltext aufgebaut ist: Klassen: Jeder Quelltext definiert eine Klasse und hat folgende Form: <Import-Anweisungen soweit erforderlich> public class <Klassenname> [optional: extends <Vorgängerklasse>] Instanzen der Klasse werden mit new <Klassenname>([Parameter]) erzeugt, siehe auch Konstruktor. Es ist üblich, Klassennamen mit einem Großbuchstaben zu beginnen. Variablen werden in der Form <Bereitstellung von Variablen (Instanzvariablen / Klassenvariablen> <Methoden (auch der Konstruktor ist eine Methode)> [optional: weitere Klassendefinition, z.b. MausAdapter] <Zugriffsberechtigung><Typ> <Name> [optional: Wertzuweisung]; definiert, also indem zuerst der Typ und dann der Variablenname festgelegt werden, z.b. int a; oder String s = "Informatik"; oder double c = -3.08; Für die Zugriffsberechtigung verwenden wir meistens private oder public, sie kann auch als protected festgelegt werden, sie darf auch fehlen. Wenn der Typ eine Klasse ist, stellt die Variable genaugenommen einen Zeiger (eine Referenz) auf eine Instanz dieser Klasse dar. Es ist üblich, Variablennamen mit einem Kleinbuchstaben zu beginnen. Methoden werden in folgender Form definiert: <Zugriffsberechtigung> <Rückgabetyp> <Name>(<Parameterliste>) <Methodenquelltext, bei Bedarf mit Bereitstellung von lokale Variablen> [ggf. return-anweisung] Der Rückgabetyp gibt an, was die Methode liefert (einen String? Eine Gleitkommazahl?), sofern sie denn einen Wert zurück gibt. Bei Methoden ohne Rückgabewert muss hier void angegeben werden. Bei Methoden mit Rückgabewert muss der Methodenquelltext stets auf eine return-anweisung führen. Die Parameterliste legt fest, welche Arten von Daten an die Methode übergeben werden sollen. Dabei wird immer erst der Typ, dann ein Variablenname genannt. Mehrere Parameter werden durch Komma getrennt. Beim Methodenaufruf werden Werte (oder Zeiger) an die Methode übergeben, die Methode verwendet gemäß Parameterliste lokale Variablen, um mit diesen Werten zu arbeiten. Die Parameterliste darf auch leer sein, die Klammern müssen dann trotzdem stehen. Ein Beispiel: Die Lösung von Aufgabe 17 auf Seite 20 (ganz ähnlich ist die Lösung von Aufgabe 24). public void setname(string v, String n) vorname = v; // Datenfeld vorname erhält Wert der lokalen Variablen v, nachname = n; // nachname erhält entsprechend Wert von n.

38 JAVA-Einführung, Seite 38 Es ist üblich, Methodennamen mit einem Kleinbuchstaben zu beginnen. Ein Beispiel für die Verwendung von lokalen Variablen, die erst innerhalb der Methode definiert werden, zeigt die Klasse Bank in ihrer Methode überweisen. Der für die lokalen Variablen reservierte Speicherplatz wird mit Abschluss der Methode frei gegeben, diese Variablen existieren dann nicht mehr. Es können mehrere Methoden mit demselben Namen definiert werden, wenn sie sich in den Parameterlisten unterscheiden (Vergl. Konstruktoren). Konstruktoren sind spezielle Methoden, deren Syntax geringfügig von der zuvor beschriebenen abweicht. Sie werden in der Form <Zugriffsberechtigung> <Klassenname>(Parameterliste) <Konstruktorquelltext> // Initialisierung definiert. Die Zugriffsberechtigung ist meistens public. Da der Methodenname hier mit dem Klassennamen übereinstimmt, wird für die Rückgabe kein Typ genannt, es gibt auch keine return- Anweisung: Der Aufruf erfolgt mit dem Schlüsselwort new und damit wird eine Instanz dieser Klasse (genau genommen: ein Zeiger darauf) zurückgegeben. Eine Klasse kann mehrere Konstruktoren besitzen. Wird kein Konstruktor programmiert, so kann der geerbte Konstruktor mit leerer Parameterliste zum Erzeugen von Instanzen verwendet werden. Zugriff auf Daten / Methoden anderer Objekte: Für den Zugriff auf Methoden oder Variablen, die nicht Teil der aktuellen Instanz sind, wird der Bezeichner des Objekts (z.b. eines Bankkontos, eines Kreises, einer Graphics-Instanz) vorangestellt und ein Punkt als Trennzeichen gesetzt. Beispiel: diekreise[i].zeichnen(g); Programmstrukturen Fallunterscheidungen werden mit if bzw. mit if... else programmiert, die Form ist: if (<Bedingung>) <Quelltext für Wenn-Fall> else...<quelltext für Sonst-Fall> Der else-teil ist optional, das heißt, er darf fehlen. Wenn der Quelltext eines dieser Fälle nur aus einer einzigen Anweisung besteht, dürfen dessen geschweiften Klammern fehlen. Eine ergänzende Anmerkung: Da die return-anweisung eine Methode sofort beendet, darf bei der Altersberechnung der Klasse Person das else fehlen: if (hatteschongeburtstag) return heute.get(calendar.year) geburtsdatum.get(calendar.year); //Schluss! return heute.get(calendar.year) - geburtsdatum.get(calendar.year) - 1; Das erste return wird erreicht, wenn hatteschongeburtstag wahr ist, sonst das zweite. Bilden Sie sich selbst ein Urteil über die Verständlichkeit eines solchen Quelltextes. Für Fallunterscheidungen mit mehr als zwei Fällen kann die switch-anweisung hilfreich sein, auf die aber in diesem Text nicht eingegangen wird.

39 JAVA-Einführung, Seite 39 Schleifen Syntax der for-schleife: for (<Schleifenvariable mit Startwert>; <Wiederholungsbedingung>; <Änderungsanweisung für die Schleifenvariable>) <zu wiederholende Anweisungen> Die Schleifenvariable kann innerhalb der runden Klammer deklariert werden, dann ist sie nur innerhalb der Schleife gültig. Sie kann aber auch schon vorher definiert sein, dann kann ihr (veränderter) Wert nach Verlassen der Schleife weiter verwendet werden. Syntax der while-schleife: while (<Wiederholungsbedingung>) <zu wiederholende Anweisungen> Bei diesem Schleifentyp müssen die zu wiederholenden Anweisungen dafür sorgen, dass die Wiederholungsbedingung nicht dauerhaft erfüllt bleibt! While-Schleifen können oft durch for-schleifen ersetzt werden, weil die Wiederholungsbedingung auch unabhängig von der Schleifenvariablen formuliert werden kann, sie kann auch eine Kombination mehrerer Bedingungen sein. Beispiel: Die while-schleife in der Methode meldung() aus dem Quelltext der Klasse Puzzle (S. 35) kann elegant durch folgende for-schleife ersetzt werden: for (int i = 0; geloest && i<25; i++) // Abbruch, wenn Kreis nicht rot ist! geloest = diekreise[i].istrot(); 10. Schlussbemerkung BlueJ ist für die hier vorgestellten Projekte eine gut geeignete Entwicklungsumgebung, insbesondere durch die Möglichkeit, Instanzen zu inspizieren und ihre Methoden ohne Programmierung eines Menüs aufrufen zu können. Auch der Zugriff einer Instanz auf eine andere Instanz (Projekt Bank ) lässt sich gut demonstrieren. Für den Einstieg in JAVA ist BlueJ daher eine gute Wahl. Andere Entwicklungsumgebungen haben andere Vorteile, sie bieten z.b. Unterstützung bei der Layout-Gestaltung eines Applets, sie erlauben den bequemen Einbau eines Menüs oder von Schaltflächen für Programmaktionen. Beispiele sind die Programme Java-Editor und NetBeans, die wie BlueJ ebenfalls kostenlos aus dem Internet heruntergeladen werden können. Beide Programme bieten auch eine Code-Vervollständigung an: Wenn man in diesen Entwicklungsumgebungen bei unserem Puzzle-Quelltext (Kapitel 8) den Klassenbezeichner Kreis. eintippt, wird sofort die Auswahl der möglichen Methoden oder Variablen angezeigt, die in dieser Klasse verfügbar (also public) sind. Dieser Vorteil zeigt sich auch z.b. bei der Verwendung eines Graphics- Objektes: Sobald man den Bezeichner und den anschließenden Punkt getippt hat, kann man schon sehen, welche Methoden dieses Objekt besitzt (drawrect, fillrect, drawtext usw.) außerdem werden die benötigten Parameter angezeigt. Dadurch kann man sich oft das Nachlesen in der Dokumentation zu den verwendeten Klassen ersparen. Das Programm Java-Editor beansprucht deutlich weniger Ressourcen als NetBeans und ist zum Erstellen kleiner Programme gut geeignet. Automatisch erstellter Quelltext kann jedoch so verändert werden, dass es zu Unstimmigkeiten zwischen Layout-Entwurf und Aussehen des Programm-Fensters kommen kann. NetBeans hat dagegen ein so umfangreiches Menü, dass Anfänger es schon beim Erstellen und Speichern ihres ersten Projekts schwer haben; diese Entwicklungsumgebung ist sehr professionell und eignet sich gut für komplexe Anwendungen. Je anspruchsvoller Programme werden, umso mehr zeigen sich die Vorteile der hier genannten Entwicklungsumgebungen.

40 JAVA-Einführung, Seite 40 Deshalb wird diese Einführung in die JAVA-Programmierung mit BlueJ hier beendet. (Es folgt nur noch ein kleiner Anhang.) Anhang JAVA-Programm ohne Entwicklungsumgebung erstellen Auch ohne Entwicklungsumgebung ist es möglich, ein JAVA-Programm zu schreiben. Jeder Editor ist dafür geeignet wichtig ist nur, dass der Quelltext als reiner Text gespeichert ist. Der einfachste Editor ist der Windows-Editor, der ohnehin nur im Textformat speichern kann, da er keine Texthervorhebungen und Absatzformate zulässt. Starten Sie den Editor und schreiben Sie den folgenden Text: import javax.swing.*; import java.awt.*; public class HalloWelt extends JApplet public void paint(graphics g) g.setcolor(new Color(190,230,255)); // Farbe aus RGB erzeugen g.fillrect(0,0,150,30); // Rechteckfäche färben g.setcolor(color.blue); // blau g.drawstring("hallo Welt!",50,25); // Text ausgeben

41 JAVA-Einführung, Seite 41 Speichern Sie diesen Text unter dem Namen "HalloWelt.java" dazu müssen Sie die Anführungszeichen mit eingeben, damit der Editor nicht HalloWelt.java.txt daraus macht. Jetzt muss dieser Text compiliert werden. Dazu öffnen Sie ein Fenster mit der DOS- Eingabeaufforderung (Start-Programme-Zubehör-Eingabeaufforderung). Mit diesem Kommandozeilenfenster muss der Java-Compiler aufgerufen werden, wobei zugleich als Parameter die zu compilierende Datei angegeben sein muss. Der Compiler heißt javac.exe und befindet sich im bin- Ordner des Java-Development-Kits, so dass der Befehl wie abgebildet lauten könnte: Bei Quelltext-Fehlern erhalten Sie Hinweise, andernfalls wird die Datei HalloWelt.class erzeugt. Diese ist nicht direkt ausführbar, kann aber als Applet in einer Html-Seite ausgeführt werden. Um diese Html-Seite zu erstellen, kann wieder der Windows-Editor verwendet werden. Schreiben Sie eine Datei mit folgendem Text: <html> <head> <TITLE>Hello World mit JAVA</TITLE> </head> <body> Hier folgt der Output des Programms:<br> <APPLET CODE="HalloWelt.class" width=150 height=30> </APPLET> </body> </html> Speichern Sie diese Datei als "Hallo.html" (Anführungszeichen beachten, s.o.). Die class-datei und die html-datei müssen sich im selben Verzeichnis befinden. Anschließend öffnen Sie die html-datei durch Doppelklick. Das Java-Development-Kit bietet auch die Möglichkeit, das Applet ohne Browser anzusehen. Dazu muss der Appletviewer aufgerufen werden, als Parameter wird die Html-Seite übergeben (in der die Applet-Maße vermerkt sind): Erst, wenn Sie das Applet beenden, können Sie im Kommandozeilenfenster weitere Anweisungen eingeben (z.b. exit). Der Aufruf des Appletviewers ist in BlueJ zum Anzeigen von Applets integriert. Listen, die nur Instanzen einer einzigen Klasse verwalten Im Projekt Bank_2 lernten Sie die Klasse ArrayList kennen, die untypisierte Zeiger speichert. Die Methode get(...) dieser Klasse lieferte keine Konto-Instanzen, deshalb musste eine Typumwandlung erfolgen, um aus dem Zeiger einen Kontozeiger (ein Konto) zu machen (siehe Seite 13). Der BlueJ- Compiler lieferte eine Warnmeldung (die man unter 'Einstellungen' abschalten kann). Diese Warnmeldung entfällt, wenn wir eine Liste verwenden, die nur Konto-Instanzen enthalten

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ Objektorientierte Programmierung Objektorientierte Programmierung Eine Einführung mit BlueJ stellt die Daten, ihre Struktur und ihre Beziehungen zueinander in den Vordergrund. Weniger im Blickpunkt: die

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Kapitel 3 Das Projekt Bankkonto Seite 1

Kapitel 3 Das Projekt Bankkonto Seite 1 Kapitel 3 Das Projekt Bankkonto Seite 1 3 Das Projekt Bankkonto Nun wirst du dich etwas gründlicher mit dem Quelltext einer Klasse beschäftigen. Du lernst, wie zwei Objekte eine gemeinsame Aufgabe erledigen.

Mehr

Arbeiten mit BlueJ. Objektorientiertes Programmieren in Java mit BlueJ

Arbeiten mit BlueJ. Objektorientiertes Programmieren in Java mit BlueJ Arbeiten mit BlueJ Compilieren, Editieren, Objekte erzeugen, Methoden aufrufen, Objekte inspizieren, vorhandene Klassen benutzen, eigene Klassen und Methoden erstellen In BlueJ geht es einfach BlueJ durch

Mehr

Vorlesung im Herbstwintersemester 2007. Autorisierte studentisch Lösungen zu Aufgabenblatt 2

Vorlesung im Herbstwintersemester 2007. Autorisierte studentisch Lösungen zu Aufgabenblatt 2 Praktische Informatik I Vorlesung im Herbstwintersemester 2007 Autorisierte studentisch Lösungen zu Aufgabenblatt 2 zusammengestellt von Iva Tsvetkova 9.10.2007 1.Präsenzaufgaben 1.1 Entwurf einer Verwaltung

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Grundlagen Programmierung

Grundlagen Programmierung 1. Aufgabe (Spielen mit Objekten) Gegeben sei der auch von der Veranstaltungsseite erhältliche Programmcode auf der rechten Seite, der im Detail zuerst nicht verstanden werden muss. a) Erzeugen Sie sich

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Bedienung von BlueJ. Klassenanzeige

Bedienung von BlueJ. Klassenanzeige Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument

Mehr

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden VIII: Vererbung Unterklassen einer Klasse Vererbung von Methoden und Instanzvariablen Überschreiben von Methoden Vererbung als Realisierung einer is-a Beziehung. Informatik I VIII: Vererbung 259 Beispiel:

Mehr

PIWIN 1 Übung Blatt 5

PIWIN 1 Übung Blatt 5 Fakultät für Informatik Wintersemester 2008 André Gronemeier, LS 2, OH 14 Raum 307, andre.gronemeier@cs.uni-dortmund.de PIWIN 1 Übung Blatt 5 Ausgabedatum: 19.12.2008 Übungen: 12.1.2009-22.1.2009 Abgabe:

Mehr

Hello World in Java. Der Weg zum ersten Java-Programm

Hello World in Java. Der Weg zum ersten Java-Programm Vorwort Hello World in Java Der Weg zum ersten Java-Programm Diese Anleitung wurde unter Windows XP verfasst. Grundsätzlich sollte sie auch unter späteren Windows Versionen wie Windows Vista oder Windows

Mehr

Inhalt: Version 1.7.5

Inhalt: Version 1.7.5 Inhalt: Objekte ohne Methoden Objekte mit einfachen Methoden Objekte und Methoden mit Parametern Objekte und Methoden mit Rückgabewert Objekte mit einem Array als Attribut Beziehungen zwischen Objekten

Mehr

Druckanpassung von Mahnungen

Druckanpassung von Mahnungen Druckanpassung von Mahnungen Nur wenn Sie die faktura in der Einzelversion nutzen, steht Ihnen für die Druckanpassung der Mahnungen auch der Formularassistent zur Verfügung. Dort können Sie die gewünschten

Mehr

5 Projekt Bankverwaltung

5 Projekt Bankverwaltung Kapitel 5 Bankverwaltung (Lösung) Seite 1/7 5 Projekt Bankverwaltung 5.1 Festlegen der Schnittstelle Bevor du mit der Programmierung beginnst, musst du dir einige Gedanken über die Schnittstelle zwischen

Mehr

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung Eltern Kind Kind Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches

Mehr

Objektorientierte Programmierung OOP Programmieren mit Java

Objektorientierte Programmierung OOP Programmieren mit Java Aufgaben: 2 JDK/SDK/JRE und Java Entwicklungswerkzeuge Objektorientierte Programmierung OOP Programmieren mit Java 1. Installation von Java 2. Erstes Java Programm Hello World 3. Dreimal Hallo Olten 2

Mehr

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008 PIWIN I Kap. 7 Objektorientierte Programmierung - Einführung 1 PIWIN I Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I Vorlesung 3 SWS WS 2007/2008 FB Informatik

Mehr

Tutorium Java Ein Überblick. Helge Janicke

Tutorium Java Ein Überblick. Helge Janicke Tutorium Java Ein Überblick Helge Janicke 26. Oktober 2000 1 VORRAUSSETZUNGEN ZUM PROGRAMMIEREN MIT JAVA. 1 1 Vorraussetzungen zum Programmieren mit Java. Was braucht man, wenn man mit Java programmieren

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Ein Computerprogramm besteht aus Funktionen (Programmabschnitten, die etwas tun) und Variablen (Speicherplätzen für Informationen). Werden Funktionen aktiviert, verändern

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Klassenattribute und -methoden, Vererbung

Klassenattribute und -methoden, Vererbung Klassenattribute und -methoden, Vererbung Michael Dienert 27. März 2002 1 Prüfungsaufgabe Anwendungsentwicklung Winter 2001 Die folgende Aufgabe stammt aus der Abschlussprüfung für Fachinformatiker Anwendungsentwicklung

Mehr

Erste Schritte in Java

Erste Schritte in Java Erste Schritte in Java Im einführenden Kapitel haben wir die Grundbegriffe der imperativen Programmierung an einem Beispiel (Algorithmus von Euklid) kennengelernt. In diesem Kapitel sehen wir uns an einem

Mehr

Diese Anleitung bezieht sich auf FixFoto, V 3.40. In älteren oder neueren Versionen könnte die Arbeitsweise anders sein.

Diese Anleitung bezieht sich auf FixFoto, V 3.40. In älteren oder neueren Versionen könnte die Arbeitsweise anders sein. Pfade einstellen Stand: Dezember 2012 Diese Anleitung bezieht sich auf FixFoto, V 3.40. In älteren oder neueren Versionen könnte die Arbeitsweise anders sein. Diese Anleitung soll zeigen, wie man Pfad-Favoriten

Mehr

Java Einführung Programmcode

Java Einführung Programmcode Java Einführung Programmcode Inhalt dieser Einheit Programmelemente Der erste Programmcode Die Entwicklungsumgebung: Sun's Java Software Development Kit (SDK) Vom Code zum Ausführen des Programms 2 Wiederholung:

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

1. BlueJ installieren (nach dem Buch Java lernen mit BlueJ von David J. Barnes; Michael Kölling)

1. BlueJ installieren (nach dem Buch Java lernen mit BlueJ von David J. Barnes; Michael Kölling) 1. BlueJ installieren... 1 2. BlueJ auf die deutsche Version umstellen... 1 3. BlueJ Extensions... 2 a. Klassenkarte... 2 i. UML Extension... 2 ii. Klassenkarte zum Schulbuch... 3 b. CNU BlueJ Code Formatter...

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Handbuch DrahtexLabelwriter 3.0

Handbuch DrahtexLabelwriter 3.0 Handbuch DrahtexLabelwriter 3.0 Inhaltsverzeichnis INSTALLATION 3 DER PROGRAMMSTART 7 DIE PROGRAMMOBERFLÄCHE 8 DIE STARTSEITE DES PROGRAMMES 8 DIE PROGRAMMSYMBOLLEISTE 9 EIN NEUES PROJEKT ERSTELLEN 10

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Arrays Fortgeschrittene Verwendung

Arrays Fortgeschrittene Verwendung Arrays Fortgeschrittene Verwendung Gilbert Beyer und Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik http://www.pst.ifi.lmu.de/lehre/wise-11-12/infoeinf WS11/12 Arrays: Wiederholung

Mehr

1. Der Einstieg in Java

1. Der Einstieg in Java 1. Der Einstieg in Java Was heißt Programmieren? 1. Der Einstieg in Java Lernziele: Am Ende dieses Kapitels sollen Sie wissen, aus welchen Bestandteilen ein Java-Programm besteht, Java-Programme übersetzen

Mehr

Arbeitsblätter zum Raumplanerprojekt mit BlueJ

Arbeitsblätter zum Raumplanerprojekt mit BlueJ Arbeitsblätter zum Raumplanerprojekt mit BlueJ Volker Gätjens 24. September 2011 Kennen-Lernen 15.08.2011 ISS-Website Auf der Website der Irena Sendler Schule findest du Stundenpläne der Klassen (also

Mehr

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-12-13/infoeinf WS12/13 Arrays: Wiederholung Ein Array ist ein Tupel von Elementen gleichen

Mehr

2.4 Das erste C++-Programm *

2.4 Das erste C++-Programm * 2.4 Das erste C++-Programm * 11 2.4 Das erste C++-Programm * Den besten Lernerfolg erzielen Sie, wenn Sie alle Beispiele dieses Buchs selbst nachvollziehen. Sie können hierzu einen Compiler verwenden,

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Programmentwicklung I für Hörer anderer Fachrichtungen -Wintersemester 2003/04- Abschlussklausur 20.02.2004

Programmentwicklung I für Hörer anderer Fachrichtungen -Wintersemester 2003/04- Abschlussklausur 20.02.2004 Programmentwicklung I für Hörer anderer Fachrichtungen -Wintersemester 2003/04- Abschlussklausur 20.02.2004 Name : Vorname : Matrikelnummer : Hauptfach : Nebenfach/Fachrichtung Hinweise : 1. Überprüfen

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel Beispiel (3) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Probleme des Implementierungsvorschlags:

Mehr

Mai 2011. Deutsche Übersetzung von Marion Göbel verfaßt mit epsilonwriter

Mai 2011. Deutsche Übersetzung von Marion Göbel verfaßt mit epsilonwriter Aplusix 3 - Installationshandbuch Mai 2011 Deutsche Übersetzung von Marion Göbel verfaßt mit epsilonwriter 1. Arten der Installation Eine Server-Installation wird mit einem Kauf-Code durchgeführt. Ein

Mehr

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013 Programmiervorkurs Wintersemester 2012/2013 Organisation: Steffen Gebert, Alexander Wolff Tutoren: Jürgen Zöller, Jonathan Stoll Kontakt (für Organisatorisches, Fehler auf Folien...): Steffen Gebert steffen.gebert@informatik.uni-wuerzburg.de

Mehr

4 Vererbung, Polymorphie

4 Vererbung, Polymorphie 4 Vererbung, Polymorphie Jörn Loviscach Versionsstand: 21. März 2014, 22:57 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work

Mehr

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords 4.0 Proinformatik III Objektorientierte Programmierung Michael Kölling University of Kent Canterbury, UK Selbstbestimmtes Lernen Vorlesung Tutorium Übungen Buch Web-Seite Üben, üben, üben! Format Vorlesung:

Mehr

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen Um die maximale Sicherheit für das Betriebssystem und Ihre persönlichen Daten zu gewährleisten, können Sie Programme von Drittherstellern

Mehr

Java Einführung Methoden in Klassen

Java Einführung Methoden in Klassen Java Einführung Methoden in Klassen Lehrziel der Einheit Methoden Signatur (=Deklaration) einer Methode Zugriff/Sichtbarkeit Rückgabewerte Parameter Aufruf von Methoden (Nachrichten) Information Hiding

Mehr

JBuilderX: Installation und Kurzanleitung (Windows)

JBuilderX: Installation und Kurzanleitung (Windows) JBuilder X Seite 1 JBuilderX: Installation und Kurzanleitung (Windows) 1. JBuilder installieren Eine Gratis-Version kann von der Webseite www.borland.de heruntergeladen werden. Systemvoraussetzungen: 256

Mehr

Mitarbeitereinsatzplanung. easysolution GmbH 1

Mitarbeitereinsatzplanung. easysolution GmbH 1 Mitarbeitereinsatzplanung easysolution GmbH 1 Mitarbeitereinsatzplanung Vorwort Eines der wichtigsten, aber auch teuersten Ressourcen eines Unternehmens sind die Mitarbeiter. Daher sollten die Mitarbeiterarbeitszeiten

Mehr

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern Objektorientierte Programmierung mit Python Polymorphismus und Vererbung Eltern Kind Kind Kind Kind Prinzipien der objektorientierten Programmierung Vererbung Strukturierung von Klassen. Oberbegriffe beschreiben

Mehr

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek Programmieren I Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2008/2009 1 / 22 2 / 22 Strategie zum Entwurf von Klassen Beispiele Objektorientierte Sichtweise: Mit welchen Objekten habe ich es

Mehr

Einführung in Automation Studio

Einführung in Automation Studio Einführung in Automation Studio Übungsziel: Der links abgebildete Stromlaufplan soll mit einer SPS realisiert werden und mit Automation Studio programmiert werden. Es soll ein Softwareobjekt Logik_1 in

Mehr

Dynamische Webseiten mit PHP 1

Dynamische Webseiten mit PHP 1 Dynamische Webseiten mit PHP 1 Webserver, PHP und MYSQL Ein Webserver dient dazu, Internetseiten an PCs zu senden, von denen sie aufgerufen werden. Beispiel: Sie tippen im Browser www.fosbosweiden.de ein.

Mehr

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen. Teil B: Erweiterungen Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen. Die folgenden Aufgaben und Ausführungen geben einige Hilfestellungen, welche (mindestens

Mehr

Klassendefinitionen verstehen

Klassendefinitionen verstehen Klassendefinitionen verstehen Java-Programme bestehen aus Klassendefinitionen und sonst nichts! 1 1.0 Konzepte Felder Konstruktoren Methoden Parameter Zuweisungen ( = ) Anweisungen bedingte Anweisungen

Mehr

Anleitung zum Online Banking

Anleitung zum Online Banking Anleitung zum Online Banking Diese Anleitung beschreibt das Vorgehen zur Installation und Konfiguration von Online Banking unter Jack. Um das Online Banking in Jack nutzen zu können, müssen Sie das entsprechende

Mehr

Neues Projekt anlegen... 2. Neue Position anlegen... 2. Position in Statikdokument einfügen... 3. Titelblatt und Vorbemerkungen einfügen...

Neues Projekt anlegen... 2. Neue Position anlegen... 2. Position in Statikdokument einfügen... 3. Titelblatt und Vorbemerkungen einfügen... FL-Manager: Kurze beispielhafte Einweisung In dieser Kurzanleitung lernen Sie die wichtigsten Funktionen und Abläufe kennen. Weitere Erläuterungen finden Sie in der Dokumentation FLManager.pdf Neues Projekt

Mehr

Programmierkurs: Delphi: Einstieg

Programmierkurs: Delphi: Einstieg Seite 1 von 6 Programmierkurs: Delphi: Einstieg Aus Wikibooks Inhaltsverzeichnis 1 Einstieg Einstieg Was ist Delphi Borland Delphi ist eine RAD-Programmierumgebung von Borland. Sie basiert auf der Programmiersprache

Mehr

HTML5. Grundlagen der Erstellung von Webseiten. Linda York, Tina Wegener. 1. Ausgabe, Dezember 2011 HTML5

HTML5. Grundlagen der Erstellung von Webseiten. Linda York, Tina Wegener. 1. Ausgabe, Dezember 2011 HTML5 Linda York, Tina Wegener HTML5 Grundlagen der Erstellung von Webseiten 1. Ausgabe, Dezember 2011 HTML5 2 HTML5 - Grundlagen der Erstellung von Webseiten 2 Die erste Webseite mit HTML erstellen In diesem

Mehr

Programmierprojekt Aufgabe 1

Programmierprojekt Aufgabe 1 v01 10.05.2009 Die Formalitäten vorab (WICHTIG!!!): Technische Universität Darmstadt Fachbereich Informatik Prof. Dr. Johannes Fürnkranz Allgemeine Informatik 2 im SS 2009 Programmierprojekt Aufgabe 1

Mehr

TYPO3 Redaktoren-Handbuch

TYPO3 Redaktoren-Handbuch TYPO3 Redaktoren-Handbuch Kontakt & Support: rdv interactive ag Arbonerstrasse 6 9300 Wittenbach Tel. 071 / 577 55 55 www.rdvi.ch Seite 1 von 38 Login http://213.196.148.40/typo3 Username: siehe Liste

Mehr

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung PIWIN I Kap. 7 Objektorientierte Programmierung - Einführung 28 Testklasse public class TestGirokonto { public static void main(string[] args) { // erzeuge neues Konto Girokonto einkonto = new Girokonto();

Mehr

2 Fenster - Hauptelement des GUI

2 Fenster - Hauptelement des GUI Einführung in die objektorientierte Programmierung mit C# 13 2 Bei der Arbeit mit Computern erwarten die Nutzer eine komfortable Bedienung über eine eine»grafische Oberfläche«(engl.: graphical user interface

Mehr

Objekt-Orientierte Programmierung

Objekt-Orientierte Programmierung Objekt-Orientierte Programmierung Ein OO-Programm modelliert eine Anwendung als eine Welt von Objekten, die miteinander in Beziehung stehen ( später). Ein Objekt kann andere Objekte erzeugen. Ein Objekt

Mehr

Outlook Web App 2010. Kurzanleitung. interner OWA-Zugang

Outlook Web App 2010. Kurzanleitung. interner OWA-Zugang interner OWA-Zugang Neu-Isenburg,08.06.2012 Seite 2 von 15 Inhalt 1 Einleitung 3 2 Anmelden bei Outlook Web App 2010 3 3 Benutzeroberfläche 4 3.1 Hilfreiche Tipps 4 4 OWA-Funktionen 6 4.1 neue E-Mail 6

Mehr

2 GRUNDLEGENDE PROGRAMMBEDIENUNG

2 GRUNDLEGENDE PROGRAMMBEDIENUNG In diesem Kapitel erfahren Sie, wie das Textverarbeitungsprogramm Microsoft Word 2007 gestartet wird, wie Sie bestehende Dokumente öffnen und schließen oder Dokumente neu erstellen können. Es wird erläutert,

Mehr

Es gibt aber weitere Möglichkeiten, die den Zugriff auf die individuell wichtigsten Internetseiten

Es gibt aber weitere Möglichkeiten, die den Zugriff auf die individuell wichtigsten Internetseiten Thema: Favoriten nutzen Seite 8 3 INTERNET PRAXIS 3.1 Favoriten in der Taskleiste Es gibt aber weitere Möglichkeiten, die den Zugriff auf die individuell wichtigsten seiten beschleunigen. Links in der

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

VR-NetWorld-Software 4.4 (und folgende Versionen)

VR-NetWorld-Software 4.4 (und folgende Versionen) VR-NetWorld-Software 4.4 (und folgende Versionen) Mit der folgenden Anleitung erhalten Sie eine Beschreibung der wesentlichen SEPA-Funktionen in der VR-NetWorld Software. Insbesondere wird auf die Voraussetzungen

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 4: Einführung in JavaScript Stand: 03.11.2014. Übung WS 2014/2015. Benedikt Schumm M.Sc.

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 4: Einführung in JavaScript Stand: 03.11.2014. Übung WS 2014/2015. Benedikt Schumm M.Sc. Übung WS 2014/2015 E-Commerce: IT-Werkzeuge Web-Programmierung Kapitel 4: Stand: 03.11.2014 Benedikt Schumm M.Sc. Lehrstuhl für ABWL und Wirtschaftsinformatik Katholische Universität Eichstätt-Ingolstadt

Mehr

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java Grundlagen von Java Aufgabe 1: Typen und Zuweisungen in Java Welche der folgenden Java-Anweisungen sind fehlerhaft? Handelt es sich um einen Compiler- oder einen Laufzeitfehler? Anmerkung: Folgefehler

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22 Kapitel 19 Vererbung, UML Seite 1 von 22 Vererbung - Neben der Datenabstraktion und der Datenkapselung ist die Vererbung ein weiteres Merkmal der OOP. - Durch Vererbung werden die Methoden und die Eigenschaften

Mehr

Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2

Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2 Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2 1. Benötigte Software Zur Erstellung des Installers wird folgende Software benötigt. Es wird sich in dieser Dokumentation

Mehr

Einführung in die Informatik 1 - Javainstallationsanleitung

Einführung in die Informatik 1 - Javainstallationsanleitung Einführung in die Informatik 1 - Javainstallationsanleitung Die Tutoren Stand: 19. Oktober 2009 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einfhrung in Java 1 1.1 Installation von Java unter Mac...............................

Mehr

3 Datentypen, Variablen und Konstanten

3 Datentypen, Variablen und Konstanten 3 Datentypen, Variablen und Konstanten Das folgende Kapitel bildet die Voraussetzung für eine strukturierte Programmierung in Excel. Mit Variablen speichern Sie Informationen dauerhaft während der Laufzeit

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Fibugym PE 1.0 Buchhaltungssoftware für das Gymnasium Stand: 25.05.2005. FibuGym PE 1.0

Fibugym PE 1.0 Buchhaltungssoftware für das Gymnasium Stand: 25.05.2005. FibuGym PE 1.0 FibuGym PE 1.0 Finanzbuchhaltungs-Lernsoftware (Personal Edition - Version 1.0) für den Einsatz am Gymnasium. Eine Einführung in die Doppelte Buchführung am Computer. 2004-2005 Manuel Friedrich email:

Mehr

Microsoft Access 2010 Bilder

Microsoft Access 2010 Bilder Microsoft Access 2010 Bilder Hyperlinks... arbeiten ähnlich wie ein Link in einer Webseite. sind ein Verweis auf eine Datei (access2010\material\beispiel\tabledevelop\automat.accdb). können ein Verweis

Mehr

C# Tutorial Part 1. Inhalt Part 1. Einleitung. Vorbereitung. Eagle Eye Studios. Einleitung Vorbereitung Das erste Projekt

C# Tutorial Part 1. Inhalt Part 1. Einleitung. Vorbereitung. Eagle Eye Studios. Einleitung Vorbereitung Das erste Projekt Eagle Eye Studios C# Tutorial Part 1 Inhalt Part 1 Einleitung Vorbereitung Das erste Projekt Einleitung Wer sich mit dem Programmieren schon einigermaßen auskennt, kann diesen Abschnitt überspringen. Programmieren,

Mehr

RÖK Typo3 Dokumentation

RÖK Typo3 Dokumentation 2012 RÖK Typo3 Dokumentation Redakteur Sparten Eine Hilfe für den Einstieg in Typo3. Innpuls Werbeagentur GmbH 01.01.2012 2 RÖK Typo3 Dokumentation Inhalt 1) Was ist Typo3... 3 2) Typo3 aufrufen und Anmelden...

Mehr

12 Dokumente verwalten

12 Dokumente verwalten 12 e verwalten 12.1 e organisieren Wir wollen uns nun etwas ausführlicher damit beschäftigen, wo unsere e gespeichert werden. Textverarbeitungsprogramme schlagen beim Speichern einen Ordner vor, in dem

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung 1. Begriffe Objektorientierte Programmierung mit C++ Prozedurale Programmierung Sprachen: C, Pascal, Cobol, Basic,... Objektorientierte Programmierung Sprachen: C++, C#, Java... Methode: - Gesamtproblem

Mehr

Einführung in die Stapelverarbeitung von FixFoto

Einführung in die Stapelverarbeitung von FixFoto Einführung in die Stapelverarbeitung von FixFoto Stand: Januar 2012 Diese Anleitung bezieht sich auf FixFoto, V 3.30. In älteren oder neueren Versionen könnte die Arbeitsweise anders sein. Inhalt 1. Was

Mehr

Beuth Hochschule JDK und TextPad WS14/15, S. 1

Beuth Hochschule JDK und TextPad WS14/15, S. 1 Beuth Hochschule JDK und TextPad WS14/15, S. 1 JDK und TextPad Der TextPad ist ein ziemlich ausgereifter Text-Editor, den man auch als einfache ("noch durchschaubare") Entwicklungsumgebung z.b. für Java-Programme

Mehr

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Aufgabe 3: Konto Um Geldbeträge korrekt zu verwalten, sind zwecks Vermeidung von Rundungsfehlern entweder alle Beträge in Cents umzuwandeln und

Mehr

Objektorientierung Grundbegriffe

Objektorientierung Grundbegriffe Objektorientierung Grundbegriffe Um Java programmieren zu können, ist es wichtig, einige objektorientierte Grundkenntnisse zu besitzen, denn die Sprache setzt voll auf dem OO-Paradigma auf. 3.1 Klassen

Mehr

ekey TOCAhome pc Software Inhaltsverzeichnis 1. ZWECK DIESES DOKUMENTS... 3 2. VERWENDUNGSHINWEIS ZUR SOFTWARE... 3

ekey TOCAhome pc Software Inhaltsverzeichnis 1. ZWECK DIESES DOKUMENTS... 3 2. VERWENDUNGSHINWEIS ZUR SOFTWARE... 3 Inhaltsverzeichnis Software ekey TOCAhome pc 1. ZWECK DIESES DOKUMENTS... 3 2. VERWENDUNGSHINWEIS ZUR SOFTWARE... 3 3. MONTAGE, INSTALLATION UND ERSTINBETRIEBNAHME... 3 4. VERSION... 3 Version 1.5 5. BENUTZEROBERFLÄCHE...

Mehr

Java Schulung (Java 2 Java Development Kit 5 / 6)

Java Schulung (Java 2 Java Development Kit 5 / 6) 2. Grundlagen der Objektorientierung 2.1 Klassen, Attribute, Methoden Klassen Eine Klasse beschreibt als Bauplan Gemeinsamkeiten einer Menge von Objekten ist also ein Modell, auf dessen Basis Objekte erstellt

Mehr

Vorgehensweise für die Umstellung von Quicken-Konten bei Bargeldbuchungen auf ein Wertpapierkonto

Vorgehensweise für die Umstellung von Quicken-Konten bei Bargeldbuchungen auf ein Wertpapierkonto Vorgehensweise für die Umstellung von Quicken-Konten bei Bargeldbuchungen auf ein Wertpapierkonto Bevor Sie Ihre Datei nach Quicken 2010, bzw. 2011 konvertieren, können Sie in Ihrer jetzt benutzten Version

Mehr

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2008/2009

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2008/2009 PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 1 PIWIN I Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I Vorlesung 3 SWS WS 2008/2009 FB Informatik

Mehr

Kurzanleitung für das CMS Joomla 3.x

Kurzanleitung für das CMS Joomla 3.x Kurzanleitung für das CMS Joomla 3.x 1. Login ins Backend Die Anmeldung ins sogenannte Backend (die Verwaltungsebene) der Website erfolgt über folgenden Link: www.name-der-website.de/administrator. Das

Mehr

Ein Word-Dokument anlegen

Ein Word-Dokument anlegen 34 Word 2013 Schritt für Schritt erklärt Ein Word-Dokument anlegen evor Sie einen Text in Word erzeugen können, müssen Sie zunächst einmal ein neues Dokument anlegen. Die nwendung stellt zu diesem Zweck

Mehr

Kapitel 14. Systemarchitektur

Kapitel 14. Systemarchitektur 1 Kapitel 14 Ziele 2 Grundprinzipien der verstehen Schichtenarchitekturen kennenlernen Modelle und Programme mit Paketen strukturieren Eine Architektur für eine einfache Bankanwendung konstruieren Grundprinzipien

Mehr

Einrichtung des NVS Calender-Google-Sync-Servers. Installation des NVS Calender-Google-Sync Servers (Bei Neuinstallation)

Einrichtung des NVS Calender-Google-Sync-Servers. Installation des NVS Calender-Google-Sync Servers (Bei Neuinstallation) Einrichtung des NVS Calender-Google-Sync-Servers Folgende Aktionen werden in dieser Dokumentation beschrieben und sind zur Installation und Konfiguration des NVS Calender-Google-Sync-Servers notwendig.

Mehr

Erste Hilfe bei Problemen mit Iustec Mandat

Erste Hilfe bei Problemen mit Iustec Mandat Erste Hilfe bei Problemen mit Iustec Mandat Inhaltsverzeichnis 1. Nach dem Programmstart werden Sie aufgefordert, die Verbindung zu Ihrem Daten-Ordner neu herzustellen, obwohl Sie keine neue Version von

Mehr

Erste Schritte mit Eclipse

Erste Schritte mit Eclipse Erste Schritte mit Eclipse März 2008, KLK 1) Java Development Kit (JDK) und Eclipse installieren In den PC-Pools der HAW sind der JDK und Eclipse schon installiert und können mit dem Application Launcher

Mehr

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

Primitive Datentypen

Primitive Datentypen Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.

Mehr