• Keine Ergebnisse gefunden

Objektorientiere Programmierung in Java 2003

N/A
N/A
Protected

Academic year: 2021

Aktie "Objektorientiere Programmierung in Java 2003"

Copied!
26
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Info B VL 2: Java und Objekt-Orientierung

Objektorientiere Programmierung in Java 2003

Ute Schmid (Vorlesung) Elmar Ludwig ( ¨ Ubung)

FB Mathematik/Informatik, Universit¨at Osnabr¨uck

(2)

Eigenschaften von OO-Sprachen (1)

Alles ist ein Objekt

(in Smalltalk, in Java gibt es auch primitive Datentypen)

Datentyp eines Objekts: Klasse, mit der es erzeugt wurde

Objekte können Daten (Felder) und Operationen (Methoden), die auf diesen Daten agieren,

enthalten.

Ein Programm ist eine Menge interagierender Objekte Objekt kann (via Methode) Botschaften an ein

anderes Objekt schicken (z.B. Aufforderung eine

Methode auszuführen)

(3)

Eigenschaften von OO-Sprachen (2)

Objekte k¨onnen zu komplexen Objekten kombiniert werden

Komplexe Objekte können aus einfachen

Bausteinen aufgebaut werden, indem Objekte Referenzen auf andere Objekte enthalten.

Alle Objekte eines Typs k ¨onnen dieselben Botschaften erhalten

Jedes Objekt einer Klasse kann alle Methoden, die in dieser Klasse definiert sind, ausführen, plus

ererbte Methoden von Oberklassen.

(4)

Prinzipien der OO-Programmierung

Kapslung (encapsulation) und

Wiederverwendbarkeit (reuse)

(5)

Kapslung

Organisation von Daten und Methoden in Klassen information hiding: Verstecken von

Implementierungsdetails

Kapslung ist guter Programmierstil:

Gliederung eines Problems in kleinere, unabhängige Komponenten (Klassen), Prinzip der strukturierten Programmierung

Durchschaubarkeit, Testbarkeit, weniger Fehleranfälligkeit

Pakete als Strukturierungsmittel für Klassen

Zugriffsrechte: z.B. Einschränkung von Zugriff auf

Felder, kann helfen Informationen konsistent zu halten Verstecken von Implementationsdetails unterstützt

Austauschbarkeit von Code

(6)

Wiederverwendbarkeit

möglich, weil

Klassen unabhängig von konkreten Daten definierbar Spezialisierung durch Vererbung

Schreibe Code und Dokumentation so, dass Funktionalität der Klasse transparent ist

Arbeite mit Interfaces

Guter Stil: Verwendung der vordefinierten Java Klassen

APIs (Application Program Interfaces) sind

üblicherweise gut designed und getested

(7)

Entstehungsgeschichte von Java

Start 1990 bei Sun, Gruppe von James Gosling, ursprünglicher Namen “Oak”

Angelehnt an C++, Elemente aus Smalltalk (Bytecode, Garbage Collection) – via Objective C

objekt-orientiert.

Ziel: Entwicklung einer Hochsprache für hybride

Systeme im Consumer-Electronic Bereich: Steuerung von Waschmaschinen, Telefonanlagen, ...

Boom des WWW 1993

Einsatz für Internet-Anwendungen

Java-Applets: kleine Programme, die in HTML-Seiten eingebunden werden können (Sun Demo

Web-Browser HotJava in den 90-ern)

Durchbruch 1995: Netscape Navigator 2.0 mit

integrierter Java Virtual Machine

(8)

Java Versionen

Java 1: bezeichnet Versionen 1.0 und 1.1 Java 2: alle Versionen ab 1.2

1.2: viele neue Features

1.3: Verbesserung von APIs (z.B. Corba), Geschwindigkeitsverbesserung (just in time compiler)

1.4: neue APIs (assertions, regular expressions, XML-Parser, ...)

Version # Klassen # Pakete Ersch. Anmerkungen

1.0 212 8 Jan. 1996

1.1 504 23 Feb. 1997

1.2 1520 59 Dez. 1998 auch “Java 2, Release 1.2”

1.3 1840 76 Mai 2000 "Java 2, Release 1.3, Standard Ed."

1.4 2977 135 Feb. 2002 (1.4.0)

(9)

Java Buzzwords (1)

Objekt-Orientiert: Kapslung in Klassen, Vererbung Robust: kein explizites Arbeiten mit Zeigern,

Speicherverwaltung wird von Java gehandhabt (Garbage Collection)

Portabel: JVM (virtuelle Maschine ist bewährtes Prinzip);

alle Datentypen sind unabhängig von der Implementierung festgelegt (Standards) Dynamisch, Erweiterbar: Organisation des

Programmcodes in Klassen, in verschiedenen Dateien gespeichert, load when needed

Internationalisierung: 16-bit Unicode (statt ASCII)

(10)

Java Buzzwords (2)

Multithreaded: Zerlegung in einzelne “Prozesse”

(Threads), die unabhängig voneinander ablaufen können

Verteilt: Remote Method Invocation (RMI),

Netzwerk-Programmierung basierend auf Client-Server Architekturen

Sicher: Plattform erlaubt Laden von unbekanntem Code,

der in einer sicheren Umgebung abläuft (kein Lesen

und Schreiben von Festplatte, ...)

(11)

3 Ebenen von Java

Programmiersprache

Virtuelle Maschine (Interpreter)

Plattform (APIs)

(12)

8-Damen Problem

8-Damen Problem: Platziere 8 Damen so auf einem

Schachbrett, dass keine eine andere schlagen kann

Allgemein:

Damen Problem

Standard-Beispiel für generate and test Algorithmen, Tiefensuche mit Backtracking

Problem mit exponentieller Komplexität

Imperative Lösung, Programm: QueensIM Klassenfeld: Array queens[1..MAX-1]

Index: Spalte der Dame, Index-Eintrag (änderbar):

Zeile der Dame

Globale Kontrolle über alle Damen (in der

main -Methode)

(13)

8-Damen Problen in OO

OO Lösung, Programm QueensOO

QueensOO

+MAX: int +main()

Queen

#row: int

#column: int

+findSolution(): boolean

#advance(): boolean

#predecCanAttack(queen:Queen): boolean +printSolution()

NeighborQueen

#neighbor: Queen left neighbor

1

creates

creates

(14)

Erinnerung: OO Konzepte

Programm als Menge interagierender Objekte: 8 Queen -Objekte

Kombination zu komplexen Objekten: eine NeighborQueen enthält eine Queen

Botschaften: sag der Nachbarin, dass sie sich

versetzen soll

(15)

Klassen in Java

Java als OO-Sprache

Klassen sind fundamentale Struktur

Jedes Java Programm ist als Klasse definiert; alle Java Programme benutzen Objekte.

Eine Klasse ist die kleinste Einheit an Java-Code, die für sich allein stehen kann und vom Java-Compiler und -Interpreter erkannt wird

Jede Klasse definiert einen neuen Datentyp!

primitiver Datentyp – Wert (int 42)

Klasse – Objekt (Circle ‘Kreis mit Radius 2’)

Klasse: Sammlung von Attributen (typisierte Platzhalter für Daten) und von Programmcode (gespeichert in

benannten Methoden, die auf diesen Daten arbeiten)

(16)

Klassendefinition

Klassendefinition: Im einfachsten Fall class Name

Members

Konvention: Erster Buchstabe des Klassennamens wird gross geschrieben.

Die erste Zeile der Klassendefinition repräsentiert die

“Klassen-Signatur” (vgl. erste Zeile einer Methodendefinition)

Der Java-Interpreter lädt Klassen dynamisch (dynamic

loading): Wenn das erste Mal ein Objekt dieser Klasse

erzeugt bzw. eine statische Komponente benötigt wird.

(17)

Members/Komponenten einer Klasse

Drei Arten von Members:

Felder

Methoden

innere Klassen

class members: als static deklariert, assoziiert mit der Klasse selbst

instance members: assoziiert mit individuellen Instanzen der Klasse (Objekten!)

Beispielprogramm: Circle

(18)

Klassen-Felder (1)

public static final double PI = 3.14159;

Assoziiert mit Klasse selbst durch static modifier:

Klassen-Feld (static field)

Es existiert nur eine einzige Kopie eines statischen Feldes!

Feld vom Typ double mit Namen PI und zugewiesenem Wert 3.14159

final modifier: Wert des Feldes ändert sich nach erster Zuweisung nicht mehr (Konstante)

public modifier: “jeder” kann das Feld benutzen

(visibility modifier)

(19)

Klassen-Felder (2)

Lokale Variable/Konstante: innerhalb einer Methode oder eines Blocks

Felder: Komponenten einer Klasse!

ähnlich einer globalen Variable in einem Programm Innerhalb der Klasse Circle kann PI mit seinem einfachen Namen referenziert werden;

ausserhalb: Circle.PI (eindeutige Spezifikation:

“das PI, das in Klasse Circle definiert ist”)

(20)

Klassen-Methoden (1)

public static double radiansToDegrees(double rads) return rads * 180/PI;

Assoziiert mit Klasse selbst durch static modifier:

Klassen-Methode (static method)

Aufruf (invocation) von ausserhalb der Klasse:

Circle.radiansToDegrees(2.0)

oft guter Stil Klassennamen auch innerhalb der Klasse mitanzugeben, um klar zu machen, dass eine

Klassen-Methode benutzt wird

Klassen-Methoden sind “globale Methoden” (in anderen Programmiersprachen sind alle

Prozeduren/Funktionen global), “imperativer

Programmierstil” kann in Java realisiert werden, wenn

nur Klassen-Methoden benutzt werden.

(21)

Klassen-Methoden (2)

radiansToDegree() ist eine “utility”-Methode, die in Circle definiert ist, weil sie beim Arbeiten mit Kreisen nützlich sein kann.

benutzt das Klassen-Feld PI

Klassen-Methoden können alle anderen

Klassen-Komponenten der eigenen Klasse (oder auch anderer Klassen) benutzen.

Klassen-Methoden können nicht direkt (mit this ) auf Instanz-Felder oder -methoden zugreifen! (weil die

Klassen-Methoden nicht mit einer Instanz assoziiert

sind)

(22)

Instanz-Felder (1)

public double r;

Jedes Feld, das nicht static deklariert ist, ist ein Instanz-Feld.

Instanz-Felder sind mit den Objekten der Klasse assoziiert.

Jedes Objekt der Klasse Circle hat seine eigene Kopie des Felds r . Jeder Kreis hat seinen eigenen Radius.

Innerhalb von Klassen werden Instanz-Felder durch

ihren Namen referenziert. In Code ausserhalb wird der

Name über eine Referenz zu dem Objekt, das das Feld

enthält, angegeben.

(23)

Instanz-Felder (2)

Instanz-Felder sind der Kern des objekt-orientierten Programmierens: Mit Instanz-Feldern wird ein Objekt (über seine Eigenschaften) definiert. Die Werte dieser Felder machen Objekte zu unterschiedlichen

Identitäten.

Circle c = new Circle(); // Create a new Circle object // store it in variable c

c.r = 2.0; // Assign a value to its instance field r Circle d = new Circle(); // Create a different Circle object

d.r = c.r * 2; // Make this one twice as big

(24)

Objekt-Erzeugung/Initialisierung

Erzeugung von Objekten mit new Konstruktor

Circle c = new Circle();

Ein Objekt mit Namen name vom Typ des Konstruktors ( Klasse oder Unterklasse der Klasse) wird erzeugt und durch Aufruf eines Konstruktors für diese Klasse initialisiert.

Konstruktoren können selbst definiert werden. (Kapitel

‘Konstruktoren und Vererbung’)

Wenn eine Klasse keinen eigenen Konstruktor

definiert, dann bekommt sie automatisch einen

Default-Konstruktor ohne Parameter.

(25)

Instanz-Methoden (1)

public double circumference() return 2 * PI * r;

Jede Methode, die nicht static deklariert ist, ist eine Instanz-Methode.

Instanz-Methoden arbeiten auf einer Instanz einer Klasse (auf einem Objekt) und nicht auf der Klasse selbst.

Instanz-Methoden sind der zweite wesentliche Kern der Objektorientierung.

Um eine Instanz-Methode ausserhalb der Klasse, in

der sie definiert ist, zu verwenden, muss zunächst ein

entsprechendes Objekt erzeugt werden.

(26)

Instanz-Methoden (2)

Objekte – nicht Funktionen – stehen im Mittelpunkt!

( a = area(c) vs. a = c.area() )

An die Methode area() muss kein Parameter

übergeben werden, weil alle Informationen über das Objekt implizit in der Instanz c vorhanden sind.

Instanz-Methoden können auf Klassen- und Instanz-Members zugreifen.

In circumference() ist r mit dem Wert aus der gerade betrachteten Instanz belegt.

Circle c = new Circle(); // Create a new Circle object;

// store it in variable c

c.r = 2.0; // Assign a value to its instance field r

double a = c.area(); // Invoke an instance method of the object

Referenzen

ÄHNLICHE DOKUMENTE

Methoden erwarten als erstes Argument ein Objekt der Klasse in der sie definiert wurden oder die Klasse selbst (oder eine Subklasse)..

Ein Java-Objekt kann genau auf die Nachrichten reagieren, für die Methoden in seiner Klasse deklariert sind oder für die es Methoden geerbt hat (vgl... Poetzsch-Heffter,

Schreiben Sie die Funktion inorder mit akkumulierendem Parameter für binäre

• Eine Klasse kann ein Interface auch dann implementieren, wenn sie nicht alle seine Methoden implementiert. • Die Klasse ist dann als abstrakte Klasse

Mitglieder einer Klasse sind Attribute und Methoden, die von dieser Klasse definiert werden.. Klienten sind Mitglieder

Wenn keine Parameter vorhanden, wird eine leere Parameterliste angegeben:. Parameterliste

[r]

Klasse Scanner stellt zahlreiche Methoden zur Verfügung:.. (Screenshot mit Autovervollständigungsvorschlägen von Eclipse