Universität Stuttgart Institut für Automatisierungs- und Softwaretechnik Prof. Dr.-Ing. Dr. h. c. P. Göhner Einführung in Java, Teil 2 (Original Titel der Folien: JavaIntensivkurs am IAS) Vorlesung Informatik I, 17.11.2005, Daniel Huson © 2000, IAS 1 Überblick Teil 1: Erster Überblick Java Grundlagen Teil 2: Grundlagen der Objektorientierung Klassen und Objekte in Java © 2000, IAS 2 Grundlagen der Objektorientierung Begriffe Objektorientierte Analyse • OOA ist Analysemethode, Anforderungen aus der Perspektive der Klassen und Objekte, die sich im Vokabular des Problembereichs finden Objektorientiertes Design • OOD ist Designmethode, Prozess der objektorientierten Zerlegung • Notation für Beschreibung der logischen und physikalischen wie auch statischen und dynamischen Modelle des betrachteten Systems Objektorientierte Programmierung • Implementierungsmethode, Programme als Ansammlungen von kooperierenden Objekten • jedes Objekte ist Exemplar (Instanz) einer Klasse • alle Klassen sind Elemente einer Klassenhierarchie, die durch Vererbungsbeziehungen gekennzeichnet ist © 2000, IAS 3 Grundlagen der Objektorientierung Hauptelemente des Objektmodells Die folgenden vier Konzepte sind die vier Hauptelemente des Objektmodells (nach G.Booch) Fehlt eines dieser vier Elemente, so ist das Modell nicht objektorientiert: Abstraktion Kapselung Modularität Hierarchie © 2000, IAS 4 Grundlagen der Objektorientierung Abstraktion • konzentriert sich auf die wesentlichen Charakteristika eines Objekts • relativ zur Perspektive des Betrachters © 2000, IAS 5 Grundlagen der Objektorientierung Kapselung • verbirgt die Details der Objekt-Implementierung • trennt somit die Schnittstelle einer Abstraktion von ihrer Implementierung © 2000, IAS 6 Grundlagen der Objektorientierung Modularität • packt Abstraktionen in eigenständige Einheiten • Verbindungen zwischen den Modulen sind die Annahmen, die die Module gegenseitig übereinander anstellen © 2000, IAS 7 Grundlagen der Objektorientierung Hierarchie • Abstraktionen bilden eine Hierarchie • Klassenstruktur: “ist-ein”Hierarchie (Vererbung) • Objektstruktur: “Teil-von”Hierarchie (Aggregation) © 2000, IAS 8 Grundlagen der Objektorientierung Objekt allgemein: Gegenstand des Interesses (einer Beobachtung, Untersuchung, Messung) Objektorientierung: individuelles Exemplar von Methode 1 Methode 4 Gegenständen (Auto, Roboter), Personen (Kunde, Mitarbeiter), Begriffen der realen Welt (Auftrag) oder Begriffen der Vorstellungswelt (Strategie) Kennzeichen von Objekten: • Identität: Objekt kann deutlich von anderen unterschieden werden • Daten (Variablen): Eigenschaften des Objekts • Methoden (Operationen): Lesen und Manipulieren von Daten Daten Methode 2 • • • • Methode 3 Geheimnisprinzip: Datenzugriff nur über Methoden © 2000, IAS 9 Grundlagen der Objektorientierung Klasse allgemein: Gruppe von Gegenständen, Lebewesen, Begriffen mit gemeinsamen Merkmalen Objektorientierung: ändern Name “Objekt-Schablone” für • Objekte mit denselben Variablen (Daten) und • denselben Operationen (Methoden) Objekt-Erzeugungsmechanismus MitarbeiterKlasse Name Gehalt ändern Gehalt Mitarbeiter-Objekt Mitarbeiter-Objekt ändern Name ändern Name Name Name Müller Meier Gehalt Gehalt 6.000 5.000 ändern Gehalt ändern Gehalt © 2000, IAS 10 Grundlagen der Objektorientierung Huhn Klasse Name : Größe : Farbe : Eier legen() gackern() Berta Kunigunde Objekte Elsa Elfriede © 2000, IAS 11 Grundlagen der Objektorientierung Vererbung Stellt eine Verallgemeinerung / Spezialisierung-Hierarchie dar Eine untergeordnete Klasse erbt Eigenschaften und Verhalten einer oder mehrerer übergeordneter Klassen „...ist ein...“ - Beziehung © 2000, IAS 12 Grundlagen der Objektorientierung Vererbung Fahrzeug Wasserfahrzeug Landfahrzeug PKW Motorrad Amphibienfahrzeug Schiff Cabrio © 2000, IAS 13 Grundlagen der Objektorientierung Aggregation Stellt Beziehung zwischen einem Ganzen und seinen Teilen dar „...hat ein...“ - oder „...ist Teil von...“ - Beziehung © 2000, IAS 14 Grundlagen der Objektorientierung Aggregation Auto Motor Lenkrad Rad Auspuff Zündkerze © 2000, IAS 15 Grundlagen der Objektorientierung Unterschied zwischen Vererbung und Aggregation: Vererbung: Ein Cabrio ist ein PKW. Ein Cabrio ist ein Fahrzeug. Ein Amphibienfahrzeug ist ein Landfahrzeug und ein Wasserfahrzeug. Aggregation: Ein Auto hat einen Motor, ein Lenkrad, Sitze, ... Ein Computer hat eine Grafikkarte, RAM, Prozessor, ... © 2000, IAS 16 Überblick Teil 1: Erster Überblick Java Grundlagen Teil 2: Grundlagen der Objektorientierung Klassen und Objekte in Java © 2000, IAS 17 Klassen und Objekte in Java Programmstruktur (1) Überblick: Programm Programm *.java *.java *.java *.java *.java *.java class class interface interface class class ... package © 2000, IAS 18 Klassen und Objekte in Java Programmstruktur (2) *.java-Dateien: Beinhalten Klassen- und Schnittstellendeklarationen, wobei (genau) eine Klasse/Schnittstelle als public deklariert sein muss • Klassen-/Schnittstellenname und Dateiname müssen übereinstimmen (Groß- und Kleinschreibung beachten) Beinhalten package-Anweisung Beinhalten import-Anweisungen Beispiel: // Datei Test.java package ias.kurs.java; import java.awt.*; public class Test { ... }; © 2000, IAS 19 Klassen und Objekte in Java Programmstruktur (3) packages (Pakete): Organisationseinheit für Klassen und Schnittstellen • beliebig tiefe Schachtelung von Paketen ist möglich, z.B. java.awt.image • Schachtelungsstruktur wird auf Verzeichnisse abgebildet, z.B. java/awt/image • ohne Angabe eines Pakets wird ein namenloses Defaultpackage zugeordnet Legen Namensraum fest • alle Klassen eines packages können einander direkt referenzieren • Klassen anderer Pakete müssen explizit importiert (import) oder qualifiziert (vollständige Pfadangabe) werden • alle Klassen aus dem Paket java.lang sind standardmäßig importiert Zur Steuerung von Zugriffsrechten nützlich • alle Klassen eines packages können einander sehen © 2000, IAS 20 Klassen und Objekte in Java Programmstruktur (4) Java Applikation: Durch Einfügen einer main()-Methode in eine Klasse wird eine Applikation vervollständigt: // Datei: HelloWorld.java public class HelloWorld { public static void main( String[] args ) { System.out.println(“Hello World!”); } } Die main()-Methode ist Einstiegspunkt in das Programm Die vor main() stehenden Schlüsselwörter (public static void) sowie die Parameter (String[] args) sind immer gleich © 2000, IAS 21 Klassen und Objekte in Java Klassen (1) Klasse Klasse Überblick: Variablen Variablen Methoden Methoden Konstruktoren Konstruktoren Variablen (Attribute): • primitiver Typ: int i; • Referenz: Auto meinAuto; • Array: int[] intFeld1; Methode: • Operation mit möglichen Rückgabewert (return) • eindeutig durch Methodenname und Parameter Konstruktor: • Zur Instanzierung von Objekten benötigt • Default: Klassenname(){}; • weitere Konstruktoren möglich • kein Rückgabewert! © 2000, IAS 22 Klassen und Objekte in Java Klassen (2) Beispiel: // Datei: Motorrad.java class Motorrad { String modell, farbe; boolean motorZustand; // Referenz auf Strings // Motor an/aus void starteMotor(){ // Methode starteMotor if(motorZustand == true) System.out.println(“Motor ist bereits an!”); else { motorZustand = true; System.out.println(“Motor ist jetzt an!”); } } void zeigeDaten(){ // Methode zeigeDaten System.out.println(“Das Motorrad ist eine” + farbe + “e “ + modell); } } © 2000, IAS 23 Klassen und Objekte in Java Klassen (3) Erklärungen: Klassendefinition durch: class Motorrad {} drei Variablen: • Referenz auf Klasse String (Zeichenkette): model und farbe • vom Datentyp boolean: motorZustand zwei Methoden: • zum Starten des Motors starteMotor(); • zur Ausgabe der Motorraddaten zeigeDaten(); Einrückungen haben für den Compiler keine Bedeutung keine Trennung von Deklarationen und Implementierung © 2000, IAS 24 Klassen und Objekte in Java Objekterzeugung mit new neue Objekte werden aus bestehenden Klassen mit new-Operator erzeugt: String str = new String(); Motorrad m2 = new Motorrad(); Klammern dürfen nicht weggelassen werden! der new-Operator weist dem Objekt Speicherplatz zu und ruft den passenden Konstruktor (Initialisierung) auf Beispiel: import java.util.Date; class DatumAnzeige { public static void main( String args[] ){ Date d1, d2; d1 = new Date(); System.out.println(“Datum 1: “ + d1); d2 = new Date(“April 7 1998 11:00 AM”); System.out.println(“Datum 2: “ + d2); } } © 2000, IAS 25 Klassen und Objekte in Java Variablen (1) Allgemein: Allgemeine Deklaration einer Variable: [schlüsselwörter] Typ/Klasse variablenname Zugriff mit Hilfe der Punkt-Notation: einObjekt.var1 //Zugriff auf var1 in einObjekt einObjekt.v-aussen.v-innen // verschachtelter Aufruf Beispiel: import java.awt.Point; class TestPunkt { public static void main( String args[] ) { Point punkt = new Point (); punkt.x = 5; punkt.y = 12; System.out.println(“Punkt(x/y): “ + punkt.x + “/” + punkt.y”); } } © 2000, IAS 26 Klassen und Objekte in Java Variablen (2) Klassenvariablen: Klassenvariablen sind im Gegensatz zu „normalen“ Variablen Bestandteil der Klasse und nicht eines Objektes, d.h. sie sind nur einmal pro Klasse vorhanden. Klassenvariablen werden mit dem static Schlüsselwort definiert: class FamilienMitglied { static String nachname = “Mueller”; String vorname; } der Zugriff auf Klassenvariablen kann entweder über die Klasse oder über das Objekt erfolgen: FamilienMitglied sohn = new FamilienMitglied(); System.out.println(FamilienMitglied.nachname ); // ueber Klasse System.out.println(sohn.nachname ); // ueber Objekt © 2000, IAS 27 Klassen und Objekte in Java Variablen (3) Referenzen: Java kennt keine Zeiger und Zeigerarithmetik, aber ähnliche Möglichkeiten durch Referenzen Arbeiten mit Objekten bedeutet in Java hauptsächlich Arbeiten mit Referenzen: Beispiel: import java.awt.Point; class ReferenzenTest { public static void main( String args[] ) { Point pt1, pt2; pt1 = new Point(100, 100); pt2 = pt1; pt1.x = 200; pt1.y = 200; System.out.println(“pt1: “ + pt1.x + “,” + pt1.y); System.out.println(“pt2: “ + pt2.x + “,” + pt2.y); } } © 2000, IAS 28 Klassen und Objekte in Java Variablen (4) Erklärungen zu ReferenzenTest: pt1 1. Referenzen pt1, pt2 anlegen pt2 2. Point-Objekt mit Wert (100, 100) anlegen, Referenz pt1 zeigt auf Objekt 3. Referenz pt2 zeigt auf selbes Objekt wie pt1 4. Objektwerte werden mit Hilfe von pt1 geändert 5. Werteausgabe mit Hilfe von pt1 und pt2 © 2000, IAS Point Objekt x: 200 y: 200 29 Klassen und Objekte in Java Variablen (5) Arrays: Arrays können beliebig viele Elemente eines Datentyps speichern verschiedene Datentyp-Elemente in einem Array sind nicht möglich Deklaration String[] words; Point[] hits; oder String words[]; Point hits[]; Erstellen des Array-Objekts String[] words = new String[10]; String[] farbe = {“weiss”, “schwarz”, “rot”}; • Array kann mit new (s. words) oder mit Initialisierungswerten (s. farbe) erstellt werden • mit new werden die Array-Elemente automatisch initialisiert (Initialisierungswerte: 0, false, ““) © 2000, IAS 30 Klassen und Objekte in Java Variablen (6) Arrays: Zugriff auf Array-Elemente String[] words = new String[10]; words[0] = “Java”; ein Array der Größe n hat die Indizes [0] bis [n-1] Zugriffe außerhalb des Arrays werden von Compiler und von der Laufzeitumgebung erkannt, z.B. words[10] = “Error” die Instanzenvariable length enthält die Größe des Arrays int laenge = words.length; // gibt 10 aus durch Schachtelung können mehrdimensionale Arrays erzeugt werden: int[][] koord = new int[5][10]; koord[0][0] = 4; koord[4][9] = 123; © 2000, IAS 31 Klassen und Objekte in Java Methoden (1) Definition: eine Methode besteht aus mindestens vier Teilen: • Name der Methode • Datentyp, der von der Methode zurückgegeben wird (void: kein Rückgabewert) • Parameter (Argumentliste) • Methodenkörper Signatur returntype methodenname(typ1 arg1, typ2 arg2, ...){ ... } optional können Zugriffsrechte und Ausnahmen festgelegt werden mit this auf das aktuelle Objekt zugegriffen werden t = this.x; // Zuweisung Objektvariable x this.methode1(this); // Methodenaufruf mit this return this; // Rueckgabe des aktuellen Objekts © 2000, IAS 32 Klassen und Objekte in Java Methoden (2) Methodenaufruf: Methoden werden mit Hilfe der Punkt-Notation und Argumentliste (in Klammern) aufgerufen: einObjekt.methode1(arg1, arg2, arg3); verschachtelte Methodenaufrufe sind möglich: einObjekt.var1.methode1(arg1, arg2); in der Parameterliste werden primitive Datentypen als Wert, alle anderen als Referenz an die Methode übergeben, d.h. wird ein referenziertes Objekt von der Methode verändert, so bleibt die Veränderung nach Beendigung der Methode bestehen © 2000, IAS 33 Klassen und Objekte in Java Methoden (3) Beispiel: ... class RefArgument { int One2Zero( int arg[]) { int count = 0; for( int i = 0; i < arg.length; i++ ) { if(arg[i] == 1) { count++; arg[i] = 0; }} return count; }} public static void main (String arg[]) { int arr[] = {1, 5, 3, 1, 1, 6, 8, 1}; int nEins; RefArgument test = new RefArgument(); for( int i = 0; i < arr.length; i++ ) System.out.print(arr[i] + “ “); nEins = test.One2Zero(arr); System.out.println(“Gefundene Einsen: “ + nEins); for( int i = 0; i < arr.length; i++ ) System.out.print(arr[i] + “ “); } ... © 2000, IAS 34 Klassen und Objekte in Java Methoden (4) Klassenmethoden: Klassenmethoden wirken sich (wie Klassenvariablen) auf ganze Klassen und nicht nur auf einzelne Objekte aus werden dort benützt, wo Objekte nicht vorausgesetzt sind, z.B. Klasse Math der Java-Klassenbibliothek: float root = Math.sqrt(453.2); Klassenmethoden werden mit dem static Schlüsselwort definiert: static int max( int arg1, int arg2) {...} Regel: Alle Methoden, die von allgemeiner Nützlichkeit sind und nicht auf einzelne Objekte anwendbar sind, sollten als Klassenmethoden definiert werden. Frage: Kennen Sie bereits eine Klassenmethode? © 2000, IAS 35 Klassen und Objekte in Java Vergleichen von Objekten die meisten Operatoren sind nur auf primitive Datentypen (int, byte, char), aber nicht auf Objekte anwendbar Ausnahme: == und != prüfen Objekt(un)gleichheit, aber keine Werte(un)gleichheit Wertevergleich in Klasse String durch Methode equals(): Beispiel: class EqualsTest { public static void main(String args[]) { String str1, str2; str1 = “Java macht Spass!”; str2 = str1; System.out.println(“Gleiches Objekt? “ + (str1 == str2)); str2 = new String(str1); System.out.println(“Gleiches Objekt? “ + (str1 == str2)); System.out.println(“Gleicher Wert? “ + str1.equals(str2)); } } © 2000, IAS // wahr // falsch // wahr 36 Klassen und Objekte in Java Kopieren von Objekten mit copy() kann ein Objekt in eine Instanz derselben Klasse kopiert werden im kopierten Objekt enthaltene Objekte werden nicht mitkopiert Point pt1, pt2, pt3; pt1 = new Point(0, 0); pt2 = new Point(100, 100); pt2.copy(pt1); // alle pt1-Werte werden in pt2 kopiert mit clone() kann eine neue Instanz der Quellobjekt-Klasse erzeugt und mit den Quellobjektwerten initialisiert werden pt3 = (Point) pt2.clone(); © 2000, IAS 37 Klassen und Objekte in Java Zusammenfassung Paradigma Objektorientierung: • • • • Abstraktion Kapselung Modularität Hierarchie Struktur eines Java-Programms: Klassen und Pakete º Dateien und Verzeichnisse Aufbau einer Klasse: objekt- und klassenbezogene Variablen und Methoden Arbeiten mit Objekten heißt arbeiten mit Referenzen Elementare Operationen auf Objekten: Erzeugen, Vergleichen und Kopieren © 2000, IAS 38