Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Einführung in die Programmierung mit Java

Ähnliche Präsentationen


Präsentation zum Thema: "Einführung in die Programmierung mit Java"—  Präsentation transkript:

1 Einführung in die Programmierung mit Java
10. Vorlesung WS 2001/2002

2 Übersicht Besprechung der Übungsaufgabe Polymorphie
Dynamisches Binden Vererbung Fortsetzung Abstrakte Klassen T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02

3 Übungsaufgabe vom 9. 1. Ergänzen Sie die vorgestellten Klassen „Person“ und „Student“ um die Unterklassen „Dozent“ und „Verwaltungsangestellter“. Die Unterklasse „Dozent“ soll dabei noch weiter in „Professor“ und „Assistent“ unterschieden werden. Alle Klassen sollen eine Methode void ausgeben() besitzen, die den Inhalt aller Instanzvariablen ausgibt. (Die Methoden ausgeben() der Unterklasse überlagern dann die gleichnamige Methode der Oberklasse(n)) Erzeugen Sie ein Objekt jeder Klasse, initialisieren Sie sie mit Beispieldaten und geben Sie die Objekte anschliessend mittels der Methode ausgeben() aus. T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02

4 Lösung Schritt 1: Klassendiagramm in UML
Student Dozent Verwaltungs-angestellter Person Professor Assistent spezieller T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02

5 Lösung Schritt 2: Implementierung
Entwurfsentscheidungen Die Methode ausgeben() von Unterklassen soll zur Ausgabe aller geerbten Instanzvariablen auf die (überlagerte) Methode ausgeben() der Oberklasse zurückgreifen. Zur Sicherstellung der vollständigen Initialisierung neuer Objekte sollte jede Klasse mindestens einen Kontruktor erhalten, dessen Parameterliste alle Instanzvariable der Klasse (inklusive der geerbten) enthält. Siehe Dateien Person.java Student.java und Dozent.java Assistent.java T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02

6 Polymorphie (Vielgestaltigkeit)
Es gibt zwei Arten von Polymorphie: 1. Polymorphie von Operationen ein und derselbe Methodenaufruf kann in verschiedenen Klassen klassenspezifisch, d.h. durch jeweils eigene Methodenrümpfe behandelt werden 2. Polymorphie von Objekten gibt es nur bei Vererbungshierarchien an die Stelle eines Objektes in einem Programm kann stets auch ein Objekt eines seiner Unterklassen treten andersherum formuliert: ein Objekt einer bestimmten Klasse kann in der Gestalt aller in der Vererbungshierarchie darüberliegenden Klassen auftreten T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02

7 Dynamisches Binden Aufgrund des Polymorphismus kann bei überlagerten Methoden erst zur Laufzeit entschieden werden, in welcher Unterklasse die entsprechende Methode aufgerufen wird. Die Bindung des Methodennamens an ein konkretes Programmteilstück im Hauptspeicher erfolgt somit dynamisch. Beispiel: Person[] personen = new Person[4]; personen[0] = new Dozent(...); personen[1] = new Student(...); personen[2] = new Assistent(...); personen[3] = new Person(...); for (int i=0; i<4; i++) personen[i].ausgeben(); T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02

8 Abfrage der Klassenzugehörigkeit
Die Frage, von welcher Klasse ein bestimmtes Objekt eine Instanz ist, kann mit dem instanceof-Operator abgefragt werden: Beispiel: if (Referenzvariable instanceof Klasse) {. . .} Sinn: Vermeidung von Runtime-Exceptions / Abstürzen Beispiel: Anzahl der Studenten in einem Personenarray zählen T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02

9 Abstrakte Klassen Motivation am Beispiel geometrischer Figuren
fläche() ausgeben() verschiedene geometrische Figuren, aber gleiche Schnittstellen gemeinsame Oberklasse als Abstraktion Methode fläche() kann auf dieser Ebene nicht implementiert werden, da Flächenberechnung vom konkreten Typ abhängt. Aufgabenstellung: 1. In einem Array sollen beliebige geometrische Figuren abgelegt werden können. Wie geht man vor? Aufgabenstellung: 2. Wo ist das Problem, wenn man den Flächeninhalt aller im Array enthaltenen Figuren berechnen will? Lösung: man definiert die Methode fläche() als abstrakte Methode und markiert dadurch, dass Sie erst in einer Unterklasse implementiert wird. T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02

10 Definition abstrakter Klassen
abstract class Figur { . . . abstract double fläche(); // abstrakte Methode } Bei der Definition abstrakter Methoden werden nur die Methodenköpfe (Methodenname sowie Parameterliste) festgelegt. T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02

11 Anmerkungen (I) zu abstrakten Klassen
Eine Klasse ist abstrakt, wenn sie mindestens eine abstrakte Methode enthält. Abstrakte Klassen können auch konkrete Methoden und Variablen enthalten. Eine abstrakte Methode verspricht, dass alle nichtabstrakten Unterklassen dieser Klasse diese abstrakte Methode implementieren Von abstrakten Klassen lassen sich keine Instanzen erzeugen. T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02

12 Anmerkungen (II) zu abstrakten Klassen
Man kann trotzdem Referenzvariablen vom Typ einer abstrakten Klasse verwenden – diese dürfen aber nur Objekte von nicht abstrakten Unterklasse enthalten. Figur f1= new Figur(); Nicht möglich, da Figur abstrakte Klasse Beispiel: Figur f=new Kreis(4.0); double area=f.fläche(); T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02

13 Übungsaufgabe Implementieren Sie die Klassen Figur, Dreieck, Ellipse und Trapez aus dem Beispiel auf Folie 9. Figur soll eine abstrakte Klasse sein. Erweitern Sie jede der vier Klassen um die Methode umfang(). Diese ist bei Figur abstrakt. Erzeugen Sie ein Array, das Dreiecke, Ellipsen und Trapeze enthält. Berechnen Sie die Summe der Umfänge aller geometrischen Figuren im Array. T. H. Kolbe - Einführung in die Programmierung mit Java Semester - WS 01/02


Herunterladen ppt "Einführung in die Programmierung mit Java"

Ähnliche Präsentationen


Google-Anzeigen