Folien ab 17.10.12

Werbung
Klassen in Java
Grundlagen der Programmierung
Stephan Kleuker
68
Klassen in Java (Syntax) (1/3)
class Datum {
int tag;
int monat;
monat;
int jahr;
jahr;
}
• Java hat Schlüsselworte (z. B. class), diese dürfen z. B. nicht
als Variablennamen genutzt werden
• viele Programmfragmente stehen in geschweiften oder
runden Klammern (immer beide Klammern eintippen, dann
füllen)
• geschweifte Klammer am Anfang und am Ende der
Klassendefinition
• Befehle enden mit einem Semikolon
• Objektvariable: <Typ> <Name>;
Grundlagen der Programmierung
Stephan Kleuker
69
Klassen in Java (Syntax) (2/3)
Variablen- und Klassennamen
• beginnen mit einem Groß- oder Kleinbuchstaben (keine
Umlaute oder Sonderzeichen, auch wenn theoretisch möglich)
• werden gefolgt von beliebig vielen Groß- und
Kleinbuchstaben, Ziffern oder _
keine Syntax, aber Konvention
• Klassennamen groß, typisch Einzahl (Student nicht Studenten)
• Objektvariablen klein, vollständige Worte, "sprechend"
• bei zusammengesetzten Namen werden zweite Worte direkt
hinten an gefügt und erster Buchstabe großgeschrieben, z. B.
eingeschriebenAm, richtig: starttermin falsch: startTermin
• eine Objektvariable pro Zeile deklarieren
Grundlagen der Programmierung
Stephan Kleuker
70
Klassen in Java (Syntax) (3/3)
• Platzierung von Klammern
class Datum {
int tag;
int monat;
monat;
int jahr;
jahr;
}
• oder
class Datum
{
int tag;
int monat;
monat;
int jahr;
jahr;
}
• auf Folien obige Variante (spart eine Zeile)
• Einrückungen haben keine semantische Bedeutung
Grundlagen der Programmierung
Stephan Kleuker
71
Syntaxprüfung durch Compiler (genauer Parser)
• Programmcode muss so übersetzt werden, dass der
Computer Befehle verarbeiten kann (-> genauer später),
Prozess heißt kompilieren (übersetzen)
• Vor dem Kompilieren (genauer: erster Schritt dabei), wird
die Syntax des Programms geprüft (geparst)
• Bei fehlerhafter Syntax wird mehr oder minder genaue
Fehlermeldung ausgegeben
• Kompilierung findet typischerweise in einer
Entwicklungsumgebung statt (wir nutzen zunächst BlueJ)
Grundlagen der Programmierung
Stephan Kleuker
72
Erfolgreiche Kompilierung in BlueJ
Grundlagen der Programmierung
Stephan Kleuker
73
Fehlerhafte Kompilierung in BlueJ
Grundlagen der Programmierung
Stephan Kleuker
74
Woher kommen die Klassen und Typen
• Java bietet bereits viele Klassen als Typen an, in der
sogenannten Klassenbibliothek
• Das Wissen über existierende Klassen ist Teil der
Programmiererfahrung
• In der Programmierausbildung werden teilweise
existierende Klassen neu programmiert um Erfahrungen zu
sammeln
• Übersicht bietet u. a. Java Dokumentation (lokal
herunterladbar) oder auch
http://download.oracle.com/javase/7/docs/api/index.html
• Woher die Objekte kommen bleibt noch unklar
Grundlagen der Programmierung
Stephan Kleuker
75
Wichtige elementare Typen und Klassen (Ausschnitt)
elementarer Typ
int
double (float
(float)
float)
boolean
long
Klasse
String
ArrayList<
ArrayList<Klasse>
ArrayList<String>
ArrayList<String>
Nutzung
ganze Zahlen
Fließkommazahlen
Wahrheitswerte, false, true
ganze Zahlen, größerer Zahlenbereich (mehr
Speicher benötigt)
Nutzung
Texte, Werte stehen in Hochkommata
Sammlung von beliebig vielen Objekten eines
Typs; nicht einfach hinschreibbar;
merkt sich die Reihenfolge
beliebig viele Texte, z. B. ["Hai", "Wo", "Da"]
Grundlagen der Programmierung
Stephan Kleuker
76
Ordnung in der Klassenbibliothek
• ähnlich wie große Dateimengen in Ordnern und
Unterordnern strukturiert werden, werden auch Klassen in
Ordnerstrukturen thematisch abgelegt
• Ordner heißen in Java Pakete
• Beispiel: Die Klasse ArrayList liegt im Paket java.util
• Damit Klasse aus Paket genutzt werden kann, muss die
Klasse im Quellcode bekannt gemacht werden, vor der
Klasse steht dann
import java.util.ArrayList
• andere Basisklassen wie String liegen in java.lang (da häufig
genutzt, müssen die Klassen nicht importiert werden)
Grundlagen der Programmierung
Stephan Kleuker
77
Erstellung der Klasse Adresse (1/2)
ich:Adresse
strasse= „Barabarastr.“
hausnummer= 16
postleitzahl= 49076
stadt= „Osnabrück“
bundesland=„Nds“
Grundlagen der Programmierung
• jeweils genau einen Typ
überlegen
• Ist hausnummer vom Typ
int?
Nein, Nummern wie 16a
wären syntaktisch nicht
korrekt
• Ist Postleitzahl vom Typ int?
Nein, führende Nullen nicht
möglich
04356 Leipzig
• Fazit: Bild links ist falsch
Stephan Kleuker
78
Erstellung der Klasse Adresse (2/2)
Grundlagen der Programmierung
Stephan Kleuker
79
Klasse Student
Grundlagen der Programmierung
Stephan Kleuker
80
fehlerhafte Klasse Praktikum
Grundlagen der Programmierung
Stephan Kleuker
81
korrigierte Klasse Praktikum
Grundlagen der Programmierung
Stephan Kleuker
82
Seltener genutzte Variante ohne import
class Praktikum {
String modul;
modul;
String semester;
semester;
String veranstalter;
veranstalter;
String mitarbeiter;
mitarbeiter;
java.util.ArrayList<String
java.util.ArrayList<String>
<String> termine;
termine;
java.util.ArrayList<Student
java.util.ArrayList<Student>
<Student> teilnehmer;
teilnehmer;
}
Grundlagen der Programmierung
Stephan Kleuker
83
Projektübersicht in BlueJ
Grundlagen der Programmierung
Stephan Kleuker
84
Beispielmodellierung
• Aufgabe: Zu entwickeln ist eine Software mit der man Bons
verwalten kann. Diese Bons müssen von unserer Software
verwaltet werden. Jeder Bon wird damit ein Objekt sein. Es
stellt sich die Frage nach weiteren Objektvariablen und
Ihren Typen.
• Ansatz: Analysiere einen Bon, bestimme seine
Eigenschaften, entweder von außen nach innen (Bon und
dann seine Details) oder innen nach außen (erst Details und
dann daraus den Bon zusammensetzen)
• Hinweis: Beide Ansätze ok, typischerweise iterativer Prozess
Grundlagen der Programmierung
Stephan Kleuker
85
Bon (1/4) – erste Objektvariablen
•
•
•
•
•
unternehmen (String)
adresse (Adresse)
datum (Datum)
uhrzeit (String)
produkte (??? gleich)
diskutabel
• mehrwertsteuer (gilt für viele Bons)
• summe (da aus produkte
berechenbar)
• blabla (String, nicht von Interesse)
Grundlagen der Programmierung
Stephan Kleuker
86
Bon (2/4) – Produkte genauer
• ist ein Sammlung von zwei Zeilen
• jede Zeile enthält einen Einzelposten bestehend aus
• anzahl (int) produktname (String) einzelpreis (double)
• gesamtpreis (wird aber berechnet)
• Ansatz: EinzelPosten wird Klasse, produkte wird Sammlung
von Einzelposten
Grundlagen der Programmierung
Stephan Kleuker
87
Bon (3/4) – entstandene Klassen
Grundlagen der Programmierung
Stephan Kleuker
88
Bon (4/4) – neue Klassen genauer
import java.util.ArrayList;
java.util.ArrayList;
class Bon {
String unternehmen;
Adresse adresse;
adresse;
Datum datum;
datum;
String uhrzeit;
uhrzeit;
ArrayList<Einzelposten>
ArrayList<Einzelposten> produkte;
produkte;
}
class Einzelposten {
int anzahl;
anzahl;
String produktname;
produktname;
double einzelpreis;
einzelpreis;
}
Grundlagen der Programmierung
Stephan Kleuker
89
Herunterladen