2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem...

56
Java f¨ ur Computerlinguisten 2. Objektorientierte Programmierung Christian Scheible Institut f¨ ur Maschinelle Sprachverarbeitung 28. Juli 2009 Christian Scheible Java f¨ ur Computerlinguisten 28. Juli 2009 1 / 56

Transcript of 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem...

Page 1: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Java fur Computerlinguisten2. Objektorientierte Programmierung

Christian Scheible

Institut fur Maschinelle Sprachverarbeitung

28. Juli 2009

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 1 / 56

Page 2: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Heute:

1 Besprechung der Ubungen vom Montag

2 Objektorientierte Programmierung

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 2 / 56

Page 3: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Objektorientierte Programmierung

• Grundlagen

• Klassen

• Sichtbarkeit

• Statische Methoden/Attribute

• Vererbung

• Schnittstellen

• Wrapper

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 3 / 56

Page 4: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Grundlagen

Warum Klassen/Objekte?

• Anschaulichkeit: Menschen sind mit Objekten vertraut

• Zusammenfassung von Funktionen und Daten

• Wiederverwendbarkeit• Klasse: Vorlage• Objekt:

Bisher• Klasse war nur Rahmen fur unsere Programme

• Nicht benutzt: Klasse als Vorlage fur Objekte

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 4 / 56

Page 5: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Grundlagen

Aufbau eines Objekts

void aufbauen();void ablegen(Object gegenstand, int x, int y)Object herausnehmen(int x, int y);...

Color farbe;float hoehe;float breite;float tiefe;...

class Regal

Attribute(Variablen)

Methoden(Funktionen)

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 5 / 56

Page 6: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Grundlagen

Begriffe in der Objektorientierten Programmierung

• Abstraktion

• Kapselung

• Polymorphie

• Vererbung

• Feedback

• Persistenz

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 6 / 56

Page 7: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Grundlagen

Abstraktion• Wiederverwendbare Vorlagen

→ Objekt: Instanz einer Klasse

class Regal

Regal braunesRegal Regal weissesRegal

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 7 / 56

Page 8: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Grundlagen

Kapselung

• Daten sind im Objekt enthalten

• Daten sind von außen nicht zuganglich

• Objekt bietet Methoden zur Veranderung der Daten

Wozu?• Interne Variablen, die der Benutzer der Klasse nicht braucht

• Variablen, die der Benutzer nicht verandern darf

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 8 / 56

Page 9: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Grundlagen

public void fuettern();private void wachsen (int laenge);...

private float gewicht;private float alter;...

class SchweinAttribute(Variablen)

Methoden(Funktionen)

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 9 / 56

Page 10: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Grundlagen

Polymorphie

• Methoden reagieren verschieden abhangig von• Aufruf• Klassenzugehorigkeit

Feedback

Interaktion zwischen Objekten

Persistenz

Objekt existiert so lange, bis es zerstort wird

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 10 / 56

Page 11: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Grundlagen

Vererbung

• Neue Klassen konnen unter Benutzung alter Klassen definiert werden

• Die neue Klasse (Tochterklasse) erhalt alle Attribute und Methodender Mutterklasse

class Fahrzeug

class Moebel

class Regal class Sitzmoebel

class Stuhl class Bank

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 11 / 56

Page 12: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Klassen

Attribute

class Buch

{

String name; //

String author; // Attribute

int pubDate; //

}

Attribut: Variable, die dem Objekt zugehort.

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 12 / 56

Page 13: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Klassen

Methoden

class Buch

{

String name;

String author;

int pubDate;

void read() // Eine Methode

{

// ...

}

int countPages() // Noch eine Methode

{

// ...

}

}

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 13 / 56

Page 14: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Klassen

Instanzen

class Buecherei {

public static void main (String argv[])

{

Buch buch1 = new Buch();

Buch buch2 = new Buch();

// ...

buch1.name = "The Catcher in the Rye";

buch1.author = "J. D. Salinger";

buch1.pubDate = 1951;

buch1.read();

}

}

Punkt (.) fur Zugriff auf Inhalt des Objekts

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 14 / 56

Page 15: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Klassen

Konstruktor

Was passiert beim Aufruf von new Buch()?Der Konstruktor liefert ein neues Objekt.

class Buch {

String name;

Buch () {} // Konstruktor ohne Argument

Buch (String name) // Konstruktor mit Argument

{

this.name = name;

}

}

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 15 / 56

Page 16: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Klassen

this• this: Referenz fur das Objekt, in dem wir uns befinden

• Beispiel: Unterscheidung zwischen Parameter und Objektvariable

class Buch

{

String name;

void setName (String name)

{

this.name = name;

}

}

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 16 / 56

Page 17: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Sichtbarkeit

Einschrankung des Zugriffs von anderen Klassen aus→ Kapselung

Sichtbarkeitsstufen

• Offentlich (public)

• Privat (private)

• Paketsichtbar

• Geschutzt (protected)

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 17 / 56

Page 18: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Sichtbarkeit

Offentlich

public: Auf das Element darf von außen ohne Einschrankung zugegriffenwerden.

com.ikea.Regalpublic void aufbauen();

BeliebigeAndereKlasse...

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 18 / 56

Page 19: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Sichtbarkeit

Privat

private: Auf das Element darf nur aus der selben Klasse zugegriffenwerden.

com.ikea.Regalprivate void aufbauen();

X de.aldi.Aushilfe...

Xcom.ikea.Mitarbeiter

...

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 19 / 56

Page 20: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Sichtbarkeit

paketsichtbar

Standard: Auf das Element darf nur aus dem selben Paket zugegriffenwerden, aber nicht aus anderen Paketen.In der Praxis: Wenn die Klasse im gleichen Verzeichnis liegt.

com.ikea.Regalvoid aufbauen();

com.ikea.Mitarbeiter...

X de.aldi.Aushilfe...

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 20 / 56

Page 21: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Sichtbarkeit

Geschutzt

protected: Auf das Element darf der selben Klasse und davonabgeleiteten Klassen zugegriffen werden.

→ Vererbung

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 21 / 56

Page 22: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Sichtbarkeit

class Buch

{

private String name;

boolean gelesen;

public void lesen ()

{

gelesen = true;

}

}

class Bibliothek

{

public static void main (String [] args)

{

Buch buch1 = new Buch();

buch1.lesen();

buch1.gelesen = false; // erlaubt

buch1.name = "The Third Policeman"; // nicht erlaubt! --> Compilerfehler

}

}

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 22 / 56

Page 23: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Statische Attribute

class Fahrrad {

String marke;

Fahrrad (String marke) {

this.marke = marke;

}

}

Normale Variable• Variable gehort zu einem Objekt

• Jedes Objekt bekommt eine eigene Instanz der Variable

• Wert der Variablen kann in jedem Objekt unterschiedlich sein

• Beispiel: String marke;

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 23 / 56

Page 24: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Statische Attribute

class Fahrrad {

String marke;

static int anzahl_fahrraeder = 0; // statische Variable

Fahrrad (String marke) {

this.marke = marke;

anzahl_fahrraeder += 1;

}

}

Statische Variable• Variable gehort zu einer Klasse

• Jedes Objekt benutzt die selbe Instanz der Klasse

• Wert der Variablen ist in jedem Objekt gleich

• Beispiel: static int anzahl_fahrraeder (Instanzzahler)

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 24 / 56

Page 25: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Statische Methoden

class Fahrrad {

static boolean equal (Fahrrad f1, Fahrrad f2) {

// ...

}

void fahren () {

// ...

}

}

• Normaler Aufruf: f1.fahren()→ Methode einem bestimmten Objekt zugeordnet f1, das vorher erstellt

worden sein muss

• Statischer Aufruf: Fahrrad.equal(f1, f2)→ Methode keinem bestimmten Objekt zugeordnet, sondern der Klasse

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 25 / 56

Page 26: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Benutze vorhandene Klasse als Grundlage fur neue Klassen

class Fahrzeug

class Moebel

class Regal class Sitzmoebel

class Stuhl class Bank

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 26 / 56

Page 27: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Syntax

class Tochterklasse extends Mutterklasse {}

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 27 / 56

Page 28: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

class Moebel

{

float gewicht;

void aufbauen ()

{

System.out.println("Wir bauen ein Moebelstueck!");

}

}

class Regal extends Moebel // Regal erbt von Moebel

{

float ablagevolumen;

Regal (float gewicht, float ablagevolumen)

{

this.gewicht = gewicht; // Variablen von Moebel werden uebernommen

this.ablagevolumen = ablagevolumen;

}

void aufbauen ()

{

System.out.println("Wir bauen ein Regal!");

}

}

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 28 / 56

Page 29: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Konstruktor• Konstruktoren werden nicht mitvererbt

• Zugriff auf den Konstruktor der Mutterklasse?

class Moebel

{

Moebel ()

{

System.out.print("Moebel wird gebaut")

}

}

class Regal extends Moebel // Regal erbt von Moebel

{

Regal ()

{

super();

}

}

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 29 / 56

Page 30: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Typhierarchie

Object↑

Moebel↑

Schrank

• Object ist immer die oberste Klasse

• Standard: Klasse erbt automatisch von Object

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 30 / 56

Page 31: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Automatische Typanpassung

Regal regal1 = new Regal();

Moebel regal2 = new Regal();

Object regal3 = new Regal();

Moebel moebel1 = new Moebel();

Object moebel2 = new Moebel();

• Erlaubt: Vom niedrigeren zum hoheren Typ

• Verboten: Vom hoheren zum niedrigeren Typ

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 31 / 56

Page 32: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Typecasting

Object regal1 = new Regal();

Moebel regal2 = (Moebel) regal1;

Regal regal3 = (Regal) regal1;

Moebel regal4 = (Regal) regal1;

• Typ testen: variable instanceof Typ

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 32 / 56

Page 33: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Methoden uberschreiben• Mutterklasse und Tochterklasse haben Methode mit gleicher

Signatur:

→ Methode der Tochterklasse uberschreibt die der Mutterklasse

• Einschrankungen• Sichtbarkeit muss gleich oder schwacher sein• Ruckgabetyp kann verschieden sein

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 33 / 56

Page 34: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

class A

{

public String toString ()

{

return "Instanz von Klasse A";

}

}

class B extends A

{

public String toString ()

{

return "Instanz von Klasse B";

}

}

toString(): Wird benutzt, wenn System.out.print aufgerufen wird.

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 34 / 56

Page 35: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Annotation: @Override

@Override public String toString ()

{

return "Ich bin es."

}

• Bedeutung: Die annotierte Methode muss eine andere uberschreiben→ Verhindert Fehler, z.B.

@Override public String tostring ()

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 35 / 56

Page 36: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Finale Methoden

public final String getName ()

{

return

}

final: Methode darf von Unterklassen nicht uberschrieben werden

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 36 / 56

Page 37: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Finale Klassen

final class Regal extends Moebel

{

// ...

}

final: Von dieser Klasse darf man nicht erben

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 37 / 56

Page 38: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Dynamische Bindung

→ Polymorphie

• Methoden werden mitvererbt

• Geerbte Methoden konnen wir uberschreiben

• Methoden konnen nicht wieder verloren werden

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 38 / 56

Page 39: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Vererbung

Dynamische Bindung

Regal moebel1 = new Regal();

Moebel moebel2 = new Regal();

moebel1.aufbauen();

moebel2.aufbauen();

• Prufung zur Laufzeit: welche Implementierung von aufbauen() sollbenutzt werden

• Variablen haben die Typen Object und Moebel

• Benutzt wird die Methode aus Regal

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 39 / 56

Page 40: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Abstrakte Klassen

• Bisher: Wir konnen von jeder Klasse ein Objekt erstellen.

• Problem: Manchmal nicht so sinnvoll.

• Beispiel: Was fur ein Objekt erzeugt Moebel?

• Losung: Abstrakte Klasse

abstract class Moebel {}

• Verboten:

Moebel moebel1 = new Moebel();

• Weiter Erlaubt:

Moebel moebel1 = new Regal();

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 40 / 56

Page 41: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Abstrakte Klassen

abstract class Moebel

{

String name;

float gewicht;

public abstract void aufbauen ();

public void setName(String name)

{

this.name = name;

}

}

• Abstrakte Methode aufbauen():→ Unterklasse muss diese Methode implementieren

• Nicht-abstrakte Methoden durfen vorkommen (setName())

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 41 / 56

Page 42: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Abstrakte Klassen

Umgang mit abstrakten Methoden aus der Oberklasse

• Implementieren

• Abstrakt lassen (unsere Klasse ist selbst abstrakt!)

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 42 / 56

Page 43: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Interfaces (Schnittstellen)

class Eins {

void x() { System.out.println("A") }

}

class Zwei {

void x() { System.out.println("B") }

}

class EinsZwei extends Eins, Zwei { // sehr verboten!

}

• Abstrakte Klasse bestimmt Voraussetzungen, die Unterklasse erfullenmuss

• Idee: Von mehreren Klassen erben, um Voraussetzungen zu verbinden• Problem: Welche Methode wird vererbt bei gleicher Signatur?

(Oben: Methode x)→ Mehrfachvererbung verboten!

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 43 / 56

Page 44: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Interfaces (Schnittstellen)

Losung: Interfaces

interface KaufbarerGegenstand

{

public static int konstante = 0;

public void kaufen();

}

Unterschied zu abstrakten Klassen:

• Interface darf keine Implementierung enthalten

• Eine Klasse darf von mehreren Interfaces erben(eigentlich: Eine Klasse darf mehrere Interfaces implementieren)

→ implements statt extends

• Variablen mussen static und final sein

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 44 / 56

Page 45: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

abstract class Moebel

{

float gewicht;

abstract void aufbauen ();

}

interface Buyable

{

void kaufen();

}

class Regal extends Moebel implements Buyable

{

void aufbauen ()

{

System.out.println("baue Regal ...");

}

public void kaufen()

{

System.out.println("Kaufe Regal zum Preis von" + this.preis);

}

}

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 45 / 56

Page 46: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Generische Klassen

• Generisch: Bekannt aus Ada?

• Implementierung der Klasse abhangig vom Typ

class Liste<T> {

public void einfuegen(T wert){

// ...

}

}

Liste<Integer> l1 = new Liste<Integer>();

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 46 / 56

Page 47: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Arbeiten mit Objekten

Getter/Setter

• Manchmal wollen wir den direkten Zugriff auf Attribute nicht erlauben

• Kontrollierter Zugriff

• Methoden fur Zugriff• Auslesen: get()• Schreiben: set()

class ComplexNumber {

private float real, imaginary;

public float getReal() {

return real;

}

public void setReal(float real) {

this.real = real;

}

}Christian Scheible Java fur Computerlinguisten 28. Juli 2009 47 / 56

Page 48: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Arbeiten mit Objekten

toString

• Identifikation eines Objekts

• Gibt Namen und Eigenschaften des Objekts aus

• Gibt nicht unbedingt den kompletten Inhalt aus

• Ruckgabetyp: String, Sichtbarkeit: public

class ComplexNumber {

float real, imaginary;

@Override public String toString()

{

return getClass().getName() +

String.format("[real=%f,imaginary=%f]", real, imaginary);

}

}

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 48 / 56

Page 49: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Arbeiten mit Objekten

class ComplexNumber {

float real, imaginary;

@Override public String toString()

{

return getClass().getName() +

String.format("[real=%f,imaginary=%f]", real, imaginary);

}

}

Aufruf

ComplexNumber c1 = new ComplexNumber();

System.out.println(c1); // geht wegen toString

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 49 / 56

Page 50: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Arbeiten mit Objekten

equals

• Methode stellt Gleichheit mit einem anderen Objekt fest

• Beispiel: "a".equals("b")

• Ruckgabetyp: boolean, Argumenttyp: Object

class ComplexNumber {

float real, imaginary;

@Override public boolean equals (Object obj)

{

ComplexNumber that = (ComplexNumber) obj;

return (this.real == that.real) &&

(this.imaginary == that.imaginary);

}

}

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 50 / 56

Page 51: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Arbeiten mit Objekten

• Zuweisung mit = bei Referenztypen erzeugt keine Kopie

• Andere Methode zur Vervielfaltigung notig

Copy-Konstruktor

class ComplexNumber {

float real, imaginary;

ComplexNumber (ComplexNumber that)

{

this.real = that.real;

this.imaginary == that.imaginary;

}

}

ComplexNumber a = ComplexNumber(1,3);

ComplexNumber b = ComplexNumber(a)

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 51 / 56

Page 52: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Arbeiten mit Objekten – Garbage Collection

Idee: Wir wollen Speicher sparen

• Daten bleiben so lange im Speicher, bis sie nicht mehr gebrauchtwerden

• Problem: Wann werden sie nicht mehr gebraucht?

Losung: Garbage Collector

• Sucht regelmaßig nach solchen Objekten

• Methode: Generationeller Zahler

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 52 / 56

Page 53: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Arbeiten mit Objekten

finalize• Garbage Collector loscht uberflussige Objekte

• Was passiert beim Loschen?

→ finalize

• Exceptions werden ignoriert, Garbage Collector lauft weiter

• Objekte mit finalize kosten Zeit!

• Nicht vergessen: super.finalize()

class X {

public void finalize() {

super.finalize();

System.out.println("Loesche ein X");

}

}

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 53 / 56

Page 54: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Wrapper

• Wrapper: Klasse, die etwas umschließt (z.B. Objekt, andere Klasse)

• Ziel: Bestimmte Spezifikationen erfullen, Methoden

• Primitive Wrapper: Fur die primitiven Datentypen (int, float, ...)

→ Dadurch als Objekte verfugbar!

• Autoboxing/-unboxing: Java konvertiert primitive Variablen zuObjekten, wenn notig

Primitiv Wrapperbyte Byteshort Shortint Integerlong Longfloat Floatdouble Doublechar Characterboolean Boolean

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 54 / 56

Page 55: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Wrapper

Methoden (Integer)

equals() GleichheitintValue() Konversion nach inttoString() Konversion nach StringparseInt() Konversion von String

Integer.toString(new Integer(70)); // "70"

Integer.parseInt("12345"); // 12345

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 55 / 56

Page 56: 2. Objektorientierte Programmierung Christian Scheible · • Wert der Variablen ist in jedem Objekt gleich • Beispiel: static int anzahl_fahrraeder (Instanzz¨ahler) Christian

Literatur

Sun.

JDK 6 Documentation.

http://java.sun.com/javase/6/docs/.

Sun.

The Java Tutorials.

http://java.sun.com/docs/books/tutorial/.

C. Ullenboom.

Java ist auch eine Insel.

Galileo Press, 2003.

http://openbook.galileocomputing.de/javainsel8/.

Christian Scheible Java fur Computerlinguisten 28. Juli 2009 56 / 56