Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einleitung
2 Die Basis der Objektorientierung
3 Die Prinzipien des objektorientierten Entwurfs
4 Die Struktur objektorientierter Software
5 Vererbung und Polymorphie
6 Persistenz
7 Abläufe in einem objektorientierten System
8 Module und Architektur
9 Aspekte und Objektorientierung
10 Objektorientierung am Beispiel: Eine Web-Applikation mit PHP 5 und Ajax
A Verwendete Programmiersprachen
B Literaturverzeichnis
Stichwort
Ihre Meinung?

Spacer
 <<   zurück
Objektorientierte Programmierung von Bernhard Lahres, Gregor Rayman
Das umfassende Handbuch
Buch: Objektorientierte Programmierung

Objektorientierte Programmierung
2., aktualisierte und erweiterte Auflage, geb.
656 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1401-8
Pfeil 1 Einleitung
  Pfeil 1.1 Was ist Objektorientierung?
  Pfeil 1.2 Hallo liebe Zielgruppe
  Pfeil 1.3 Was bietet dieses Buch (und was nicht)?
    Pfeil 1.3.1 Bausteine des Buchs
    Pfeil 1.3.2 Crosscutting Concerns: übergreifende Anliegen
    Pfeil 1.3.3 Die Rolle von Programmiersprachen
  Pfeil 1.4 Warum überhaupt Objektorientierung?
    Pfeil 1.4.1 Gute Software: Was ist das eigentlich?
    Pfeil 1.4.2 Die Rolle von Prinzipien
    Pfeil 1.4.3 Viele mögliche Lösungen für ein Problem


Rheinwerk Computing - Zum Seitenanfang

1.3 Was bietet dieses Buch (und was nicht)?  Zur nächsten ÜberschriftZur vorigen Überschrift

Objektorientierung ist eine Vorgehensweise, die den Fokus auf modulare Systeme legt. Dieses Modulprinzip legen wir in zweierlei Hinsicht auch diesem Buch zugrunde.

Zum einen sehen wir das Buch als einen Baustein, der beim Verständnis des Themas Objektorientierung eine zentrale Rolle spielt. Wir beschreiben, wie Sie Objektorientierung einsetzen können, um auf der Grundlage von zentralen Prinzipien beherrschbare und änderbare Software erstellen können. Wenn wir auf diesem Weg an Entwurfsmustern vorbeikommen, werden wir diese vorstellen und ihren Nutzen für den Entwurf oder die aktuelle Problemstellung erläutern.

Zum anderen bauen die Kapitel des Buchs modular aufeinander auf. Ausgehend von abstrakten Prinzipien gehen wir immer weiter in die konkrete Anwendung der Objektorientierung. Diesen modularen Aufbau wollen wir in einer Übersicht kurz vorstellen.


Rheinwerk Computing - Zum Seitenanfang

1.3.1 Bausteine des Buchs  Zur nächsten ÜberschriftZur vorigen Überschrift

Abbildung 1.1 stellt die einzelnen Kapitel als Bausteine in der Übersicht dar.

Abbildung 1.1    Modularer Aufbau der Kapitel

Kapitel 2: Basis

In Kapitel 2, »Die Basis der Objektorientierung«, stellen wir zunächst die grundlegenden Unterschiede der objektorientierten Vorgehensweise im Vergleich zur strukturierten Programmierung vor. Wir beschreiben dort auch im Überblick die Basismechanismen der Objektorientierung: Datenkapselung, Polymorphie und Vererbung.

Kapitel 3: Prinzipien

Danach schließt sich Kapitel 3, »Die Prinzipien des objektorientierten Entwurfs«, an. Das Kapitel stellt die grundlegenden Prinzipien vor, die für den objektorientierten Ansatz entscheidend sind. In Abschnitt 1.1 haben wir einen kleinen Dialog vorgestellt, in dem die grundlegenden Eigenschaften von objektorientierten Sprachen angesprochen werden. Genau wie die dort genannten Eigenschaften geben auch die Prinzipien der Objektorientierung einen Rahmen für eine bestimmte Art der Softwareentwicklung vor. Die Prinzipien sind zentral für das Vorgehen bei der Entwicklung von objektorientierter Software. Das Kapitel legt also die grundsätzliche Basis, ohne bereits detailliert auf Objekte, Klassen oder Ähnliches einzugehen.

Kapitel 4: Struktur

Anschließend erläutern wir in Kapitel 4, »Die Struktur objektorientierter Software«, das Konzept von Objekten, Klassen und der darauf aufbauenden Möglichkeiten. Wir erläutern das Konzept der Klassifizierung und betrachten die Rolle der Klassen als Module. Den verschiedenen Arten, in denen Objekte untereinander in Beziehung stehen können, ist ebenfalls ein Teilkapitel gewidmet.

Kapitel 5: Vererbung und Polymorphie

In Kapitel 5, »Vererbung und Polymorphie«, gehen wir darauf ein, wie die Vererbung der Spezifikation – im Zusammenspiel mit der Fähigkeit der Polymorphie – Programme flexibel und erweiterbar halten kann. Wir gehen dabei auf die verschiedenen Varianten der Vererbung im Detail ein und stellen deren Möglichkeiten und Probleme vor. An Beispielen erläutern wir dabei auch, wie die Möglichkeiten der Polymorphie am besten genutzt werden können.

Kapitel 6: Persistenz

Kapitel 6, »Persistenz«, beschreibt, wie Objekte in relationalen Datenbanken gespeichert werden können. In fast allen Anwendungen taucht die Notwendigkeit auf, dass Objekte persistent gespeichert werden müssen. Wir stellen die Abbildungsregeln für Vererbungsbeziehungen und andere Beziehungen zwischen Objekten und Klassen auf eine relationale Datenbank vor. Schließlich setzen wir diese Abbildungsregeln in Beziehung zu den verschiedenen Stufen der Normalisierung in einer relationalen Datenbank.

Kapitel 7: Abläufe

In Kapitel 7, »Abläufe in einem objektorientierten System«, beschreiben wir die Vorgänge innerhalb des Lebenszyklus von Objekten. Wir gehen detailliert auf die Erzeugung von Objekten ein und erläutern, wie Sie ein System erweiterbar halten, indem Sie möglichst flexible Methoden der Objekterzeugung einsetzen. Außerdem enthält das Kapitel Beschreibungen von Interaktionsszenarien, die sich häufig in objektorientierten Systemen finden. Der Abschluss des Objektlebenszyklus, der meist über den Mechanismus der Garbage Collection stattfindet, wird ebenfalls in diesem Kapitel beschrieben.

Kapitel 8: Architektur

In Kapitel 8, »Module und Architektur«, stellen wir Beispiele dafür vor, wie objektorientierte Entwürfe in reale Systeme integriert werden. Wir stellen das Konzept von in der Praxis verwendeten Ansätzen wie Frameworks und Anwendungscontainern vor. Am Beispiel der Präsentationsschicht einer Anwendung erläutern wir, wie objektorientierte Verfahren die Interaktionen in einem System strukturieren können. Dazu stellen wir das Architekturmuster Model-View-Controller (MVC) und dessen Einsatzszenarien vor.

Kapitel 9: Aspekte

In Kapitel 9, »Aspekte und Objektorientierung«, stellen wir dar, wie sich eine Reihe von Einschränkungen der objektorientierten Vorgehensweise durch Aspektorientierung aufheben lässt. Wir erläutern, welche Beschränkungen der objektorientierten Vorgehensweise überhaupt zur Notwendigkeit einer aspektorientierten Sichtweise führen. Die Verwaltung von sogenannten übergreifenden Anliegen (engl. Crosscutting Concerns) ist mit den Mitteln der klassischen objektorientierten Programmierung nur sehr aufwändig zu realisieren. Bei Crosscutting Concerns handelt es sich um Anforderungen, die mit Mitteln der Objektorientierung nur klassen- oder komponentenübergreifend realisiert werden können.

Deshalb zeigen wir in diesem Kapitel verschiedene Möglichkeiten auf, Lösungen dafür in objektorientierte Systeme zu integrieren. Wir erläutern den Weg zu den aspektorientierten Lösungen und stellen diese an praktischen Beispielen vor.

Kapitel 10: Objektorientierung am Beispiel einer Web-Applikation

Abgerundet wird unser Buch dann durch Kapitel 10, »Objektorientierung am Beispiel: Eine Web-Applikation mit PHP 5 und Ajax«. Dort greifen wir am Beispiel einer Web-Anwendung eine ganze Reihe von Konzepten auf, die in den vorhergehenden Kapiteln erläutert wurden. Im Kontext einer einfachen, aber vollständigen Web-Anwendung auf Basis von PHP 5 und Ajax stellen wir Schritt für Schritt vor, wie Geschäftslogik und Präsentationsschicht durch objektorientierte Vorgehensweisen klar voneinander entkoppelt werden. Dabei gehen wir auch darauf ein, durch welchen Aufbau ein Austausch von Teilen der Präsentationsschicht erleichtert wird.

Anhang: Programmiersprachen

Im Anhang werden wir die im Buch verwendeten Programmiersprachen jeweils mit einer Kurzreferenz vorstellen und Hinweise auf weitere Informationen geben.


Rheinwerk Computing - Zum Seitenanfang

1.3.2 Crosscutting Concerns: übergreifende Anliegen  Zur nächsten ÜberschriftZur vorigen Überschrift

Die beschriebenen Kapitel bauen in Form einer Modulstruktur aufeinander auf. Aber ähnlich wie bei der Strukturierung objektorientierter Software gibt es natürlich auch hier Themen, die übergreifend sind und sich nicht genau einem der Kapitel zuordnen lassen.

Im Folgenden gehen wir kurz darauf ein, welche Rolle diese weiteren Themengebiete spielen.

Unified Modeling Language

Die Unified Modeling Language (UML) hat sich mittlerweile als ein sinnvolles und weit verbreitetes Modellierungsmittel durchgesetzt. Wir werden die nach unserer Ansicht wichtigsten Darstellungselemente der UML anhand von Beispielen vorstellen. Wir werden diese dabei immer dann einführen, wenn die betreffende Modellierung für unser aktuell behandeltes Thema relevant wird. Wir verwenden die UML in der Regel auch zur Illustration von Strukturen und Abläufen.

Objektorientierte Analyse

Die objektorientierte Analyse betrachtet eine Domäne als System von kooperierenden Objekten. Obwohl objektorientierte Analysemethoden nicht unser zentrales Thema sind, werden wir diese immer dann heranziehen, wenn wir auf die Verbindung von Analyse und Design eingehen.

Entwurfsmuster

Entwurfsmuster (engl. Design Patterns) für den objektorientierten Entwurf wurden mit der Publikation Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software als Begriff geprägt. Die Autoren Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides führen dabei eine standardisierte Beschreibungsform für wiederkehrende Vorgehensweisen beim Entwurf guter objektorientierter Software ein [Allerdings sind auch die Autoren des Entwurfsmuster-Buchs mittlerweile nicht mehr bei allen der vorgestellten Muster davon überzeugt, dass es sich wirklich um empfehlenswerte Vorgehensweisen handelt. So hat sich beispielsweise das Entwurfsmuster »Singleton« mittlerweile einen eher fragwürdigen Ruf erarbeitet. ] . Aufgrund von Umständen, die mit der Sortierung unseres Alphabets zusammenhängen, wird die Publikation meist mit Erich Gamma assoziiert. Da das aber nicht korrekt ist, werden wir uns mit dem Namen [Entwurfsmuster 2004] darauf beziehen, da die aktuelle deutsche Ausgabe aus dem Jahr 2004 stammt und eine Verwechslungsgefahr mit anderen Entwurfsmusterbüchern in diesem Jahr nicht besteht.

Grundsätzlich sind solche Entwurfsmuster unabhängig davon, ob wir eine objektorientierte Vorgehensweise gewählt haben, da sie nur eine Schablone für gleichartige Problemstellungen sind. Allerdings hat sich in der Praxis herausgestellt, dass bei Verwendung von objektorientierten Methoden diese Muster einfacher zu erkennen und besser zu beschreiben sind.

In der Folge ist eine ganze Reihe von unterschiedlichen Entwurfsmustern entstanden, die meisten mit Bezug auf objektorientierte Methoden. In der Kategorie Anti-Patterns werden häufige Fehler beim Systementwurf zusammengefasst.

Wir werden eine ganze Reihe von Entwurfsmustern verwenden. Allerdings werden wir diese dann vorstellen, wenn ein Muster ein bestimmtes Thema gut illustriert oder dafür zentral ist. In diesem Fall geben wir eine kurze Vorstellung des Musters und erläutern dessen Anwendung.

Deutsche und englische Begriffe

Wir werden außerdem weitgehend deutsche Begriffe verwenden. Wenn allerdings der englische Begriff der wesentlich gängigere ist, werden wir diesen verwenden. Dies gilt auch, wenn eine deutsche Übersetzung die Bedeutung verzerren würde oder zu umständlich wird. So werden wir zum Beispiel den Begriff Multiple Dispatch verwenden, weil die in Frage kommenden Übersetzungen Multiple Verteilung oder Verteilung auf der Grundlage von mehreren Objekten nicht wesentlich erhellender oder aber sehr umständlich sind.

Wir werden die englische Entsprechung bei der ersten Erwähnung meist mit aufführen. So werden wir zum Beispiel das Prinzip Offen für Erweiterung, geschlossen für Änderung bei der ersten Erwähnung auch als Open Closed Principle vorstellen.


Rheinwerk Computing - Zum Seitenanfang

1.3.3 Die Rolle von Programmiersprachen  topZur vorigen Überschrift

Die meisten der von uns diskutierten Prinzipien der Objektorientierung finden sich in den objektorientierten Programmiersprachen wieder, entweder als direkte Sprachkonstrukte oder als Möglichkeiten bei der Programmierung.

Allerdings: Die Unterstützung variiert sehr stark zwischen den einzelnen objektorientierten Sprachen. Bestimmte Prinzipien werden nur von wenigen Sprachen unterstützt, andere in unterschiedlichem Ausmaß.

Wir haben deshalb eine überschaubare Anzahl von Programmiersprachen ausgewählt, um diese jeweils dann als Beispiel heranzuziehen, wenn ein bestimmtes Prinzip besonders gut (oder vielleicht auch besonders schlecht) unterstützt wird.

Objektorientierte Softwareentwicklung lässt sich nicht beschreiben, ohne auf die Entwicklung der objektorientierten Programmiersprachen einzugehen. Durch ihre jeweils spezifischen Möglichkeiten sind Programmiersprachen selbst sehr gute Beispiele dafür, wie Konzepte der Objektorientierung in der Praxis umgesetzt werden.

Alan Perlis hatte mit seiner Aussage völlig Recht, als er schrieb: Eine Programmiersprache, die nicht die Art beeinflusst, in der du über das Programmieren nachdenkst, ist es nicht wert, dass man sie kennt. [Das Originalzitat in Englisch lautet: »A language that doesn't affect the way you think about programming, is not worth knowing.« und ist enthalten in einem Artikel von Alan Perlis in den SIGPLAN Notices Vol. 17, No. 9, September 1982. ]

Deshalb werden Sie in den folgenden Kapiteln auch einiges über die Besonderheiten und speziellen Möglichkeiten von mehreren objektorientierten Sprachen erfahren. Alleine schon durch die Betrachtung der Unterschiede zwischen einzelnen Sprachen lassen sich Konzepte gut illustrieren. Jede der Sprachen hat ihre eigenen Stärken, jede macht bestimmte Sachen einfach. Jede hat ihre eigenen Idiome und Muster.

Wenn man mehrere Programmiersprachen kennt, lernt man oft neue Vorgehensweisen. Auch wenn man in der Praxis die meiste Zeit nur mit einer Programmiersprache arbeitet, lohnt es sich, auch einen Blick auf andere zu werfen. Vielleicht nur um die ausgetretenen Pfade zu verlassen und zu erkennen, dass manche Aufgaben, die man für schwierig hielt, sich in Wirklichkeit ganz einfach lösen lassen.

Hier also die Liste der Programmiersprachen, die sich in den Code-Beispielen wiederfinden:

  • Java Java ist natürlich dabei, weil es mittlerweile eine sehr verbreitete Sprache ist, die einen Fokus auf Objektorientierung setzt.
  • C++ Auch C++ hat immer noch einen hohen Verbreitungsgrad und unterstützt die Basisprinzipien der Objektorientierung zu großen Teilen.
  • JavaScript JavaScript wird hauptsächlich als Beispiel für eine objektorientierte Sprache, die mit Prototypen arbeitet, angeführt.
  • Ruby Ruby ist eine Skriptsprache, die wegen ihrer einfachen und intuitiven Handhabung immer beliebter wird. Ruby hat einen sehr starken Fokus auf Objektorientierung. Außerdem sind Klassenerweiterungen (Mixins) möglich.
  • C# Die von Microsoft entwickelte Sprache aus der .NET-Familie fasst eine ganze Reihe von Konzepten der Objektorientierung gut zusammen.
  • Python Python ist eine interaktive objektorientierte Skriptsprache, die nach der britischen Komikertruppe Monty Python benannt ist. Python betrachtet alle im Programm vorhandenen Daten als Objekte.

Wir werden Beispiele in den verschiedenen Sprachen immer dann einbringen, wenn sich eine Sprache gerade besonders gut zur Illustration eignet. Außerdem werden wir zur Erläuterung der aspektorientierten Erweiterungen zur Objektorientierung hauptsächlich AspectJ heranziehen.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 <<   zurück
  Zum Rheinwerk-Shop
Neuauflage: Objektorientierte Programmierung






Neuauflage:
Objektorientierte Programmierung

Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: C++ Handbuch






 C++ Handbuch


Zum Rheinwerk-Shop: Einstieg in Python






 Einstieg in Python


Zum Rheinwerk-Shop: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern