23.03.2004 YOU ARE HERE Pakete und Zugriffskontrolle • Einführung • Objektorientierte Modellierung Java-Sprachkonstrukte • Je größer das Software-Projekt, desto wichtiger die gründliche Planung • • • • • • • • • • Grobstruktur sollte vor dem Projektstart überlegt werden, nicht nachher Pakete und Zugriffskontrolle Deklaration von Methoden, Attributen, Variablen Ausdrücke und Anweisungen Kontrollstrukturen Ausnahmebehandlung • Modellierung mit UML kann Planung erheblich erleichtern • Pakete: Mechanismus, um Programme besser zu strukturieren Java-Klassenbibliothek Grafische Benutzungsoberflächen Programmierstil Zusammenfassung ¾ Grundvoraussetzung für erfolgreiche Programmierung im Team Java-Einführungskurs 1 Java-Einführungskurs 2 Pakete in UML Zuordnung von Klassen zu Paketen • • • • • Konvention zur Vermeidung von Paket-Namenskonflikten Grobstrukturierung von größeren Projekten Zusammenfassung „zusammengehöriger“ Klassen Definition von Namensräumen für Klassen Pakete können verschachtelt werden • Voranstellung des inversen Domainnamens des Paketerstellers • Klassen-Paket-Zuordnung mit package-Anweisung • erste Anweisung einer .java-Datei package de.lpz_ebusiness.Bibliothek.Daten; Medium Buch public class Buch { ... } Journal Daten • .java- und .class-Files müssen in Verzeichnisstruktur stehen, die der Paketstruktur entspricht GUI • z.B. /de/lpz_ebusiness/Bibliothek/Daten/Buch.java Bibliothek Java-Einführungskurs 3 Java-Einführungskurs 4 Zugriff auf Klassen in Paketen Zugriffskontrolle • Klassen aus anderen Paketen werden durch Paketname.Klassenname angesprochen package de.lpz_ebusiness.Bibliothek.Daten; public class Buch { private String autoren; ... public String getAutoren () {...} ... } java.util.Date ausleihDatum = new java.util.Date(); • alternativ: Klasse(n) aus anderen Paketen mit importAnweisung lokal bekannt machen import java.util.Date; // oder: import java.util.* • Sichtbarkeitsmodifikatoren public class Buch { ... public ausleihen (...) { ... Date ausleihDatum = new Date(); ... } } Java-Einführungskurs • public: Klasse/Attribut/Methode überall sichtbar • ohne: Klasse/Attribut/Methode nur in gleichem Paket sichtbar Attribut/Methode nur in gleichem Paket oder in abgeleiteten Klassen sichtbar Attribut/Methode nur in gleicher Klasse sichtbar • protected: • private: 5 Lehrstuhl für Angewandte Telematik/e-Business Java-Einführungskurs 6 1 23.03.2004 Zusammenfassung YOU ARE HERE • Grobstrukturierung von Projekten in Paketen • Einführung • Objektorientierte Modellierung • Java-Sprachkonstrukte • Definieren Namensräume, Zugriffsbereiche • Zugriffskontrolle über Sichtbarkeitsmodifikatoren Verfügbarkeit \ Sichtbarkeit public protected ohne • Pakete und Zugriffskontrolle Deklaration von Methoden, Attributen, Variablen • Ausdrücke und Anweisungen • Kontrollstrukturen • Ausnahmebehandlung private gleiche Klasse Ja Ja Ja Ja Klasse in gleichem Paket Ja Ja Ja Nein Subklasse in fremdem Paket Ja Ja Nein Nein Nichtsubklasse in fremdem Paket Ja Nein Nein Nein Java-Einführungskurs • • • • 7 Java-Klassenbibliothek Grafische Benutzungsoberflächen Programmierstil Zusammenfassung Java-Einführungskurs 8 Klassendeklaration Attributdeklaration public class Buch { ... } Klassenname public class Buch { private String autoren; private String titel; private String verlag; private int jahr; ... } Attributname Schlüsselwort für Klassendekl. Sichtbarkeitsmodifikator • public • • • • • • beginnt mit Großbuchstabe besteht aus Unicode-Zeichen praktisch beliebig lang darf kein Schlüsselwort sein Groß-/Kleinschreibung relevant! Konvention: NameDerKlasse • • • • • • Attribut-Datentyp beginnt mit Kleinbuchstabe besteht aus Unicode-Zeichen praktisch beliebig lang darf kein Schlüsselwort sein Groß-/Kleinschreibung relevant! Konvention: nameDesAttributs • primitiver Typ • ohne (Paket) • Wahrheitswert • Zeichen • Zahl Sichtbarkeitsmodifikator • public • Referenztyp • String (Zeichenkette) • Array (Feld) • Klasse • (Paket) • protected • private Java-Einführungskurs 9 Java-Einführungskurs 10 Primitive Typen: Zahlen Primitive Typen: Zeichen • Wahrheitswert (Boolesche Logik) • Zeichen (Unicode) • boolean : true oder false • char • direkt: • Escape-Sequenz: • Unicode (hex): • oktaler ASCII-Code: • Ganzzahl (Zweierkomplement) • • • • byte short int long –27...(27–1); dezimal: 42, hexadezimal: 0x2A, oktal: 052 –215...(215–1); dezimal, hexadezimal, oktal (s.o.) –231...(231–1); dezimal, hexadezimal, oktal (s.o.) –263...(263–1); dezimal: 100000000000L • Escape-Sequenzen • • • • • • • • • Fließkommazahl (IEEE 754) • float 32 Bit; Dezimalbruch: 3.1415F, Exponent: -2.567E25F • double 64 Bit; Dezimalbruch, 3.1415D, Exponent: 1.79E-308D Java-Einführungskurs 'A' '\"' '\u0022' '\42' 11 Lehrstuhl für Angewandte Telematik/e-Business '\"' '\'' '\\' '\b' '\t' '\n' '\f' '\r' Java-Einführungskurs doppeltes Anführungszeichen einfaches Anführungszeichen Backslash Backspace (ASCII: 8) Tabulator (ASCII: 9) Zeilenwechsel (ASCII: 10) Seitenwechsel (ASCII: 12) Wagenrücklauf (ASCII: 13) 12 2 23.03.2004 Referenztypen Referenzen auf Objekte • primitive Typen: Attribute enthalten Werte • mehrere Referenzen können auf das gleiche Objekt zeigen b false c X i 42 f s 3,1415 a :String o :Array p :Objekt • komplexere Datenstrukturen werden als Objekte dargestellt • String-Objekte, Array-Objekte, Objekte beliebiger Klassen • Referenztypen: Attribute enthalten "Verweise" auf Objekte s a o p • Garbage Collection zerstört nicht mehr referenzierte Objekte ¾ explizites "free" oder "delete" als Gegenstück zu new unnötig null s :String :Array :Objekt null-Literal: Attribut enthält keine Referenz auf ein Objekt Java-Einführungskurs a :String 13 o :Array null p null :Objekt Java-Einführungskurs 14 Klasse Object Strings (Zeichenketten) • alle Klassen haben Oberklasse Object • wichtige von Object geerbte Methoden • Zeichenketten werden durch Objekte der besonderen Klasse String dargestellt • keine explizite Instanziierung notwendig • public String toString () • gibt textuelle Repräsentation des Objekts aus • im Original Ausgabe von Klassenname und Objekt-Hashcode • sollte überschrieben werden, um Inhalt der Objektattribute auszugeben • wird implizit aufgerufen, wenn man ein Objekt an System.out.println() übergibt – hilfreich zum Testen • public boolean equals (Object obj) • vergleicht das Objekt mit dem in obj übergebenen Objekt • im Original nur Vergleich der Referenzen this und obj • direkte Zuweisung von Literalen möglich • String autor1 = "Doberkat"; • String autor2 = "Dißmann"; • Zeichencodierung in Strings analog zu char-Literalen • "Preis: \u20AC 123,45" Æ Preis: € 123,45 • Achtung: char-Literale stehen in einfachen, String-Literale in doppelten Anführungszeichen! • sollte überschrieben werden, um Objektattribute inhaltlich zu vergleichen • weitere, systemnähere Methoden (hier nicht weiter betrachtet) Java-Einführungskurs • mehr über die Fähigkeiten der String-Klasse später 15 Java-Einführungskurs 16 Arrays (Felder) Arrays: Beispiel • Sammlung von Werten des gleichen Typs, wobei auf jeden Wert über einen Index zugegriffen werden kann • Deklaration • getrennte Deklaration, Instanziierung und Initialisierung: String[] autoren; // Deklaration autoren = new String[3]; // Instanziierung • Typ[] feldname; • Typ kann primitiver Datentyp, String oder Klasse sein autoren[0] = "Gosling"; autoren[1] = "Joy"; autoren[2] = "Steele"; • Instanziierung • feldname = new Typ[Größe]; • Instanziierung mit Initialisierung // Initialisierung durch // individuellen Zugriff auf // einzelne Elemente • Deklaration, Instanziierung und Initialisierung in einem: • feldname = new Typ[] {Wert0, Wert1, ..., Wertn}; String[] autoren = new String[] {"Gosling", "Joy", "Steele"}; • Zugriff auf bestimmtes Feldelement • feldname[Index] • Bestimmung der Feldlänge • feldname.length Java-Einführungskurs 17 Lehrstuhl für Angewandte Telematik/e-Business Java-Einführungskurs 18 3 23.03.2004 Mehrdimensionale Arrays: Erzeugung Mehrdimensionale Arrays: Zugriff • Deklaration • Referenz auf bestimmtes Feldelement • Typ[][] feldname; • feldname[Index0][Index1] • Zahl der Klammerpaare bestimmt Zahl der Dimensionen • Referenz auf (n-1)-dimensionales Teilfeld • Instanziierung • feldname[Index0] • feldname = new Typ[Größe0][Größe1]; • Referenz auf n-dimensionales Gesamtfeld • Instanziierung nicht rechteckiger Arrays • feldname • Größe einer Dimension abhängig vom Index der "Oberdimension" • feldname = new Typ[Größe0][]; feldname[Index0] = new Typ[GrößeIndex0]; • Feldlänge der äußeren Dimension • feldname.length • Instanziierung mit Initialisierung • Feldlänge der nächst-tieferen Dimension • feldname = new Typ[][] { {Wert00, Wert01, ..., Wert0n}, {Wert10, Wert11, ..., Wert1n} }; • feldname[Index0].length Java-Einführungskurs 19 Java-Einführungskurs 20 Methodendeklaration Methodendeklaration: Parameter import java.util.Date; • Inhalt der Parameterliste • Typen der Parameter, die der Methode übergeben werden müssen • Namen, unter denen sie in der Methode angesprochen werden Parameterliste public class Buch { ... Methodenrumpf public Buch (...) {...} public public public public ... } int ausleihen (...) {...} • beginnt mit Kleinbuchstabe void zurueckgeben (...) {...} • besteht aus Unicode-Zeichen void vormerken (...) {...} • praktisch beliebig lang Date verlaengern (...) {...} • darf kein Schlüsselwort sein • Groß-/Kleinschreibung relevant! Methodenname • Konvention: nameDerMethode Rückgabe-Datentyp • Referenztyp • String (Zeichenkette) • Array (Feld) • Klasse Java-Einführungskurs • Methodenaufruf mit Parametern als Literale oder Variable Buch javaLehrbuch = new Buch ("Doberkat, Dißmann", "Einführung in die OOP mit Java", "Oldenbourg", 1999); ... int zeitraum = 14; Date rueckgabeTermin = javaLehrbuch.verlaengern (zeitraum); • primitiver Typ • Wahrheitswert • Zeichen • Zahl Sichtbarkeitsmodifikator • public • (Paket) • protected • private public Buch (String initAutor, String initTitel, String initVerlag, int initJahr) {...} public void zurueckgeben () {...} public Date verlaengern (int tage) {...} 21 Java-Einführungskurs 22 Parameterübergabe per Wert Parameterübergabe per Referenz • bei primitiven Typen • bei Referenztypen • beim Aufrufen einer Methode werden die Parameterwerte vom aufrufenden Programmteil in die Methode kopiert ¾ Wertänderungen der Parameter in der Methode wirken sich nicht auf Werte außerhalb der Methode aus • beim Aufrufen einer Methode werden die Verweise auf die Objekte vom aufrufenden Teil in die Methode kopiert, nicht die Objekte selbst ¾ Veränderungen der Objekte in der Methode wirken sich auf Objekte außerhalb der Methode aus! aufrufender Teil aufrufender Teil methode(int innen) aussen innen methode(aussen); innen = 84; 42 42 42 84 methode(aussen); innen :obj n: 42 innen.n = 84; 42 aussen :obj n: 42 aussen.n = 42; 42 int aussen = 42; methode(obj innen) :obj n: 84 :obj n: 84 Java-Einführungskurs 23 Lehrstuhl für Angewandte Telematik/e-Business Java-Einführungskurs 24 4 23.03.2004 Methodensignatur Überladen von Methoden • Methoden werden über ihre Signatur identifiziert • Möglichkeit, unterschiedliches Methodenverhalten in Abhängigkeit von den gegebenen Parametern zu definieren • gleicher Methodenname, verschiedene Parameterlisten • bestehend aus Methodenname, Anzahl und Typen der Parameter • aber nicht Parameternamen und Rückgabetyp • Beispiele public Date verlaengern (int tage) { ... // Benutzerdefinierte Verlaengerung leihFrist = leihFrist + tage; ... } • verschiedene Methodennamen Æ verschiedene Signaturen public void ausleihen () {...} public void zurueckgeben () {...} • gleiche Methodennamen, Parametertypen Æ gleiche Signaturen Æ Compiler-Fehlermeldung public Date verlaengern () { ... // Default-Verlaengerungsfrist (2 Wochen) leihFrist = leihFrist + 14; ... } public void vormerken (String benutzerName) {...} public boolean vormerken (String vormerkName) {...} • verschiedene Parametertypen Æ verschiedene Signaturen public Date verlaengern (int tage) {...} public Date verlaengern () {...} Java-Einführungskurs 25 Java-Einführungskurs 26 Überladen von Konstruktoren Beenden von Methoden • genau wie bei Methoden möglich • return-Anweisung beendet Methodenausführung und gibt Wert zurück • beliebte Technik für Initialisierungsvarianten von Objekten public Date verlaengern () { ... Date rueckgabeTermin = new Date(); ... return rueckgabeTermin; } • wird kein Konstruktor deklariert, so wird implizit ein leerer Standardkonstruktor verwendet public class Leer { } ⇔ public class Leer { public Leer () {} } • Bei Methoden ohne Rückgabewert (void) kann die Anweisung weggelassen oder ohne Variable (return;) angegeben werden • Verwendung mehrerer return-Anweisungen in einer Methode möglich • wird ein Konstruktor mit Parametern deklariert, so muss der leere Konstruktor explizit zusätzlich deklariert werden, um ebenfalls verwendet werden zu können Java-Einführungskurs 27 Java-Einführungskurs Variablen Variablen: Initialisierung • speichern (wie Attribute) veränderliche Werte versch. Typen • werden jedoch innerhalb einer Methode deklariert und existieren daher nur während der Ausführung der Methode! • Deklaration • Zuweisung von Werten an Variablen mit Operator = • vor Verwendung muss der Typ der Variablen festgelegt werden, d.h. welche Werte sie annehmen kann • alle primitiven Typen und Referenztypen möglich • kein Sichtbarkeitsmodifikator, da immer auf Methode begrenzt • mehrere Variablen gleichen Typs komma-getrennt aufführbar public void methode () { ... dez = -42; hex = 0xFFD6; autoren = new String[2]; autoren[0] = "Doberkat"; autoren[1] = "Dißmann"; rueckgabeTermin = new Date(); ... } • Kombination von Deklaration und Initialisierung public void methode () { int dez = -42, hex = 0xFFD6; String[] autoren = new String[2] {"Doberkat", "Dißmann"}; Date rueckgabeTermin = new Date(); ... } public void methode () { int dez, hex; String[] autoren; Date rueckgabeTermin; ... } Java-Einführungskurs 28 29 Lehrstuhl für Angewandte Telematik/e-Business Java-Einführungskurs 30 5 23.03.2004 Konstanten: Primitive Typen Konstanten: Referenztypen • Modifikator final bewirkt, dass der Wert von Variablen, Parametern, Attributen nach der Initialisierung fixiert ist • Modifikator final bewirkt nur, dass in Variablen, Parametern, Attributen gespeicherte Referenzen fixiert sind ¾ Attribute der referenzierten Objekte können weiterhin geändert werden! public class Klasse { private final int ANTWORT_AUF_ALLES = 42; public void methode () { final Klasse objekt = new Klasse(); // Referenz fixiert ... objekt.x = 5; // Werte des ref. Objekts noch änderbar ... objekt = null; // Fehler: Referenz nicht mehr änderbar ... } } public void methode (final String param) { final int zahl; // Initialisierung nicht sofort nötig ... zahl = 21; // einmalige Zuweisung möglich ... zahl = 12; // Fehler: nur Initialisierung erlaubt param = "Test"; // Fehler: Wert nach Übergabe fixiert } } Java-Einführungskurs 31 Java-Einführungskurs Blöcke und Sichtbarkeit (Scope (Scope)) Überdecken von Attributen • Java-Code ist in verschachtelten Blöcken strukturiert, die durch { } begrenzt werden • Variablen gelten nur in dem Block, in dem sie deklariert sind • Variablen können nicht in "Unterblöcken" deklariert werden, wenn sie bereits in "Oberblöcken" deklariert wurden • Deklaration von Variablen mit bereits verwendeten Attributnamen führt zur Überdeckung der Attribute • sowohl Variablen als auch Attribute bleiben zugänglich public void methode (int param) { int param = 1; // Fehler: int zahl = 2; // zahl ab if (...) { int zahl = 3; // Fehler: zeichen = 'A'; // Fehler: char zeichen = 'B'; // zeichen } zeichen = 'C'; // Fehler: if (...) { char zeichen = 'D'; // zeichen } } param schon deklariert hier sichtbar zahl bereits deklariert zeichen nicht deklariert erst ab hier sichtbar zeichen nicht mehr dekl. wieder deklarierbar Java-Einführungskurs 33 • Variablen über ihren Bezeichner, Attribute über this.Bezeichner • this ist Referenz auf Objekt, zu dem die Methode gehört public class Buch () { private String autoren; ... public void setAutoren (String autoren) { this.autoren = autoren; // Attribut = Parameter } public String getAutoren () { return autoren; // Attribut zurückgeben } } Java-Einführungskurs Überdecken, Überladen, Überschreiben Variablenarten • Überdecken eines Attributs • lokale Variablen • Deklaration einer Methodenvariable mit gleichem Namen wie Attribut des Objekts • Zugriff auf Methodenvariable über den Namen • Zugriff auf überdecktes Attribut über this-Referenz und Name 34 • in einer Methode (oder in einem Block einer Methode) deklariert • gültig von Deklaration bis Ende des Blocks/der Methode • Parameter • im Kopf einer Methode oder eines Konstrukturs deklariert • gültig in gesamter Methode/gesamtem Konstruktor • Überladen einer Methode • Deklaration von Methoden mit gleichen Namen, aber unterschiedlichen Signaturen • Zugriff auf verschiedene Methoden anhand übergebener Parameter • Überschreiben einer Methode • Deklaration einer Methode mit gleichem Namen wie Methode der Oberklasse • Zugriff auf Methode der Unterklasse über den Namen • Zugriff auf Methode der Oberklasse über super-Referenz und Name Java-Einführungskurs 32 35 Lehrstuhl für Angewandte Telematik/e-Business • Attribute (Instanzvariablen) • in einer Klasse deklariert • in individuellen Objekten gültig von Instanziierung bis Zerstörung • Klassenvariablen • in einer Klasse mit Modifikator static deklariert • nicht an Instanzen der Klasse gebunden, sondern im gesamten Programm gültig Java-Einführungskurs 36 6 23.03.2004 Klassenvariablen Klassenmethoden • nicht an Instanzen der Klasse gebunden, sondern im gesamten Programm gültig • mit Schlüsselwort static deklarierte Methoden • dürfen ausschließlich auf Klassenvariablen und andere Klassenmethoden zugreifen, nicht auf "normale" Attribute und Methoden! • mit Schlüsselwort static deklarierte Attribute public class Statistik { public static float durchschnitt (...); } public class Klasse { public static int variable; public static final String konstante = "Konstante"; ... } • Zugriff über den Klassennamen ohne vorherige Instanziierung eines Objekts • Zugriff über den Klassennamen ohne vorherige Instanziierung eines Objekts float avg = Statistik.durchschnitt (...); • public static void main() ist Klassenmethode Klasse.variable = 42; System.out.println (Klasse.konstante); Java-Einführungskurs • zu Programmbeginn können noch keine Objekte instanziiert sein 37 Java-Einführungskurs mainmain-Klassenmethode in BlueJ Zusammenfassung • nicht über ein Objekt aufrufbar, sondern nur über die Klasse • Sichtbarkeitsmodifikatoren 38 • public, ohne (Paket), private, protected • Primitive Datentypen und ihre Literale • boolean; short, byte, int, long; float, double; char • Referenzdatentypen • Referenzen auf Objekte, Garbage Collection • Object, String, Arrays • Methodendeklaration und Methodensignatur • Parameterübergabe per Wert und per Referenz • Überladen von Methoden und Konstruktoren • Deklaration von Variablen und Konstanten • Überdecken von Attributen • Blöcke und Sichtbarkeit • Klassenvariablen und –methoden (static) Java-Einführungskurs 39 Java-Einführungskurs 40 Und täglich grüßt das Murmeltier... • ...morgen um 9:15 Uhr s.t. im Hörsaal 1, Talstraße 35! Java-Einführungskurs 41 Lehrstuhl für Angewandte Telematik/e-Business 7
© Copyright 2024 ExpyDoc