4 Vererbung, Polymorphie



Ähnliche Dokumente
8 Design Patterns. Events

14 Schmiegeparabel und Freunde, Taylor-Reihe

7 Dateien und Datenströme (Streams)

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Java: Vererbung. Teil 3: super()

9 Multithreading. 1 Idee des Multithreading

Folge 18 - Vererbung

Die Programmiersprache C99: Zusammenfassung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Programmieren in Java

Vererbung & Schnittstellen in C#

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Viele Bilder auf der FA-Homepage

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

Professionelle Seminare im Bereich MS-Office

Arbeiten mit UMLed und Delphi

SEMINAR Modifikation für die Nutzung des Community Builders

Objektorientierte Programmierung OOP

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

3 Klassen, Attribute, Methoden

Erstellen einer in OWA (Outlook Web App)

Einführung in die Programmierung

Erstellen von x-y-diagrammen in OpenOffice.calc

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

Zwischenablage (Bilder, Texte,...)

Anleitung über den Umgang mit Schildern

Warum Sie jetzt kein Onlinemarketing brauchen! Ab wann ist Onlinemarketing. So finden Sie heraus, wann Ihre Website bereit ist optimiert zu werden

Kurzanleitung zur Bereitstellung von Sachverhalten und Lösungen zum Universitätsrepetitorium auf dem Server unirep.rewi.hu-berlin.

Zählen von Objekten einer bestimmten Klasse

Grundlagen von Python

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

13. Tutorium zu Programmieren

Urlaubsregel in David

Qt-Projekte mit Visual Studio 2005

Animationen erstellen

GetName(), GetName(), GetGeschlecht() und AelterWerden().

Zimmertypen. Zimmertypen anlegen

Einführung in die Java- Programmierung

WordPress. Dokumentation

Um in das Administrationsmenü zu gelangen ruft Ihr Eure Seite auf mit dem Zusatz?mod=admin :

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Erklärung zu den Internet-Seiten von

Adminer: Installationsanleitung

Kommunikations-Management

Fotos in Tobii Communicator verwenden

Lizenzierung von SharePoint Server 2013

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

Software Engineering Klassendiagramme Assoziationen

Bauteilattribute als Sachdaten anzeigen

Was ist Sozial-Raum-Orientierung?

Zahlen auf einen Blick

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

TESTEN SIE IHR KÖNNEN UND GEWINNEN SIE!

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

Lehrer: Einschreibemethoden

Objektorientierte Programmierung

Lizenzierung von SharePoint Server 2013

Schnittstelle DIGI-Zeiterfassung

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Was meinen die Leute eigentlich mit: Grexit?

Toolbeschreibung: EVERNOTE

Anwendungsbeispiele Buchhaltung

Tevalo Handbuch v 1.1 vom

Kurzanweisung für Google Analytics

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel für Mac. amac-buch Verlag

(im Rahmen der Exchange-Server-Umstellung am )

YouTube: Video-Untertitel übersetzen

Microsoft Visual Studio Community 2015

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Informationen zum Ambulant Betreuten Wohnen in leichter Sprache

Umzug der abfallwirtschaftlichen Nummern /Kündigung

-Inhalte an cobra übergeben

Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen

Fotostammtisch-Schaumburg

DOKUMENTATION VOGELZUCHT 2015 PLUS

Seite Wo finde ich die Landingpage Auswahl? Seite Wie aktiviere ich eine Landingpage? Seite

Anleitung Postfachsystem Inhalt

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Inhalt. Inhalt Voraussetzungen Liegenschaften und Adressen auswählen Abgleich mit Internet-Office Dokumente...

Erklärung zum Internet-Bestellschein

Fallbeispiel: Eintragen einer Behandlung

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

CAQ Software für Ihr Qualitätsmanagement. Ablauf für die Erfassung der Fehler in der Fertigung

Step by Step Webserver unter Windows Server von Christian Bartl

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Beispiel Shop-Eintrag Ladenlokal & Online-Shop im Verzeichnis 1

Das Festkomitee hat die Abi-Seite neu konzipiert, die nun auf einem (gemieteten) Share Point Server

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Das Persönliche Budget in verständlicher Sprache

12. Dokumente Speichern und Drucken

Transkript:

4 Vererbung, Polymorphie Jörn Loviscach Versionsstand: 21. März 2014, 22:57 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Germany License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/de/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. Bitte hier notieren, was beim Bearbeiten unklar geblieben ist 1 Vererbung Die Datenkapselung [encapsulation] war das erste große Prinzip der Objektorientierung: 1 Klassen sind Baupläne für Objekte solche Kombinationen aus Daten und Funktionen. Jedes Objekt ist eine Instanz einer Klasse. 1

1 VERERBUNG 2 Nun kommt das zweite große Prinzip: Vererbung [inheritance]. Eine (Kind-)Klasse [child class] kann von einer anderen (Mutter-)Klasse [parent class, base class] erben [to inherit]; sie heißt dann auch von dieser Klasse abgeleitet [derived]. Die abgeleitete Klasse kann alles Öffentliche, was die Mutterklasse kann und kann selbst Neues hinzufügen. Die Kindklasse erhält sozusagen eine Kopie des Bauplans. Als Beispiel zwei abgeleitete Klassen zu unserer alten Klasse Meeting: 2 In C++ muss man hinter den Doppelpunkt noch public schreiben. In Java schreibt man extends statt des Doppelpunkts. Statische Attribute werden für die Kindklasse nicht neu angelegt. Es gibt also zum Beispiel weiterhin nur einen einzigen Zähler für die Anzahl an Meetings den in der Klasse Meetings. Demo im Debugger. Aus der Kindklasse sind nur die public-elemente der Mutterklasse verfügbar. Man kann aber allen Kind- und Kindeskind-Klassen Zugriff auf Elemente der Mutterklasse geben, wenn man die dort als protected deklariert: 3 Microsoft Visual Studio zeigt auf Wunsch ein Klassendiagramm. Dort lassen sich auch per Mausklick Änderungen an den Klassen vornehmen, die dann automatisch in den Quelltext übernommen werden. Das Diagramm in Visual Studio entspricht allerdings nicht genau dem Klassendiagramm nach UML-Standard:

2 KONSTRUKTOREN FÜR ABGELEITETE KLASSEN 3 4 2 Konstruktoren für abgeleitete Klassen Eine abgeleitete Klasse erbt eine wichtige Sache nicht: den Konstruktor. Der Konstruktor muss die neuen Datenelemente dieser Klasse richtig initialisieren vorher muss er aber dafür sorgen, dass die geerbten Datenelemente richtig initialisiert werden. Dazu ruft er den Konstruktor der Mutterklasse [base class] auf: 5 In C++ schreibt man nicht base, sondern den Namen der Mutterklasse. In Java schreibt man super(...) in die erste Zeile nach der öffnenden Schweifklammer. Schreibt man nicht ausdrücklich den Konstruktor der Basisklasse hin, sucht der Compiler nach einem parameterlosen Konstruktor der Basisklasse. Wenn es den nicht gibt, ist das ein Fehler. Schreibt man gar keinen eigenen Konstruktor für die abgeleitete Klasse BusinessMeeting, ergänzt der Compiler einen parameterlosen Konstruktor ( Standardkonstruktor ), so dass der Aufruf new BusinessMeeting() funktioniert wenn die Mutterklasse Meeting einen parameterlosen Konstruktor besitzt. (Warum diese Einschränkung?)

3 POLYMORPHIE, VIRTUELLE METHODEN, ÜBERSCHREIBEN 4 3 Polymorphie, virtuelle Methoden, Überschreiben Ein anderes Konzept ist mit dem Konzept der Vererbung verbunden: Polymorphie, übersetzbar als Vielgestaltigkeit. Eine Instanz einer Kindklasse oder Kindeskindklasse kann eine Instanz ihrer Mutterklasse vertreten und sich dabei anderes verhalten. Man kann dazu in der Kindklasse Methoden der Mutterklasse überschreiben [to override, nicht to overwrite]. Um das in C# zu erlauben, muss die entsprechende Methode in der Mutterklasse als virtual und in der Kindklasse als override gekennzeichnet sein: 6 C# ist hier sicherheitshalber sehr wortreich: In C++ erübrigt sich das override, in Java obendrein das virtual. Visual Studio hilft beim Überschreiben, wenn man direkt override und dann ein Leerzeichen eintippt. Standardmäßig entsteht dann eine Methode, die mit base einfach die Originalmethode der Mutterklasse aufruft. Es gibt einige Randbedingungen beim Überschreiben. In C# sind das diese: 7

4 ANWENDUNGEN DER POLYMORPHIE. UPCAST, DOWNCAST 5 Auch eine Property von C# kann virtuell sein und überschrieben werden: 8 4 Anwendungen der Polymorphie. Upcast, Downcast Überall, wo eine Instanz der Mutterklasse steht, kann eine Instanz einer abgeleiteten Klassen verwendet werden. Etwa lässt sich eine BusinessMeeting-Instanz an eine Meeting-Variable zuweisen (von der Kindklasse zur Mutterklasse wandeln: Upcast ; das geht immer). Für überschriebene virtuelle Methoden und Properties wird der Code der jeweiligen Kindklasse aufgerufen: 9 Insbesondere macht Polymorphie so in den meisten Fällen auf elegante Art ein switch... case überflüssig. Jeder Code, den man für Meeting geschrieben hat, wird sofort auch mit den Kindklassen funktionieren! Man beachte: Den Code für Meeting könnte jemand Anderes vor fünf Jahren geschrieben haben. In Aktion sehen wir das schon bei unserer Hauptfensterklasse: Die ist von der Klasse Window der Bibliothek abgeleitet und erbt deshalb einen riesigen Satz an fertig gebauten Methoden und Properties. Dies ist ein massives Recycling von Code ( Erben der Implementierung ). In C# und Java erbt jede Klasse automatisch und unabänderlich von der Klasse object. So hat jedes Objekt zum Beispiel eine virtuelle Methode ToString. Wann immer die Klassenbibliothek eine Zeichenkette für ein Objekt benötigt, ruft

4 ANWENDUNGEN DER POLYMORPHIE. UPCAST, DOWNCAST 6 sie diese Methode auf. Beispiele: "abc"+d; das Hinzufügen eines Eintrags zu einer Listbox; die Anzeige im Debugger. Durch Überschreiben von ToString kann man steuern, wie sich die Objekte einer Klasse in Textform präsentieren: 10 Hinter eine Variablen vom Typ Meeting könnte sich auch eine Instanz einer der Kindklassen BusinessMeeting oder Dinner verbergen. Die Meeting- Variable kennt aber nicht die neuen Attribute, Methoden und Properties der Kindklassen. Um auf die zuzugreifen, muss man den Typ wandeln: 11 Von der Mutterklasse zur Kindklasse wandeln: Downcast ; das geht nur dann, wenn das Objekt auch tatsächlich eine Instanz der gwünschten Kindklasse ist oder eine Instanz einer davon abgeleiteten Klasse. In C# kann man mit is abfragen, ob der Downcast funktionieren würde: 12 In Java heißt das instanceof. In C++ ist die Abfrage, zu welcher Klasse ein Objekt gehört, ein heikles Thema (RTTI, Run-Time Type Identification).

5 ZUSAMMENFASSUNG: KLASSEN 7 5 Zusammenfassung: Klassen 13