Was ist objektorientierte Programmierung? (Was ist objektorientierte Programmierung?), Lektion, Seite 723125
https://www.purl.org/stefan_ram/pub/oop (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Programmieren

Was ist objektorientierte Programmierung?

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.” – Alan Kay, der 1967 den Begriff “object-oriented programming ” prägte

Objektorientierte Programmierung läßt sich vorwiegend als eine Kombination zweier Programmierstile verstehen:

Dennoch sollte man nicht vergessen, worauf auf Meyer hinweist:

Structured programming is the basis for all that has been done […] in programming methodology, including object-oriented programming. ” – Bertrand Meyer, 2009

Programmierung mit benutzerdefinierten ADTs

Ein Objekt eines abstrakten Datentyps (ADT) ist ein Interpretierer von Aufrufen (Nachrichten). Sein Typ ist eine Menge von Signaturen (Schnittstellen) zusammen mit ihren Implementationen. Die Art der Repräsentation und die Implementationen der einzelnen Signaturen werden dabei vor den Klienten versteckt.

Laufzeitpolymorphie

Bei der Laufzeitpolymorphie (=späte Bindung) wird einem Paar aus einem polymorphen Referenzspeicher und einem Aufruf eine Methode zugeordnet. Diese Zuordnung erfolgt an Hand des Typs des referenzierten Objektes und der Signatur des Aufrufs. Ein polymorpher Referenzspeicher kann Objekte verschiedener Typen enthalten. Bei jeder Auswertung des Paares wird dann der jeweils aktuelle Typ herangezogen.

Welche Vorteile hat objektorientierte Programmierung?

Procedural code (code using data structures) makes it easy to add new functions without changing the existing data structures. OO code, on the other hand, makes it easy to add new classes without changing existing functions.” – Robert Cecil Martin

Procedural code makes it hard to add new data structures because all the functions must change. OO code makes it hard to add new functions because all the classes must change.” – Robert Cecil Martin

Welche Vorteile hat die Programmierung mit ADTs?

Repräsentationen und Implementationen können geändert werden, ohne daß dies Anpassungen der Klienten erforderlich macht. Dadurch können größere Programme einfacher gewartet werden. Ohne Unterteilung eines Programms in verschiedene durch Schnittstellen verbundene Bereiche und ohne die Beibehaltung dieser Schnittstelle bei Änderungen könnte es öfter passieren, daß Änderungen an einer Stelle eines Programms eine Kaskade von Änderungen an anderen Stellen erforderlich machen, bis hin zu dem Punkt, an dem Änderungen so schwierig werden, daß sie praktisch undurchführbar werden.

ADTs könnten Einheiten darstellen, die in mehreren verschiedenen Programmen verwendet werden können, so daß das Erstellen eines neueren Programmes durch die Wiederverwendung bereits vorhandener oder erhältlicher ADTs weniger aufwendig wird.

Komplexität wird hinter einer Schnittstelle versteckt, wodurch Programme besser verständlich sind.

Welche Vorteile hat die Programmierung mit Laufzeitpolymorphie?

Bei der objektorientierten Programmierung kann die Implementation einer Signatur durch Hinzufügen einer neuen Typdefinition erweitert werden, ohne daß vorhandene Typendefinitionen dazu verändert werden müssen. Dies erleichtert die Organisation des Quellcodes und die Wartung der Software.

Betrachten wir einmal die Situation in einer prozeduralen Sprache ohne Polymorphie: Anton liefert eine Prozedur »toString«, welche ein Objekt als Zeichenfolge darstellen soll:

Prozedur »toString«

public static java.lang.String toString( final java.lang.Object o )
{

if( o instanceof java.lang.Boolean )
return ( java.lang.Boolean )o ? "true" : "false";

else if( o instanceof java.lang.Integer )
{ String s = ""; int n =(( java.lang.Integer ) o ).intValue();
boolean negative = false;
if( n < 0 ){ negative = true; n = -n; }
do { s = n%10 + s; n /= 10; }while( n != 0 );
return negative ? "-" + s : s; }

else return null; }

Berta liefert eine neue Klasse »B«. Was ist »toString( b )«? – Es ist »null«. Die Prozedur »toString« konnte ja nicht wissen, daß es später einmal eine Klasse »B« geben wird! Daher berücksichtigt »toString« die neue Klasse »B« nicht.

In der objektorientierten Programmierung kann das Verb »toString« aber von Berta selber für ihren neuen Typ erweitert werden. Während Prozeduren eines Prozedurproduzenten Anton von einem Typproduzenten Berta nicht für ihren neuen Typ erweiterte werden können, können Verben vom Produzenten eines Typs für ihren neuen Typ erweitert werden.

Man muß sich im Klaren darüber sein, daß die Laufzeitpolymorphie eine Technik zum Umgang mit Laufzeittypen  ist. Um zu verstehen, welchen Nutzen sie hat, muß man daher erst einmal erkennen, wann Laufzeittypen überhaupt benötigt werden – beispielsweise bei einer Wertequelle, die Werte unterschiedlicher Typen liefern soll, wobei der Typ eines gelieferten Werts erst bei der Lieferung (also zur Laufzeit) festgelegt werden kann. Insofern ist die objektorientierte Programmierung eine Technik zum Umgang mit Laufzeittypen.

Wodurch wurde die objektorientierte Programmierung populär?

Man sucht nach Lösungen der Software-Krise. Kandidaten sind Vorgehensweisen wie einst die strukturierte Programmierung oder heute die objektorientierte Programmierung.

Die angeblichen Vorteile bestimmter Vorgehensweisen werden jedoch oft als Behauptung ohne Beweis vorgetragen, es gibt wenig empirische Studien, welche eindeutig die Überlegenheit des einen Ansatzes über den anderen zeigen.

Verweise

>720702 objektorientierte Programmierung (frühere Version dieser Seite)

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723125 stefan_ram:723125 Was ist objektorientierte Programmierung? Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723125, slrprddef723125, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/oop