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