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