Universität Bayreuth Lehrstuhl für Angewandte Informatik IV Datenbanken und Informationssysteme Prof. Dr.-Ing. Jablonski Variablen, Typen und Methoden Dipl. Inf. Manuel Götz Lehrstuhl für Angewandte Informatik IV Universität Bayreuth Fakultät für Mathematik, Physik und Informatik D-95440 Bayreuth Lehrstuhl für Mathematik und ihre Didaktik – Didaktik der Informatik Universität Bayreuth Fakultät für Mathematik, Physik und Informatik D-95440 Bayreuth Zustand eines Objekts Der Zustand eines Objekts ergibt sich aus den Werten seiner Felder ▫ Ein Feld hat einen Namen und einen Wert ▫ Beispiel Bankkonto: 3 Felder mit den Namen "nummer", "inhaber" und "kontostand" Erstellen von Feldern ▫ Felder werden in Klassen als Variablen erstellt ▫ Eine Variable hat einen Typ einen Namen evtl. einen Initialwert konto_1 nummer: 621 736 172 inhaber: "Donald Duck" kontoStand: 100 000 000 getKontoStand einzahlen betrag: abheben betrag: public class Konto { int nummer; String inhaber; überweisen int kontostand = 0; empfänger: betrag: } 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 2 Typen In Java werden 2 Arten von Typen unterschieden ▫ Primitiver Typ ▫ Objekttyp Primitive Typen ▫ Es gibt 8 primitive Typen in Java ▫ Für uns sind nur 2 wichtig: int ▫ Beliebige ganze Zahl* ▫ kein Text ▫ keine Dezimalzahl boolean ▫ Ein "Wahrheitswert" ▫ entweder "true" oder "false" Objekttypen ▫ Werden vom Programmierer implementiert ▫ Einige werden schon mitgeliefert Beispiel: String ▫ Beliebiger Text *) genau genommen, eine Zahl zwischen -2147483648 und +2147483647 (entspricht: -231 bis 231 - 1) 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 3 Unterschiede zwischen den Typen Primitiver Typ ▫ Der Wert wird direkt in das Feld des Objekts geschrieben ▫ Daher können primitive Typen mit "==" verglichen werden Objekttyp ▫ Im Feld eines Objekttypen steht eine Referenz auf den Wert ▫ Initialisiert (Anfangswert) wird er mit dem ungültigen Wert "null" ▫ Objekttypen werden mit der "equals"-Methode verglichen konto_1 621 736 172 nummer: Primitiver Typ public class Konto { int nummer; inhaber: String inhaber; int kontostand = 0; 100 000 000 kontoStand: } Hauptspeicher: "irgendwas" "bla" "Helmut Kohl" "noch mehr bla" 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 4 Methoden Bisher hat unsere Klasse Konto nur Variablen ▫ Damit hat sie einen Zustand, aber sie kann noch nichts tun Um etwas zu tun, braucht eine Klasse Methoden Die Klasse Konto hat 4 Methoden konto_1 nummer: 621 736 172 inhaber: "Donald Duck" kontoStand: 100 000 000 getKontoStand wenn eine Methode "etwas tut", dann führt sie einen Algorithmus aus einzahlen betrag: abheben betrag: public int getKontoStand() public void einzahlen(int betrag) überweisen public void abheben(int betrag) public void ueberweisen(Konto empfaenger, int betrag) 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik empfänger: betrag: 5 Aufbau von Methoden - 1 Methoden bestehen aus ▫ einer Signatur (das ist die "äußere Form") mit Name Typ des Rückgabewerts (Ergebnis, Resultat) und Parametern (einer Liste mit den Typen und Namen der Eingabewerte) und Scope (wo ist die Methode sichtbar?) ▫ einem Methodenkörper Enthält den Algorithmus Bestimmt also, was die Methode wirklich macht Methode Signatur Name Methodenkörper Scope Typ des Rückgabewerts Algorithmus Parameterliste 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 6 Aufbau von Methoden - 2 Eine Methode mit Rückgabewert ▫ Die Methode getKontoStand() liefert den Inhalt des Feldes kontostand Name der Methode Typ des Ergebnisses public int getKontoStand() { Scope return kontostand; } Liefere als Resultat Inhalt des Feldes kontostand Eine Methode mit Parameterliste ▫ ▫ Die Methode abheben(int betrag) benötigt einen Input, nämlich den Betrag, der abgehoben werden soll betrag ist ein Wert vom Typ int Diese Methode hat keinen Rückgabewert Parameter vom Typ int mit Name "betrag" public void abheben(int betrag) { kontostand = kontostand - betrag; } Methodenkörper Wichtig: Jeder Befehl in einem Methodenkörper endet mit einem Strichpunkt!! 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 7 Zuweisungen Zuweisungen funktionieren in Java immer "von rechts nach links" ▫ Rechts steht der neue Wert ▫ Links steht die Variable, der dieser Wert zugewiesen wird ▫ Dazwischen steht ein "=" public void einzahlen(int betrag) { kontostand = kontostand + betrag; } Alter Wert plus eingezahlter Betrag Dieser Variable wird der Wert zugewiesen Wichtig ▫ Der Typ auf der linken und rechten Seite muss gleich sein D.h. einem int kann auch nur ein int zugewiesen werden Beispiel für Fehler: int kontostand = 0; public void neuerKontostand(String betrag) { kontostand = betrag; } 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 8 Get- und Set-Methoden Die Werte von Variablen sollten in Java nur über Methoden verändert werden (guter Programmierstil) Get- und Set-Methoden Eine Get-Methode gibt den Wert einer Variablen zurück ▫ Beispiel: Get-Methode für kontoStand int kontostand = 0; public int getKontostand() { return kontostand; } Eine Set-Methode überschreibt einen Wert für eine Variable ▫ Beispiel: Set-Methode für Kontostand int kontostand = 0; public void setKontostand(int neuerKontostand) { kontostand = neuerKontostand; } 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 9 Aufruf von Methoden Methoden können in ihrem Methodenkörper die Methoden des eigene oder anderer Objekte aufrufen ▫ Das sind die Nachrichten, die zwischen den Objekten hin und hergeschickt werden Beispiel: Überweisen eines Betrags auf ein anderes Konto ▫ Dazu werden 2 Parameter benötigt Das Konto(-objekt), auf welches das Geld überwiesen werden soll Der Betrag, der auf dieses Konto überwiesen werden soll Ablauf: Abbuchen von meinem Konto, Einzahlen auf einem anderen Konto Parameterliste Referenz auf das Objekt, in dem ich bin (oft implizit) public void ueberweisen(Konto empfaenger, int betrag) { this.abheben(betrag); empfaenger.einzahlen(betrag); } Konto-Objekt des Empfängers 26.11.2007 Methode, die am KontoObjekt des Empfängers aufgerufen wird © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 10 Die Klasse String Ein Objekttyp in Java ▫ Bereits in der JDK mitgeliefert und muss nicht mehr implementiert werden Ein String ist eine verkettete Folge von Zeichen ▫ Er wird vom Computer nicht weiter interpretiert Beispiel: "Hier kann etwas total sinnloses stehen." ▫ Er ist immer eingeschlossen in Literale "" ▫ Erzeugung von Strings String neuerString = new String("Hallo, Welt"); //oder String neuerString2 = "Hallo, Welt, schon wieder"; // das ist ein Spezialfall zur Erstellung von Objekten ▫ Bearbeiten von Strings, z.B. Konkatenation String verketteterString = neuerString + neuerString2; Ergebnis Beispiel: verketteter String enthält "Hallo, WeltHallo, Welt, schon wieder" ▫ Ausgabe Siehe nächste Folie 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 11 Die Klasse System Ein Objekttyp in Java ▫ Bereits in der JDK mitgeliefert und muss nicht mehr implementiert werden Enthält unter anderem die Methode println ▫ Diese Methode gibt Werte (z.B. den Inhalt eines Strings oder den Wert eines int) auf der Kommandozeile aus ▫ Verwendung public class Konto { … public void kontostandAusgeben() { System.out.println("Der Kontostand von " + inhaber + " ist " + kontostand); } Vorsicht ▫ Bei anderen Typen als String und den Primitiven Typen gibt die Methode die ObjektID aus für den Benutzer komplett wertlos Beispiel Konto meinKonto = new Konto(); System.out.println(meinKonto); 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 12 Instanziierung von Objekten Erstellen eines Objekts aus einer Klasse Objekte können in Methoden erstellt werden Dafür gibt es das Schlüsselwort "new" ▫ Benötigte Angaben: Klasse, aus der ein Objekt erstellt werden soll Name das Objekts, das erstellt wird (das ist dann auch die Referenz) Konstruktor (im Augenblick ist das nur der Klassenname mit () dahinter) ▫ Beispiel: Erstellen eines Konto-Objekts public static void main(String args[]) { Klasse Konto a = new Konto(); } Name Konstruktor Wichtig: ▫ Erst nach der Instanziierung können Methoden aufgerufen werden!!! Vorher gibt es keine Objekte, an denen das geschehen könnte 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 13 JAR-Files Ein Java-Programm wird im Allgemeinen als JAR-File weitergegeben ▫ Ein JAR-File ist ausführbar z.B. durch einen Doppelklick (falls eine mainMethode vorhanden ist) Da Java portabel ist, funktioniert das Programm auf jedem Computer, auf dem eine JRE (Java Runtime Environment) installiert ist JREs sind heutzutage auf den meisten verkauften Rechnern vorinstalliert Sonst für die gängigen Betriebssysteme frei im Internet verfügbar unter https://sdlc3b.sun.com/ECom/EComActionServlet;jsessionid=6D29688818F9934AE 5DAEC7B4845F448 ▫ Im Prinzip sind in einem JAR-File die kompilierten (übersetzten) Klassen eines Programms enthalten und als zip gepackt ▫ Man kann wahlweise auch den Quellcode hinzufügen 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 14 Export eines JAR-Files in Eclipse - 1 Auswahl von File >> Export Markieren von "JAR file" "Next"-Button drücken 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 15 Export eines JAR-Files in Eclipse - 2 Auswahl des Projekts, das exportiert werden soll Auswahl, was exportiert werden soll ▫ Kompilierte Klassen ▫ Quellcode Auswahl des Zielverzeichnis und Name des JARs "Finish"-Button drücken 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 16 Aufgabe - 1 Implementieren Sie eine Klasse Konto mit folgenden Eigenschaften: ▫ Attribute: nummer kontoStand ▫ Am Anfang 0, d.h. "int kontoStand = 0;" inhaber ▫ Methoden mit folgenden Funktionen: Get- und Set-Methoden für die Variablen nummer und inhaber public void getKontoStand() ▫ Gibt den Kontostand zurück public void einzahlen(int betrag) ▫ Ein Kunde soll damit Geld auf sein Bankkonto einzahlen public void abheben(int betrag) ▫ Ein Kunde hebt Geld von seinem Konto ab public void ueberweisen(Konto k, int betrag) ▫ Ein Kunde überweist den Geldbetrag betrag von seinem Konto auf das Konto k 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 17 Aufgabe - 2 Implementieren Sie eine Klasse Test mit einer main-Methode, die folgendes Programm ausführt: ▫ ▫ ▫ ▫ ▫ ▫ ▫ In dieser soll ein Konto a und ein Konto b instanziiert werden Konto a soll "Albert" als Inhaber und die Kontonummer 1 haben Konto b soll "Berta" als Inhaber und die Kontonummer 2 haben Albert zahlt 100 Euro ein Berta zahlt 200 Euro ein Albert hebt 50 Euro ab Berta überweist 50 Euro auf das Konto von Albert ▫ Lassen Sie sich nach Einzahlungen, Auszahlungen und Überweisungen die Kontostände beider Konten ausgeben Lassen Sie ihre main-Methode laufen und testen Sie somit ihr Programm Exportieren Sie das Konto-Projekt aus Eclipse in ein JAR 26.11.2007 © 2007 · Lehrstuhl für Angewandte Informatik IV · Didaktik der Informatik 18