29
Seite 1 Informatik II Schnittstellen und Vererbung Th Letschert, THM

Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Embed Size (px)

Citation preview

Page 1: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 1

Informatik II

Schnittstellen und Vererbung

Th Letschert, THM

Page 2: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 2

Schnittstellen / Interfaces

Interface (Schnittstelle)Sprachkonstrukt in Java (und anderen modernen Progr.-Sprachen)

Sinn / Verwendung – Bringt zum Ausdruck, was Objekte einer Klasse können

Definition – ähnlich einer Klasse mit Schlüsselwort interface– beschreibt den Kopf von Methoden

Verwendung – in Klassendefinitionen

– als Erklärung (Zusicherung), dass die Klasse so definiert wird, dass alle Objekte die Methoden des Interfaces zur Verfügung stellen.

public interface Fahrkartenverkauf { FahrKarte verkaufe(Geld n);}

public class Schaffner implements Fahrkartenverkauf {

. . .

@Override public FahrKarte verkaufe(Geld n) { . . . }

. . .}

Interface: Was muss ein Fahrkartenverkäufer können

Implementierende Klasse: Objekte können als ein Fahrkartenverkäufer agieren

Page 3: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 3

Schnittstellen / Interfaces

Interface (Schnittstelle)lockert den Bezug / die Abhängigkeit zwischen Klassen:Für den Kauf einer Fahrkarte braucht ein irgendeinen Fahrkartenverkäufer!

public class Kunde {

. . .

public void bahnFahre(Fahrkartenverkauf fahrkartenVerkauf, Geld g) { FahrKarte fahrkarte = fahrkartenVerkauf.verkaufe(g); . . . }

. . .

}

public static void main(String[] args) {

. . .

Kunde kunde = new Kunde();

kunde.bahnFahre(new Schaffner(), new Geld());

. . .

}

Der Kunde ist mit jeder Art von Fahrkartenverkäufer zufrieden.

public static void main(String[] args) {

. . .

Kunde kunde = new Kunde();

kunde.bahnFahre(new Automat(), new Geld());

. . .

}

Mal löst der Kunde die Karte beim Schaffner, . . . mal am Automat.

Page 4: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 4

Schnittstellen / Interfaces

Interface (Schnittstelle)lockert den Bezug / die Abhängigkeit zwischen Klassen:Mit Gras kann man jeden Grasfresser füttern.

public static void main(String[] args) {

Bauer egon = new Bauer();

GrasFresser[] stall = new GrasFresser[3]; stall[0] = new Kuh(); stall[1] = new Schaf(); stall[2] = new Kuh();

Gras[] grasVorrat = new Gras[3]; grasVorrat[0] = new Gras(); grasVorrat[1] = new Gras(); grasVorrat[2] = new Gras();

egon.fuettern(stall, grasVorrat);}

Nun fresst schön ihr GrasFresser!

public class Bauer { public final void fuettern(GrasFresser[] stall, Gras[] grasVorrat) { int i = 0; for (GrasFresser fresser : stall) { fresser.fresse(grasVorrat[i++]); } }}

Bauer egon

class Kuh implements GrasFresser { . . . @Override public void fresse(Gras g) { … } . . .}

class Schaf implements GrasFresser { . . . @Override public void fresse(Gras g) { … } . . .}

Page 5: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 5

Schnittstellen / Interfaces

UML-Diagramm Klasse - Interface (Schnittstelle)

UML

– Unified Modeling Language– (nicht nur in der Informatik) wichtige Diagrammtechnik

Klassendiagramm

– Darstellung von Klassen und Interfaces

Schaf

GrasFresser

<<realize>>

Kuh

<<realize>>

Schaffner

Fahrkartenverkauf

veraufe(Geld) : Fahrkarte

<<realize>>

Automat

<<realize>>

Klassendiagramm mit zwei Klassen und einem Interface

Im Piktogramm von Klassen und Interfaces könne die Methoden aufgelistet werden.

Page 6: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 6

Schnittstellen / Interfaces

Das Konzept Interface ist sehr wichtig für einen modernen Programmierstil in Java und anderen modernen OO-Sprachen.

– Ein Interface trennt Verhalten / Verwendbarkeit von Implementierungen.

– Ein Interface definiert einen Typ: D.h. Eine Verwendungsmöglichkeit für Objekte !

– Eine Klasse, die ein Interface implementiert, kann Objekte erzeugen, die entsprechend verwendbar sind.

– Variablen und Parameter sollten als Typ (wenn möglich) ein Interface haben. Der Typ einer Variablen / eines Typs kann so die minimale Anforderung an deren Inhalte (Werte) formulieren.

Page 7: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 7

Objektorientierung

OO „philosophisch“

These der Objektorientierung

Die Konzepte der Objektorientierung sind

• nicht nur nützlich bei der Programmierung,

• sie entsprechen der Organisation der realen Welt

• und sind damit als Basis für alle IT-Lösungen ideal geeignet.

Page 8: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 8

Modellbildung objektorientiert

Objektorientierte Datenmodellierung: Klassen und Objekte

Gegebenheiten der Welt werden verstanden als Klassen – Arten von Dingen Objekte – Individuen

Klassifikation Analytisch: Vom Individuellen zum Allgemeinen

Klassifizierung von existierenden ObjektenFifi, Struppi => Hund

Konstruktiv: Vom Allgemeinen zum IndividuellenEigenschaften definieren Objekte mit diesen EigenschaftenMensch der studiert (besondere Art von Mensch)

=> Student

Hund

Mensch

Page 9: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 9

Modellbildung objektorientiert

Objektorientierte Datenmodellierung: Klassen

KlasseDefiniert eine Kollektion von Objekten mit

gemeinsamer Struktur (Attribute)

gemeinsamem Verhalten (Methoden)

gemeinsamen Beziehungen zu anderen Objekten

Definiert einen Mechanismus um Objekte zu erzeugen Konstruktor

Page 10: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 10

Modellbildung objektorientiert

Objektorientierte Datenmodellierung: Klassen

Klassendiagramm: Darstellung von Klassenmit ihren Methoden und Attributen

und den Beziehungen einer Klasse zur anderen

der Objekte der einen Klasse zu den Objekten anderer Klassen

Kunde

name

Konto

nr

einzahlen()abheben()

besitzt

1 *

Jeder Kunde hat einen NamenJedes Konto hat eine NummerJeder Kunde besitzt beliebig viele KontenJedes Konto hat genau einen Besitzer

Page 11: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 11

Modellbildung objektorientiert

Objektorientierte Datenmodellierung: Vererbung

KlasseDefiniert eine Kollektion von Objekten

Unterklasse(Subklasse / abgeleitete Klasse)

Definiert eine Kollektion von Objekten mit zusätzlichen Attributen und / oder zusätzlichen Methoden

Page 12: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 12

Modellbildung objektorientiert

Objektorientierte Datenmodellierung: Vererbung

Klasse und UnterklasseAllgemeines und Spezialisierung : „ist ein“

Person

Student Angestellter

ET MB AdminstratorDozent

ist ein

abgeleitete Klasse,

Subklasse

Basisklasse, Oberklasse, Superklasse

Basisklasse

Subklasse

Page 13: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 13

Modellbildung objektorientiert

Objektorientierte Datenmodellierung: Vererbung

Vererbung ist ein natürliches / reales Konzept

aus Herold, Lurz, Wohlrab: Grundlagen der Informatik

Page 14: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 14

Modellbildung objektorientiert

Objektorientierte Datenmodellierung: Vererbung

Vererbung : Übernehmen („erben“) und Erweitern der Eigenschaften

Person

nameadresse

essen()schlafen()

Student

matrikelnr

studieren()

Angestellter

personalnr

arbeiten()

Personen - haben name und adresse - können essen, schlafen

Studenten - haben name, adresse und matrikelnr - können essen, schlafen und studieren

Angestellte - haben name, adresse und personalnr - können essen, schlafen und arbeiten

Page 15: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 15

Modellbildung objektorientiert

Basisklasse oder Interface

Interface Klassen mit gemeinsamem Interface haben Instanzen mit gemeinsamen Schnittstellen (Methoden mit gleichen Namen, Parametertypen und Ergebnistypen.) Jedes Objekt jeder dieser Klassen kann an Stelle jedes anderen treten.Implementierung: „kann als … verwendet werden.“Beispiel: Fahrkartenverkäufer ~> Automat und Schaffner

Basisklasse

Klassen mit gemeinsamer Basisklasse haben Instanzen mit Eigenschaften (Methoden oder Attribute).Jedes Objekt jeder dieser Klassen hat Gemeinsamkeiten mit jedem anderen.Ableitung: „ist eine besondere Art von ...“Beispiel: Mensch ~> Schaffner, Student

Page 16: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 16

Programmierung objektorientiert

Objektorientierte Programmierung: Vererbung

Vererbung : Übernehmen („erben“) und Erweitern der Eigenschaften

Person

nameadresse

essen()schlafen()

Student

matrikelnr

studieren()

Angestellter

personalnr

arbeiten()

class Person { private String name; private Adresse adresse;

public Person(String name, Adresse adresse) { this.name = name; this.adresse = adresse; } public void essen() { System.out.println("Speise nach Menschenart"); } public void schlafen() { System.out.println("Schlafe nach Menschenart"); }}

class Student extends Person { private int matrikelNr;

public Student(String name, Adresse adresse, int matrikelNr) { super(name, adresse); this.matrikelNr = matrikelNr; } public void essen() { System.out.println("Speise wie ein Student"); } public void schlafen() { System.out.println("Schlafe wie ein Student"); }}

class Angestellter extends Person { private int personalNr;

public Angestellter(String name, Adresse adresse, int personalNr) { super(name, adresse); this.matrikelNr = personalNr; } public void arbeiten() { System.out.println("Arbeite wie ein Angestellter"); }}

Aufruf des Konstruktors der Ober- (Super-) Klasse

Page 17: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 17

Programmierung objektorientiert

Vererbung

Vererbung : Übernehmen („erben“) und Erweitern der Eigenschaften

class Person { private String name; private Adresse adresse;

public Person(String name, Adresse adresse) { this.name = name; this.adresse = adresse; } public void essen() { System.out.println("Speise nach Menschenart"); } public void schlafen() { System.out.println("Schlafe nach Menschenart"); }}

class Student extends Person { private int matrikelNr;

public Student(String name, Adresse adresse, int matrikelNr) { super(name, adresse); this.matrikelNr = matrikelNr; } public void essen() { System.out.println("Speise wie ein Student"); } public void schlafen() { System.out.println("Schlafe wie ein Student"); }}

class Angestellter extends Person { private int personalNr;

public Angestellter(String name, Adresse adresse, int personalNr) { super(name, adresse); this.matrikelNr = personalNr; } public void arbeiten() { System.out.println("Arbeite wie ein Angestellter"); }}

Jedes Objekt der Klasse Person hat einen Namen und eine Adresse

Jedes Objekt der Klasse Student hat einen Namen, eine Adresse und eine Matrikelnummer. Name und Adresse sind vorhanden aber nicht direkt zugreifbar.

Jedes Objekt der Klasse Angestellter hat einen Namen, eine Adresse und eine Personalnummer. Name und Adresse sind vorhanden aber nicht direkt zugreifbar.

Page 18: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 18

Programmierung objektorientiert

Sichtbarkeit Protected

Protected: kann auch von Unterklassen zugegriffen werden.

class Person { protected String name; protected String adresse;

public Person(String name, String adresse) { this.name = name; this.adresse = adresse; } public void essen() { System.out.println(name + " speist nach Menschenart"); } public void schlafen() { System.out.println(name + " Schlaeft nach Menschenart"); }}

class Student extends Person { private int matrikelNr;

public Student(String name, String adresse, int matrikelNr) { super(name, adresse); this.matrikelNr = matrikelNr; } public void essen() { System.out.println(name + " speist wie ein Student"); } public void schlafen() { System.out.println(name + " schlaeft wie ein Student"); }}

Person karl = new Person("Karl", "Waldweg 25");Student emil= new Student("Emil", "Stadtstrasse 12", 12345); karl.essen();karl.schlafen(); emil.essen();emil.schlafen();

Karl speist nach MenschenartKarl Schlaeft nach MenschenartEmil speist wie ein StudentEmil Schlaeft wie ein Student

Page 19: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 19

Modellbildung objektorientiert

Abstrakte Klasse: zwischen Basisklasse und Interface

abstrakte Klassen mischen das Konzept Interface und Basisklasse.

Eine abstrakte Klasse kann völlig un-implementierte Methoden definieren

(wie ein Interface) und gleichzeitig Gemeinsames für alle abgeleiteten Klassen definieren

(wie eine Basisklasse)

public abstract class Auto {

private double spritmenge;

protected abstract void beschleunigen(double gas); protected abstract double verbrauch();

public void gasgeben(int pedalstellung, double dauer) { spritmenge = spritmenge - pedalstellung*verbrauch()*dauer; beschleunigen(pedalstellung*verbrauch()*dauer); }

}

Gemeinsamkeit aller Instanzen aller Ableitungen

Spezielle Eigenschaften unterschiedlicher Ableitungen.

Gemeinsamkeit aller Instanzen aller Ableitungen, beruht auf speziellen Eigenschaften unterschiedlicher Ableitungen.

Beispiel Einsatz einer abstrakten Methode: protected abstract muss in Ableitungen definiert werden, wird

aber immer gleich genutzt.

Auto{abstract}

spritmenge

verbrauch()gasgeben()

Page 20: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 20

Programmierung objektorientiert

Statischer und dynamischer Typ

statischer Typ: Typ der Variablen und Parameter

dynamischer Typ: Typ der Objekte

Zugriffsprinzip bei Java der statische Typ entscheidet über den Zugriff bei Attributen (Objektvariablen) der dynamische Typ entscheidet über den Zugriff bei Methoden

class Basis { int attribut = 0; int getAttribut () { return attribut; }}

class Abgeleitet extends Basis { int attribut = -10; int getAttribut () { return attribut; }}

Basis basis = new Basis();Abgeleitet abgeleitet = new Abgeleitet();Basis abgeleitetInBasis = new Abgeleitet();

System.out.println("basis.attribut = " + basis.attribut);System.out.println("abgeleitet.attribut = " + abgeleitet.attribut);System.out.println("abgeleitetInBasis.attribut = " + abgeleitetInBasis.attribut);System.out.println();System.out.println("basis.getAttribut() = " + basis.getAttribut());System.out.println("abgeleitet.getAttribut() = " + abgeleitet.getAttribut());System.out.println("abgeleitetInBasis.getAttribut() = " + abgeleitetInBasis.getAttribut());

basis.attribut = 0abgeleitet.attribut = -10abgeleitetInBasis.attribut = 0

basis.getAttribut() = 0abgeleitet.getAttribut() = -10abgeleitetInBasis.getAttribut() = -10

Page 21: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 21

Programmierung objektorientiert

Zugriffsprinzip

Zugriffsprinzip bei Java der statische Typ entscheidet über den Zugriff bei Attributen (Objektvariablen) der dynamische Typ entscheidet über den Zugriff bei Methoden

Allgemein Überdecken: der statische Typ entscheidet über den Zugriff Überschreiben: der dynamische Typ entscheidet über den Zugriff

das Überschreiben wird auch Polymorphismus genannt.

In C++ kann man stets zwischen Überdecken und Überschreiben wählen.Java-Prinzip: mach es einfach und so, dass es von Programmierern intuitiv richtig verwendet wird – auch wenn sie es nicht wirklich verstehen.

Page 22: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 22

Modellbildung objektorientiert

Objektorientierte Datenmodellierung: Polymorphismus

Vererbung : Übernehmen („erben“) und Erweitern oder Überschreiben der Eigenschaften

Personen - haben name - können essen

Studenten - haben name und matrikelnr - können essen und trinken : sie trinken aber auf besondere (Studenten-) Art

Student

matrikelnr

trinken()

Person

name

essen()trinken()

Polymorphismus

Page 23: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 23

Objektorientierung im Programmcode

Objektorientierte Programmierung

Polymorphismus: Klasse und Subklasse mit überschriebener Methode

Student

matrikelnr

trinken()

Person

name

essen()trinken()

Person karla = new Person('Karla')Student emil = new Student('Emil', 4711)

karla.essen()emil.essen()

karla.trinken()emil.trinken()

mapfmapf

schluckgluck gluck gluck

Personen - haben einen Namen - können essen und trinken

Studenten - haben einen Namen (weil sie Personen sind) - können essen und trinken (weil sie Personen sind) allerdings trinken sie anders als Personen allgemein trinken: sie trinken nach Studentenart.

karla ist eine Person mit allem was Personen haben und können.emil ist eine Person mit allem was Personen haben und können.

Page 24: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 24

Objektorientierung im Programmcode

Objektorientierte Programmierung

Polymorphismus: Klasse und Subklasse mit

überschriebener Methode

Student

matrikelnr

trinken()

Person

name

essen()trinken()

class Person { private String name;

public Person(String name) { this.name = name; } public void essen() { System.out.println “mapf“); } public void trinken() { System.out.println(“schluck“); }}

class Student extends Person { private int matrikelnr;

public Student(String name, int matrikelnr) { super(name); this.matrikelnr = matrikelnr; }

public void trinken() { System.out.println(“gluck gluck gluck“); }}

redefiniert, überschrieben

Page 25: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 25

Objektorientierung im Programmcode

Objektorientierte Programmierung

Polymorphismus : Klasse und Subklasse mit überschriebener Methode

Polymorphismus = Vielgestaltigkeit

Objekte die für Personen gehalten werdenkönnen sich „anders“ verhalten

sie verhalten sich eventuell wie Studenten

Student

matrikelnr

trinken()

Person

name

essen()trinken()

So wie der trinkt,muss das ein Student sein.

Page 26: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 26

Objektorientierung im Programmcode

Objektorientierte Programmierung

Polymorphismus : Klasse und Subklasse mit überschriebener Methode

Aus Sicht des Benutzers, der nicht weiß zu welcher (Unter-) Art ein Objekt gehört, treten die Objekte „vielgestaltig“ / polymorph auf.

Student

matrikelnr

trinken()

Person

name

essen()trinken()

So wie der trinkt,muss das ein Student sein.

public class Bar {

public void fuelleAb(Person p) { while(true) { p.trinken(); } }}

public static void main(String[] args) {

Person hugo = new Person("Hugo"); Student karla = new Student("Karla", 4711);

Bar kakadu = new Bar(); kakadu.fuelleAb(hugo); kakadu.fuelleAb(karla);}

gluck gluck

schluck

schluck

gluck gluck

alle Personen zugelassen, natürlich auch Studenten

Page 27: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 27

Objektorientierung im Programmcode

Objektorientierte Programmierung

Polymorphismus : Klasse und Subklasse mit überschriebener Methode

Unterschiedliche Benutzer haben unterschiedliche Erwartungen an die Art (Klasse / Typ) des benutzten Objekts.

Student

matrikelnr

trinken()

Person

name

essen()trinken()

kakadu: Bar

Jeder ist will-kommen

der trinken kann

Objekte der Klasse Person und Objekte jeder Unterklasse sind in einer Bar

willkommen zum Abfüllen.

letschert: Dozent

Jeder Student ist willkommen.

Objekte der Klasse Student und Objekte jeder Unterklasse sind in einem

Unterricht willkommen.

Page 28: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 28

Objektorientierung im Programmcode

Objektorientierte Programmierung

Polymorphismus : Klasse und Subklasse mit überschriebener Methode

Unterschiedliche Benutzer haben unterschiedliche Erwartungen an die Art (Klasse / Typ) des benutzten Objekts.

Student

matrikelnr

trinken()

Person

name

essen()trinken()

letschert: Dozent

public class Dozent extends Person { public Dozent(String name) { super(name); } public void unterricht(Student student) { ··· }} public static void main(String[] args) {

Person hugo = new Person("Hugo"); Student karla = new Student("Karla", 4711); Student claudi = new MBStudent("Claudi", 4712); Dozent letschert = new Dozent("Letschert");

Bar kakadu = new Bar(); kakadu.fuelleAb(hugo); kakadu.fuelleAb(karla); kakadu.fuelleAb(claudi);

letschert.unterricht(hugo); letschert.unterricht(karla); letschert.unterricht(claudi);}

Studenten jeder Art sind zugelassen, Personen allgemein nicht.

kakadu: Bar

Page 29: Informatik II - homepages.thm.dehg51/Veranstaltungen/Informatik-2-12/Folien/... · Seite 4 Schnittstellen / Interfaces Interface (Schnittstelle) lockert den Bezug / die Abhängigkeit

Seite 29

Objektorientierung

Objektorientierte Entwicklung

Die Objektorientierte Entwicklung beruht auf folgenden GrundgedankenUnterscheidung Klasse und ObjektVererbung:

Klassen können oft in Ober- und Unterklasse unterschieden werden Eine Klasse B ist genau dann eine Unterklasse einer Klasse A, wenn

alle Objekte der Klasse B all das haben, wissen und könnenwas alle Objekte der Klasse A haben, wissen, können.

Achtung: das ist so ähnlich wie eine Teilmengen-Relation aber nicht das gleiche!

Polymorphismus Der Benutzer eines Objekts nutzt es es mit dem Wissen über die Klasse

zu der es gehört, die genaue Unterklasse ist ihm nicht bekannt. Die Klasse definiert das grundsätzliche Verhalten auf das der Benutzer

sich verlassen kann Feinheiten im Verhalten ergeben sich aus der Unterklasse. Sie sind für

den Benutzer des Objekts nicht relevant