Zum Forum
Passwort vergessen?
Noch keinen Account?
lexikon
Hauptseite
Zufälliger Artikel
Diskussion
Diskussion : Objektorientierte Programmierung
Links
Forum
Portale
Reisen
Versicherung
Inhaltsverzeichnis
Hauptmenü
Home
Editorial
Bildung
E-Learning
Fremdsprachen
Magazin
Wissen
Wörterbücher
Enzyklopädien
Expertendienste
Wissenswertes
Praktische Ratgeber
--------------------------
Biologie
Chemie
Computer
Film/ Theater
Geografie
Geschichte
Jura
Kunst
Literatur
Mathematik
Medizin
Musik
Philosophie
Physik/ Astronomie
Politik
Psychologie
Religionen
Sport
Umwelt
Wirtschaft
Reisen
Lexikon
Versicherung
Suchen
Schnellsuche
Suchmaschinen
Metasuchmaschinen
Webkataloge
News
Treffpunkt
Chat
Forum
Suche
Schnellsuche
Sitemap
Kontakt
Impressum
Objektorientierte Programmierung
Stichpunkte
Allgemein
da Programme dieser Art weniger stark gezwungen sind
der dabei eine Anzahl Daten verändert
sondern die Programmlogik entfaltet sich in der Kommunikation und den internen Zustandsveränderungen der Objekte
"Verbergen") 1 Konzepte der objektorientierten Programmierung 1.1 Grundlegende Begriffe 1.2 Objekte und Klassen 1.3 Bezeichnungen 1.4 Kapselung 1.4.1 Zugriffsarten 1.4.2 Vorteile 1.5 Methoden 1.6 Vererbung 1.6.1 Beispiel 1.6.2 Mehrfachvererbung 1.6.3 Akquisition 2 Programmiersprachen 3 Programmierparadigmen 4 Geschichte der objektorientierten Programmierung 5 Umfeld 6 Literatur 7 Siehe auch 8 Weblinks [Bearbeiten]
den sogenannten Objekten. Zumindest konzeptionell arbeitet ein Programm dann nicht mehr (wie bei der prozeduralen Programmierung) so
insbesondere in Bezug auf die Benutzerführung
Objektorientierte Programmierung (OOP) ist ein Verfahren zur Strukturierung von Computerprogrammen
dass sequentiell einzelne Funktionsbereiche eines Algorithmus durchlaufen werden
aus denen das Programm aufgebaut ist. Vorteile der objektorientierten Programmierung liegen in der besseren Modularisierung des Codes
sowie in einer höheren Flexibilität des Programmes insgesamt
dem Benutzer bestimmte Bedienabläufe aufzuzwingen. Inhaltsverzeichnis showTocToggle("Anzeigen"
dadurch bedingt in einer höheren Wartbarkeit und Wiederverwendbarkeit der Einzelmodule
bei dem zusammengehörige Daten und die darauf arbeitende Programmlogik zu Einheiten zusammengefasst werden
Konzepte der objektorientierten Programmierung
[Bearbeiten]
Grundlegende Begriffe
Im Folgenden werden wichtige Begriffe der objektorientierten Programmierung kurz umrissen
aus denen ein objektorientiertes Programm während seiner Abarbeitung besteht
Für nähere Details sei auf die jeweiligen Einzelabschnitte und -artikel verwiesen. Die einzelnen Bausteine
als Objekte bezeichnet
werden
wie bereits erwähnt
Die Konzeption dieser Objekte erfolgt dabei in der Regel auf Basis der folgenden Paradigmen: Abstraktion: Jedes Objekt im System kann als ein abstraktes Modell eines Akteurs betrachtet werden
der Aufträge erledigen
ohne offen legen zu müssen
wie diese Fähigkeiten implementiert sind (vgl. abstrakter Datentyp (ADT)). Kapselung: Objekte können den internen Zustand anderer Objekte nicht in unerwarteter Weise lesen oder ändern
seinen Zustand berichten und ändern und mit den anderen Objekten im System kommunizieren kann
Nur die eigenen Methoden eines Objektes sollen auf seinen internen Zustand direkt zugreifen können
die darüber bestimmt
wie mit dem Objekt interagiert werden kann
Ein Objekt hat also eine Schnittstelle
Dies verhindert das Umgehen von Invarianten des Programms. Polymorphie: Verschiedene Objekte können auf die gleiche Nachricht unterschiedlich reagieren
dann wird dies auch späte Bindung (oder dynamische Bindung) genannt. Vererbung: Neue Objekt-Typen können auf der Basis bereits vorhandener Objekt-Typen definiert werden
Wird die Zuordnung von Nachricht zur Reaktion auf die Nachricht erst zur Laufzeit aufgelöst
Es können neue Attribute oder Methoden hinzugenommen werden oder vorhandene überlagert werden
so spricht man zur Unterscheidung oft auch von objektbasierter Programmierung. [Bearbeiten]
Wird keine Vererbung zugelassen
Objekte und Klassen
Zur besseren Verwaltung gleichartiger Objekte bedienen sich die meisten Programmiersprachen des Konzeptes der Klasse
Klassen sind Vorlagen
aus denen Objekte zur Laufzeit erzeugt werden
Im Programm werden dann nicht einzelne Objekte
sondern eine Klasse gleichartiger Objekte definiert
Man kann sich die Erzeugung von Objekten aus einer Klasse vorstellen wie das Fertigen von Autos aus dem Konstruktionsplan eines bestimmten Fahrzeugtyps
sie definiert zudem Verarbeitungsfunktionen (so genannte Methoden) für diese Daten
die die aus den Klassen erzeugten Objekte haben können
Klassen sind die Konstruktionspläne für Objekte. Die Klasse entspricht in etwa einem komplexen Datentyp prozeduraler Programmierumgebungen
geht aber darüber hinaus: Sie definiert nicht nur die Eigenschaften oder Attribute
Während also zur Laufzeit eines Programmes einzelne Objekte miteinander interagieren
wird das Grundmuster dieser Interaktion durch die Definition der einzelnen Klassen festgelegt
Aus Klassen erzeugte Objekte werden als Exemplare oder Instanzen der Klasse bezeichnet
die Klasse zur Laufzeit zu repräsentieren
das so genannte Klassenobjekt
In manchen Programmiersprachen gibt es außerdem zu jeder Klasse wiederum ein bestimmtes Objekt
das dazu da ist
Dieses Klassenobjekt ist dann auch zuständig für die Erzeugung von Objekten der Klasse und den Aufruf der passenden Methode
die häufig thematisch organisiert sind
Klassen werden in der Regel in Form von Klassenbibliotheken zusammengefasst
die beispielsweise den Zugriff auf Datenbanken ermöglichen. [Bearbeiten]
So können Anwender einer objektorientierten Programmiersprache Klassenbibliotheken erwerben
Bezeichnungen
Die Begriffe der objektorientierten Programmierung haben teilweise unterschiedliche Namen
Folgende Bezeichnungen werden synonym verwendet: Superklasse = Basisklasse = Oberklasse Subklasse = abgeleitete Klasse = Unterklasse Methode = Elementfunktion = Memberfunktion Attribut = Datenelement = Member [Bearbeiten]
Kapselung
Als Kapselung bezeichnet man den kontrollierten Zugriff auf Objekte
der diesen entwickelt) möglichst wenig wissen müssen (Geheimnisprinzip)
Vom Innenleben eines Objektes soll der Verwender (gemeint sind sowohl der Programmcode
als auch der Programmierer
der mit Objekten arbeitet
nicht aber das "Wie" (die interne Repräsentation)
Durch die Kapselung werden nur Informationen über das "Was" eines Objektes (was es leistet) nach außen sichtbar
Dadurch wird eine klare Schnittstelle nach außen definiert und zugleich dokumentiert. Die einfachste Form von Kapselung gibt es auch in nicht-objektorientierten Sprachen durch das Deklarieren einer Variablen als "nur zum Lesen" (meist durch eine Deklaration als const)
Eine Deklaration von Daten nur innerhalb eines Programmmoduls ist ebenfalls eine Form von Kapselung. [Bearbeiten]
Zugriffsarten
protected (#): Nur für Ausprägungen der eigenen Klasse und von Spezialisierungen der selben zugreifbar
Die UML als De-facto-Standardnotation erlaubt die Modellierung folgender Zugriffsarten (in Klammern die Kurznotation der UML): public (+): zugreifbar für alle Ausprägungen (auch die anderer Klassen)
package (~): erlaubt den Zugriff für alle Elemente innerhalb des eigenen Pakets. Die Möglichkeiten zur Spezifizierung der Zugreifbarkeit sind je nach Programmiersprache unterschiedlich. [Bearbeiten]
private (-): Nur für Ausprägungen der eigenen Klasse zugreifbar
Vorteile
Dadurch dass die Implementierung eines Objektes anderen Objekten nicht bekannt ist
das Ergebnis einer Berechnung ist
Änderungen in anderen Programmteilen erfordern. Beim lesenden Zugriff über eine Zugriffsfunktion spielt es von außen keine Rolle
dass innere Zusammenhänge
die möglicherweise später einmal verändert werden
oder möglicherweise aus anderen Quellen (z.B. einer Datei oder Datenbank) stammt. Oft stehen mehrere Einzelinformationen in einem Zusammenhang
ob diese Funktion 1:1 im Inneren des Objekts existiert
kann die Implementierung geändert werden
ohne die Zusammenarbeit mit anderen Objekten zu beeinträchtigen. Erhöhte Übersichtlichkeit
da nur die öffentliche Schnittstelle eines Objektes betrachtet werden muss. Es wird verhindert
Durch Verändern dieser über eine Zugriffsfunktion muss man sich darüber keine Gedanken machen
da man erwarten darf
dass diese sich um die Konsistenz dieser Daten kümmert. Deutlich verbesserte Testbarkeit
Stabilität und Änderbarkeit der Software [Bearbeiten]
Methoden
Eine Methode ist eine zu einem Objekt gehörende Funktion oder Prozedur
Man unterscheidet vor allem Instanz- und Klassenmethoden
privat) haben
Methoden können unterschiedliche Zugreifbarkeit (öffentlich
Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur gebraucht
obwohl die Funktion oder Prozedur eher als Implementierung einer Methode zu betrachten ist
insbesondere auch als Zugriffsfunktionen. [Bearbeiten]
Im täglichen Sprachgebrauch sagt man auch "Objekt A ruft Methode m von Objekt B auf." Eine besondere Rolle spielen Methoden für die Kapselung in der objektorientierten Programmierung
Vererbung
Bei der Vererbung werden von einer erbenden Klasse alle Merkmale der vererbenden Klasse geerbt
Verwendet wird die Vererbung zum Beispiel
die konzeptionell zusammengehören
wenn man mehrere Klassen schreiben möchte
Identische Merkmale dieser Klassen werden dann in der gemeinsamen Basisklasse zusammengefasst. Dabei erbt die Klasse die Datenstruktur (Attribute) und die Methoden von der vererbenden Klasse (Basisklasse)
Die abgeleitete Klasse (Subklasse) kann Methoden der Basisklasse überschreiben (sofern diese es erlaubt
hängt von der Programmiersprache ab)
Die Möglichkeit
d.h. die Methode neu implementieren
und eigene Methoden und Daten (Attribute) hinzufügen
dies zu verbieten
wo ein Objekt der Basisklasse erwartet wird. Überschriebene Methoden werden dann auf der abgeleiteten Klasse ausgeführt (Polymorphie)
Ein Objekt der abgeleiteten Klasse kann überall verwendet werden
wenn eine Klasse mehrere unmittelbare Basisklassen hat
Von Mehrfachvererbung spricht man
die nicht voneinander erben
Die Möglichkeit der Mehrfachvererbung besteht nur in wenigen Programmiersprachen (z.B
Python; Ada 0Y soll auch Mehrfachvererbung unterstützen). [Bearbeiten]
C++
Beispiel
Ein Fahrzeug besitzt bestimmte Attribute
diese können z.B
Höchstgeschwindigkeit oder maximale Zuladung oder auch Farbe sein
Die Klasse Kraftfahrzeug erbt all diese Attribute
z.B
kann aber noch zusätzliche Attribute besitzen
Leistung oder Drehmoment
welche die Basisklasse Fahrzeug nicht kennt
Des Weiteren kann ein Fahrzeug auch zusätzliche Methoden wie Beschleunige() besitzen
Die Klasse Personenkraftwagen kann dann wiederum von Kraftfahrzeug abgeleitet werden und weitere zusätzliche Attribute wie Anzahl der Sitze besitzen
Durch die Ableitung von Kraftfahrzeug erbt der Personenkraftwagen automatisch alle Attribute von Fahrzeug
lässt sich durch eine einfache "Ist-Ein"-Regel feststellen
Ob eine Klasse in einer Vererbungsbeziehung zu einer anderen Klasse steht
aber ein Fahrzeug ist kein Personenkraftwagen. Ein Personenkraftwagen ist auch kein Sitz
ein Personenkraftwagen ist ein Fahrzeug
sondern ein Personenkraftwagen besitzt einen oder hat einen Sitz. Hat einen bezeichnet also Attribute einer Klasse. [Bearbeiten]
stehen beide Klassen in einer Vererbungsbeziehung. Ein Personenkraftwagen ist ein Kraftfahrzeug
Sobald die Aussage "die abgeleitete Klasse ist eine Basisklasse" zutrifft
Mehrfachvererbung
Mehrfachvererbung (englisch: multiple inheritance)
bedeutet die Ableitung einer Klasse von mehr als einer Basisklasse
Ein praktisches Beispiel hierfür ist ein Amphibienfahrzeug
das sowohl die Attribute von Landfahrzeug als auch die von Wasserfahrzeug erbt
Damit besitzt Amphibienfahrzeug sowohl eine Räderzahl als auch einen Tiefgang
Nicht alle objektorientierten Programmiersprachen erlauben die Mehrfachvererbung
Programmiersprachen mit Mehrfachvererbung sind z.B
C++
Eiffel und Python
Dagegen unterstützen Smalltalk und Ada Mehrfachvererbung nicht
dass es das Design unnötig kompliziere und undurchsichtig machen könne
Als Einwand gegen Mehrfachvererbung wird häufig genannt
Java und C# bieten mit so genannten Schnittstellen eine eingeschränkte Form der Mehrfachvererbung
jedoch kann Sie beliebig viele Schnittstellen erben
Hierbei kann eine Klasse maximal von einer Basisklasse abgeleitet werden
Damit verpflichtet sich diese Klasse
die Methoden der Schnittstelle zu erfüllen
ohne die Nachteile der Mehrfachvererbung in Kauf nehmen zu müssen. [Bearbeiten]
Mit einfacher Vererbung und Schnittstellen sind die meisten Anforderungen an ein Software-Design realisierbar
Akquisition
Ein Sonderfall der Vererbung ist die von der Webanwendung Zope realisierte Akquisition: Hierbei erbt ein Objekt nicht aufgrund seiner Klasse von seiner Superklasse (is-a- bzw
sondern durch seine Position in einer Objekthierarchie (ist enthalten in)
Ist-Ein-Beziehung)
die weiter 'unten' in dem betreffenden Unterbaum liegen
Dies ist nützlich z. B. für die Generierung dynamischer Internet-Auftritte: 'oben' im Objektbaum (d. h. nahe der Wurzel) definierte Eigenschaften oder Methoden werden an alle Objekte vererbt
dass das Auto die Eigenschaft Farbe und vier Radkappen hat; die Radkappen sind Teil des Autos (bzw. 'darin enthalten') und erben von ihrem Container
Auf das Beispiel eines Autos übertragen
könnte man sich vorstellen
die Eigenschaft Farbe. [Bearbeiten]
dem Auto
Programmiersprachen
Grundsätzlich kann man durch strikte Einhaltung bestimmter Regeln in den meisten Programmiersprachen objektorientiert programmieren
Jedoch erleichtern und fördern speziell hierfür ausgerichtete objektorientierte Programmiersprachen dies ungemein. Die erste bekannte objektorientierte Programmiersprache ist Simula-67
Später wurden die Prinzipien dann in Smalltalk weiter ausgebaut
Die heute bekanntesten objektorientierten Sprachen sind C++
Java und C#
Die meisten objektorientierten Programmiersprachen erlauben es
verschiedene Programmiertechniken miteinander zu kombinieren
Manchmal werden dabei bestimmte Prinzipien der objektorientierten Programmierung durchbrochen
wie stark er bestimmte Konzepte wie beispielsweise die Kapselung objektinterner Daten durch Zugangsmethoden einhält oder nicht
Beispielsweise handhaben viele Programmiersprachen das Prinzip der Kapselung nicht ganz so streng und stellen es dem Entwickler anheim
auch elementare Typen wie Ganzzahlen (Integer) durch Objekte repräsentiert
In rein objektorientierten Sprachen wie Smalltalk werden
dem Prinzip alles ist ein Objekt folgend
die wiederum Ausprägungen von Metaklassen sind
Auch Klassen selbst sind hier Objekte
Viele Sprachen
sondern müssen auf Methoden und Struktur komplett verzichten
unter anderem C++ und Java folgen allerdings nicht der reinen Lehre der Objektorientierung; daher sind dort elementare Typen keine vollwertigen Objekte
In einigen objektorientierten Programmiersprachen wie zum Beispiel JavaScript
NewtonScript und Self wird auf die Deklaration von Klassen gänzlich verzichtet
so genannte Prototypen abgeleitet
Statt dessen werden bestehende Objekte
wenn sie nicht im abgeleiteten Objekt explizit überschrieben wurden
Die Attribute und Methoden des Prototypen kommen immer dann zum Einsatz
Dies ist vor allem für die Entwicklung kleinerer Programme von Vorteil
da es einfacher und zeitsparend ist
Delphi C# C++ Objective CAML PHP5 Visual Basic [Bearbeiten]
Einige objektorientierte Programmiersprachen: Smalltalk Python Java Objective C Object Pascal
Programmierparadigmen
Die objektorientierte Programmierung gehört zu den so genannten Programmierparadigmen
Nach dem objektorientierten Programmierparadigma werden Objekte mit Daten und den darauf arbeitenden Routinen zu Einheiten zusammengefasst
Im Unterschied dazu werden beim so genannten prozeduralen Paradigma die Daten von den darauf arbeitenden Routinen getrennt gehalten. [Bearbeiten]
Geschichte der objektorientierten Programmierung
die als erste Sprache (damals noch nicht so genannte) objektorientierte Verfahren einführte
einer Sprache für Simulationszwecke
Denkweise und Begriffe der OOP zeigten sich zuerst in Simula
Diese Begriffe und Verfahren wurden später bei Xerox PARC mit der Sprache Smalltalk verfeinert
Entwickelt wurde diese erste Smalltalk-Version in Simula nun als voll dynamisches System
bei dem man Objekte interaktiv erzeugen und ändern konnte – im Gegensatz zum vorher verwendeten System statischer Programme
das sich dem Programmierer gegenüber gewissermaßen als syntaktische Erweiterung der Sprache C ausgibt
Die objektorientierte Programmierung (OOP) begann Mitte der 1980er Jahre populärer zu werden
hauptsächlich durch den Einfluss von C++
die sich objektorientiert sehr gut programmieren lassen
Weiter gefestigt wurde die Stellung der OOP durch die schnell wachsende Beliebtheit der grafischen Bedienoberflächen
Seit dieser Zeit wurden für viele existierende Programmiersprachen objektorientierte Erweiterungen geschaffen
z.B. für Ada
Pascal und andere
LISP
BASIC
an die sich viele Programmierer inzwischen gewöhnt hatten
Das Hinzufügen dieser Erweiterungen zu Sprachen
die ursprünglich nicht für OOP entworfen wurden
kann zu Problemen mit der Kompatibilität und Wartbarkeit von Code führen. "Rein" objektorientierten Sprachen wiederum fehlen gewisse prozedurale Programmiermöglichkeiten
wurden verschiedene Versuche unternommen
neue objektorientierte Sprachen zu schaffen
Um diese Lücke zu schließen
die gleichzeitig "sichere" prozedurale Programmierung erlauben
für das Java speziell geeignet ist
Die Programmiersprache Eiffel war einer der ersten einigermaßen erfolgreichen Versuche in dieser Richtung
wurde inzwischen aber praktisch von Java verdrängt - hauptsächlich durch die Ausbreitung des Internets
Einen ähnlichen Ansatz verfolgt die an Java und C++ angelehnte Sprache C#. [Bearbeiten]
Umfeld
so gibt es inzwischen auch Verfeinerungen der OOP durch Methoden wie Entwurfsmuster (englisch design patterns)
So wie die Techniken der prozeduralen Programmierung durch Verfahren wie die strukturierte Programmierung verfeinert wurden
Design by Contract (DBC) und grafische Modellierungssprachen wie UML
Einen immer wichtigeren Stellenwert nimmt die funktionale bzw. aspektorientierte Programmierung ein
bei dem Aspekte von Eigenschaften und Abhängigkeiten beschrieben werden
Erste Ansätze sind beispielsweise in Java mit J2EE oder der abstrakten Datenhaltung über Persistenz-Layer sichtbar. [Bearbeiten]
Literatur
William Premerlani
Addison-Wesley
John Vlissides: Design Patterns: Elements of Reusable Object Oriented Software
ISBN 3-12-738700-8 Erich Gamma
ISBN 0201633612 Bertrand Meyer: Object-Oriented Software Construction
Ralph Johnson
Prentice Hall
ISBN 0262011530 Paul Harmon
ISBN 0136298419 Ivar Jacobsen: Object-Oriented Software Engineering: A Use-Case-Driven Approach
Michael Blaha
ISBN 0136291554 James Rumbaugh
ISBN 0201544350 Harold Abelson
William Lorensen: Object-Oriented Modeling and Design
The MIT Press
Frederick Eddy
ISBN 0805353402 Peter Damann: Objektorientierte Programmierung mit Delphi
Gerald Jay Sussman
Klett Verlag
John Wiley & Sons
Richard Helm
Julie Sussman: Structure and Interpretation of Computer Programs
Addison-Wesley
William Morrissey: The Object Technology Casebook - Lessons from Award-Winning Business Applications
Prentice Hall
Grady Booch: Object-Oriented Analysis and Design with Applications
ISBN 0-471-14717-6 David A
Addison-Wesley
John Wiley & Sons
Oliver Sims: Building Business Objects
ISBN 0-471-19176-0 Bernd Oestereich: Objektorientierte Programmierung mit der Unified Modeling Language
John Wiley & Sons
ISBN 3-486-24319-5 [Bearbeiten]
ISBN 0-471-54364-0 Peter Eeles
Oldenbourg
Taylor: Object-Oriented Information Systems - Planning and Implementation
Siehe auch
Programmierparadigma Objektorientierte Programmiersprache Reflexion (Programmierung) Schnittstelle (objektorientierte Programmierung) Instanz (Informatik) Entwurfsmuster Liskovsches Substitutionsprinzip CORBA DCOM [Bearbeiten]
Weblinks
http://www.b.shuttle.de/b/humboldt-os/python/kapitel1/oop.html http://www.b.shuttle.de/b/humboldt-os/python/kapitel1/klassen.html http://www-lehre.informatik.uni-osnabrueck.de/~dbs/2001/skript/node157.html http://www.ica1.uni-stuttgart.de/Courses_and_Lectures/C++/script/node19.html http://www.learnline.de/angebote/oop/medio/didaktik/grundlagen/warum.html http://www.oszhdl.be.schule.de/gymnasium/faecher/informatik/oop/ ca:Orientació a objectes da:Objektorienteret en:Object-oriented programming es:Programación orientada a objetos fr:Programmation orientée objet he:×ª×›× ×•×ª ×ž×•× ×—×” עצמי×? ja:オブジェクト指å?‘ ms:Pengaturcaraan Berorientasikan Objek nl:Object-oriëntatie pl:Programowanie obiektowe pt:Object Orientation ru:Объектно-ориентированное программирование sv:Objektorienterad programmering zh-cn:é?¢å?‘对象的程åº?设计
[X] Schliessen
Dieser Artikel basiert auf dem Artikel
Objektorientierte Programmierung
aus der freien Enzyklopädie
wikipedia
und steht unter der
GNU Lizenz für freie Dokumentation
. In der wikipedia ist eine
Liste der Autoren
verfügbar.
Handball
Charite
Buch
Unia Pracy
JakobVoss
Christian Wulff
Bundesländer
Landtagswahl
Antiqua
[ Zurück ]
Inhalt Lexikon:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
1
2
3
4
5
6
7
8
9
Chat
|
Lexikon
|
Reisen
|
Versicherung
|
Forum
|
Kontakt