4

Click here to load reader

Begriffe und Konzepte der objektorientierten ... · PDF fileBegriffe und Konzepte der objektorientierten Programmierung (OOP) Vorwort ­ Wozu objektorientierte Programmierung? Das

  • Upload
    vucong

  • View
    216

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Begriffe und Konzepte der objektorientierten ... · PDF fileBegriffe und Konzepte der objektorientierten Programmierung (OOP) Vorwort ­ Wozu objektorientierte Programmierung? Das

Begriffe und Konzepte der objektorientierten Programmierung (OOP)

Vorwort ­ Wozu objektorientierte Programmierung?Das   Erlernen   der   objektorientierten   Programmierung   ist   für   zwei   Gruppen   von   Menschen schwierig: 

1. Solche, die noch nie programmiert haben, 2. solche, die schon einmal programmiert haben.

Dabei wage ich zu behaupten, dass es die erste Gruppe noch etwas leichter hat als die Zweite. Sie hat   nämlich   keine   eingefahrenen   Denk­   und   Vorgehensmuster,   die   sie   erst   überwinden   muss. Allerdings sind die ersten Schritte in jeglicher Programmierung stets schwierig, so dass von einem echten Vorsprung nicht die Rede sein kann.

Wenn Sie gerade mit dem Programmieren begonnen haben, kommen Ihnen die meisten Programme vielleicht   simpel   und   schnell   überschaubar   vor.   Alle,   die   schon   etwas   mehr   Erfahrung   haben, werden  mir  aber   zustimmen,  dass  moderne  Softwaresysteme alles   andere   als  einfach   sind.  Ein Informationssystem von heute ist aus vielerlei Gründen komplex, und das leider allzu oft in sehr hohem Maße. Häufig ist bereits die Problemstellung sehr komplex, denn der Anwender möchte oft alle  seine  Probleme mit  einer  Software   in  den Griff  bekommen.  Da ein  solches  System schon aufgrund seiner Größe und der Terminvorgaben nicht von einer Person allein erstellt werden kann, kommt noch die Schwierigkeit hinzu den Entwicklungsprozess vernünftig zu steuern. Außerdem soll immer auch eine hohe Flexibilität gewährleistet werden, um mit den Investionen von heute den Anforderungen von morgen noch gewachsen zu sein.

Das wichtigste Ziel der OOP ist also: Beherrschung der Komplexität

Die   Beherrschung   der   Komplexität   gelingt   nur durch   sukzessives   Aufteilen   in   immer   kleinere Einheiten:

Verschiedene   Programmierparadigmen   (­methodiken)   verfolgen   dabei   unterschiedliche   Ansätze. Die ersten höheren Programmiersprachen (Fortran, Basic, Pascal, C,...) benutzten das prozedurale bzw.   strukturierte  Programmierparadigma.  Dabei   erfolgt   die  Strukturierung  durch  Prozeduren, Module und Datenstrukturen. 

Das prozedurale  Programmieren macht sich die  simple Tatsache zunutze,  dass  es  in  fast   jedem Programm Abläufe gibt, die mehrmals in ähnlicher Form abgearbeitet werden müssen. Diese fasst man dann zu einer Prozedur zusammen, die einen Satz von Parameter übergeben bekommt, mit diesen eine Aufgabe erledigt und anschließend einen Wert zurückliefern kann. Das Programm fährt direkt hinter der Stelle fort, an der die Prozedur aufgerufen wurde. 

Der modulare Ansatz geht noch einen Schritt weiter und fasst zusätzlich Prozeduren von verwandter Funktionalität zu Modulen zusammen, die gröbere Untereinheiten des Programms darstellen. Das kann   sowohl   die   Organisation   des   Entwicklungsprojekts   erleichtern,   da   man   jeweils   einen Programmierer mit einem Modul betrauen kann, als auch das Testen, da hierbei die Module bereits separat einmal getestet werden können und später nur noch das korrekte Zusammenspiel untersucht werden muss. 

Die Daten,  mit denen das Programm umgeht,  fasst  man zu  Datenstrukturen  zusammen, also zu Gruppen mit eigenem Namen, die einen Datentyp festlegen. 

Ein   wesentliches   Merkmal   der   strukturierten   Programmierung   ist   aber   die   strenge   Trennung zwischen Daten und Operationen/Funktionen (den Algorithmen).

Page 2: Begriffe und Konzepte der objektorientierten ... · PDF fileBegriffe und Konzepte der objektorientierten Programmierung (OOP) Vorwort ­ Wozu objektorientierte Programmierung? Das

Bei der objektorientierten Programmierung werden diese Strukturierungsprinzipien nicht einfach komplett ersetzt, sondern durch weitere Konzepte ergänzt (deshalb sollte man bei der OOP auch eher  von einer  Ergänzung/  Weiterentwicklung  der   strukturierten  Programmierung  als  von einer Ablösung sprechen). 

Grundkonzepte der OOP

● Bildung von Objekten und ihre Zuordnung zu Klassen

● Kapselung

● Vererbung

● Polymorphie

Objekte und Klassen

In der  OOP stehen Objekte  im Vordergrund.  Objekte sind atomare Einheiten,  die  jeweils  einen (inneren) Zustand und ein Verhalten besitzen. Dabei kann ein Objekt beliebig abstrakt sein, es kann ein statisches Gebilde (z.B. ein Auto) sein, es kann aber auch einen Vorgang beschreiben (z.B. ein Tennisspiel). 

● Der Zustand des Objekts wird durch Datenstrukturen, ● sein Verhalten – die von ihm ausführbaren Operationen – durch Funktionen/ 

Prozeduren beschrieben. Ein  Objekt  verbindet   also  Daten  und  die   zu   ihrer  Bearbeitung  dienenden  Funktionen  zu  einer Einheit.In der OOP wird eine  Methode für ein Objekt aufgerufen,   in dem  an das Objekt eine ent­sprechende  Nachricht   (Botschaft)  geschickt  wird:  Das  Objekt   interpretiert  die  Nachricht  und reagiert mit der Ausführung einer zugeordneten Operation (Methode).Die   Struktur   eines   Objekts   wird   durch   eine  Klasse  beschrieben.   Eine   Klasse   ist   also   eine Abstrahierung   (Verallgemeinerung)   für   eine   Menge   von   gleichartigen   Objekten.   Ein   spezielles Objekt  der  durch eine Klasse definierten Objektmenge wird auch  Instanz  genannt.  Die Klasse entspricht dem Datentyp prozeduraler Programmiersprachen, während eine Instanz (ein spezielles Objekt dieser Klasse) einer Variablen entspricht. 

Page 3: Begriffe und Konzepte der objektorientierten ... · PDF fileBegriffe und Konzepte der objektorientierten Programmierung (OOP) Vorwort ­ Wozu objektorientierte Programmierung? Das

Kapselung (Encapsulation)Nur  die  Funktionskomponenten   (und Daten)  eines  Objekts,  die  zu  seiner  Verwendung benötigt werden, sind allgemein zugänglich, d.h. öffentlich (public). Sie bilden das  Interface  (Protokoll), über das zu dem Objekt zugegriffen werden kann (= Schnittstelle zur "Außenwelt").Die übrigen Funktionen und Daten sind nur Komponenten des Objekts selbst zugänglich, d.h. privat (private,   protected).   Der   "Außenwelt"   gegenüber   bleiben   sie   verborgen.   Hierdurch   wird sichergestellt, daß zu einem Objekt nur über eine wohldefinierte Schnittstelle zugegriffen werden kann. Zugriffe zu Interna, die nur zur Realisierung und Verwaltung des Objekts dienen, sind nicht möglich. Vorteile:

● Verhinderung von Fehlern.● Trennung von Interface und Implementierung.

Die Kapselung bewirkt außerdem eine Datenabstraktion: Eine Datenstruktur ist nach außen nicht mehr an eine bestimmte Implementierung gebunden, sondern wird über die auf sie anwendbaren Operationen   (Methoden,   Funktionen)   definiert.   Eine   Änderung   der   Implementierung   ­   bei gleichbleibendem Interface ­ hat keinen Einfluß auf den Anwendungscode.

Vererbung (Inheritance)Vererbung ermöglicht den Aufbau von Klassenhierarchien: Eine neue Klasse (abgeleitete Klasse) wird aus einer oder mehreren bereits definierten Klasse(n) (Basisklasse) abgeleitet. Sie erbt dadurch die Daten und Methoden der Basisklasse(n). Zusätzlich kann sie durch das Hinzufügen neuer Daten und Methoden im Sinne einer weiteren Spezialisierung abgeändert werden.

● Einfache Vererbung : Ableitung einer Klasse von nur einer Basisklasse.● Mehrfachvererbung : Ableitung einer Klasse von mehreren Basisklassen.

Durch Vererbung übertragene Methoden (Funktionen/Prozeduren) existieren nur einmal (= Code Sharing). Dies erleichtert Änderungen und Erweiterungen an bestehenden Klassenhierarchien.

Beispiel für einfache Vererbung:Basisklasse:Straßenfahrzeug { baujahr, maxspeed, fahren() }Unterklassen:Pkw { neu : kofferraum, kofferraum_oeffnen() }Lkw { neu : ladung, beladen(), entladen() }

Straßenfahrzeug

baujahrmaxspeed

fahren()

Basisklasse(Klassenname)

Eigenschaften (Daten)

Methode

Pkw

baujahrmaxspeedkofferraum

fahren()kofferraum_oeffnen()

Lkw

baujahrmaxspeedladung

fahren()beladen()entladen()

Unterklasse(abgeleitete

 Klasse)Generalisierung(die Unterklasse

erbt von der Basisklasse)

Page 4: Begriffe und Konzepte der objektorientierten ... · PDF fileBegriffe und Konzepte der objektorientierten Programmierung (OOP) Vorwort ­ Wozu objektorientierte Programmierung? Das

Der OOP­Ansatz erfordert  eine andere Vorgehensweise bei  der  Problemlösung: Statt  einer  Top­Down­Zerlegung des Problems (  hierarchische Modularisierung) müssen die relevanten Objekte⇒  (Aufbau und Verhalten) und ihre Beziehungen untereinander ermittelt werden (  aufgaben­ und⇒  kommunikationsorientierte Zerlegung). Eine weit verbreitete Modellierungsmethode ist dabei die Anwendung   von  UML  (Unified  Modeling   Language).  Das   oben  dargestellte   Klassendiagramm entspricht einer von vielen graphischen Modellierungen von UML.

Polymorphie (Polymorphism)Verwendung des  gleichen Namens   für  unterschiedliche  –  aber  miteinander  verwandte  –  Dinge. Polymorphie  in  der  OOP ermöglicht,  daß verschiedenartige Objekte   (unterschiedlicher  Klassen) unter einem gemeinsamen Oberbegriff (Basisklasse) betrachtet und bearbeitet werden können. Für verschiedenartige   Objekte  werden  unterschiedliche   ­   aber   meist   ähnliche   ­  Methoden  mit   dem gleichen Namen belegt. Die gleiche durch den Namen ausgedrückte Botschaft wird ­ an unterschiedliche Objekte gerichtet ­ zum Aufruf unterschiedlicher Methoden führen. Also nicht die Botschaft (der Aufruf) bestimmt, welche Methode (Funktion) ausgeführt wird, sondern der Empfänger der Botschaft.Polymorphie führt zum Überladen von Funktionen (Methoden) und Operatoren.Überladen von Funktionen (Function Overloading):Mehrere Funktionen, die zu verschiedenen Klassen gehören und/oder mit verschiedenen Datentypen arbeiten,  können den gleichen Namen besitzen.  Durch den gleichen Namen (virtuelle  Funktion) wird   ein   Standard­Interface   bereitgestellt,   über   das   sich   mehrere   unterschiedliche   aber   meist miteinander verwandte Methoden aufrufen lassen. Die speziell angewandte Methode hängt von dem Empfänger des Funktionsaufrufs und den beim Aufruf übergebenen Daten (Parameter) ab.Überladen von Operatoren (Operator Overloading) :Operatoren   können   zur   Anwendung   auf   unterschiedliche   Datentypen   umdefiniert   werden.   Ein überladener Operator bewirkt den Aufruf einer speziellen ­ vom Benutzer erstellten – Funktion. 

Quellen:

● www.cpp­entwicklung.de/cpplinux/cpp_main/node4.html   

● www.ee.hm.edu/fb/lab/lmc/kri­skripten/prog2/vorles/P2_K7.pdf   

● de.wikipedia.org/wiki/Unified_Modeling_Language