Objektorientierte Programmierung
Rheinwerk (Verlag)
978-3-8362-6247-7 (ISBN)
- Titel ist leider vergriffen;
keine Neuauflage - Artikel merken
- Unverzichtbare Skills für guten Code
- Von den Prinzipien über den Entwurf bis zur Umsetzung
- Viele Praxistipps, UML-Diagramme und Codebeispiele
Komplexe Projekte solide strukturieren, tragfähige Designs erstellen, guten Code schreiben und wartbare Software liefern: Dafür brauchen Entwickler ein Repertoire, aus dem Objektorientierung nicht mehr wegzudenken ist.
In diesem Buch finden Sie alles, was Sie brauchen, um sich in die Objektorientierung einzuarbeiten und ihre Prinzipien zur Basis Ihrer eigenen Arbeit zu machen. Die Autoren erläutern alle Themen anschaulich und verständlich anhand einer Vielzahl typischer Beispiele.
Mit UML-Diagrammen und gut kommentierten Codebeispielen in den gängigsten objektorientierten Sprachen bringen sie Ihnen die Umsetzung nahe. Da der Teufel bekanntlich im Detail steckt, ziehen sie viele praktische Anwendungsfälle heran und geben immer wieder Tipps, wie Sie bad smells vermeiden und sauberen Code schreiben.
Anhand eines größeren Projekts bekommen Sie zudem einmal von Anfang bis Ende gezeigt, wie Sie OOP konsequent realisieren können. So profitieren Sie von der langjährigen Erfahrung der Autoren mit allen Aspekten der Entwicklung komplexer Software.
Einstieg und Grundlagen
Machen Sie sich mit Begriffen wie Polymorphie, Kapselung und Komposition vertraut. Lernen Sie die Prinzipien des objektorientierten Entwurfs kennen und anwenden. So sorgen Sie schon zu Beginn Ihrer Projekte für Stabilität und Erweiterbarkeit und schreiben Code, der auch übermorgen noch geschätzt wird.
Details, aber ohne den Teufel
Erst bei der Lösung konkreter Probleme kommen die lehrreichen Details auf den Tisch. Unsere Autoren nehmen sie sich nacheinander vor und bleiben dabei immer praktisch. Sie diskutieren die Pros und Cons verschiedener Designs, analysieren Implementierungen und geben viele wertvolle Tipps.
Von der Theorie zur Praxis
Zahlreiche UML-Diagramme und Codebeispiele in den gängigsten OOP-Sprachen zeigen Ihnen, wie Sie die Theorie der Objektorientierung am besten umsetzen. Ein umfassendes Abschlussprojekt stellt alles Gelernte noch einmal im Zusammenhang dar. Programmiererfahrung ist vorausgesetzt, bestimmte Sprachkenntnisse nicht.
Behandelt werden:
- Grundlagen der OOP
- Prinzipien des objektorientierten Entwurfs
- Polymorphie und Vererbung
- Objektorientierte Persistenzverfahren
- Zahlreiche Praxisbeispiele
- Objektorientierung auch ohne Klassen
- UML-Diagrammtypen
- Wichtige Entwurfsmuster
- Code Smells und Gegenmittel
Diplom-Informatiker Bernhard Lahres arbeitet als Software-Architekt in großen Projekten im Finanz- und Telekommunikationsbereich. Sein Fokus liegt dabei auf der Anwendung objektorientierter Verfahren und deren Integration in den Software-Entwicklungsprozess.
Gregor Raýman ist Diplom-Mathematiker und technischer Architekt bei Oracle Consulting. Er arbeitet als Softwareentwickler und Berater in den Branchen Industrie, Automobilindustrie, Dienstleistung und Telekommunikation.
Stefan Strich ist als Diplom-Informatiker in der Telekommunikationsbranche für komplexe Systeme verantwortlich, die ohne Objektorientierung nicht denkbar wären. Seine Berufserfahrung umfasst Branchen wie Automobilindustrie und Post und viele Seiten des Software Engineering von Entwicklung, Support, Projektleitung bis zum Delivery Management.
1
Einleitung
15
1.1
Was ist Objektorientierung?
15
1.2
Hallo liebe Zielgruppe
16
1.3
Was bietet dieses Buch (und was nicht)?
18
1.3.1
Bausteine des Buches
18
1.3.2
Crosscutting Concerns: übergreifende Anliegen
21
1.3.3
Die Rolle von Programmiersprachen
23
1.4
Warum überhaupt Objektorientierung?
24
1.4.1
Gute Software: Was ist das eigentlich?
25
1.4.2
Die Rolle von Prinzipien
26
1.4.3
Viele mögliche Lösungen für ein Problem
27
2
Die Basis der Objektorientierung
29
2.1
Die strukturierte Programmierung als Vorläufer der Objektorientierung
30
2.2
Die Kapselung von Daten
33
2.3
Polymorphie
35
2.4
Die Vererbung
36
2.4.1
Vererbung der Spezifikation
36
2.4.2
Vererbung von Umsetzungen (Implementierungen)
37
3
Die Prinzipien des objektorientierten Entwurfs
41
3.1
Prinzip 1: Prinzip einer einzigen Verantwortung
42
3.2
Prinzip 2: Trennung der Anliegen
47
3.3
Prinzip 3: Wiederholungen vermeiden
49
3.4
Prinzip 4: offen für Erweiterung, geschlossen für Änderung
52
3.5
Prinzip 5: Trennung der Schnittstelle von der Implementierung
55
3.6
Prinzip 6: Umkehr der Abhängigkeiten
58
3.6.1
Umkehrung des Kontrollflusses
62
3.7
Prinzip 7: Mach es testbar
64
4
Die Struktur objektorientierter Software
67
4.1
Die Basis von allem: das Objekt
67
4.1.1
Eigenschaften von Objekten: Objekte als Datenkapseln
69
4.1.2
Operationen und Methoden von Objekten
76
4.1.3
Kontrakte: ein Objekt trägt Verantwortung
81
4.1.4
Die Identität von Objekten
83
4.1.5
Objekte haben Beziehungen
85
4.2
Klassen: Objekte haben Gemeinsamkeiten
86
4.2.1
Klassen sind Modellierungsmittel
87
4.2.2
Kontrakte: die Spezifikation einer Klasse
91
4.2.3
Klassen sind Datentypen
95
4.2.4
Klassen sind Module
105
4.2.5
Sichtbarkeit von Daten und Methoden
108
4.2.6
Klassenbezogene Methoden und Attribute
115
4.2.7
Singleton-Methoden: Methoden für einzelne Objekte
120
4.3
Beziehungen zwischen Objekten
121
4.3.1
Rollen und Richtung einer Assoziation
123
4.3.2
Navigierbarkeit
124
4.3.3
Multiplizität
124
4.3.4
Qualifikatoren
129
4.3.5
Beziehungsklassen, Attribute einer Beziehung
130
4.3.6
Implementierung von Beziehungen
132
4.3.7
Komposition und Aggregation
133
4.3.8
Attribute
136
4.3.9
Beziehungen zwischen Objekten in der Übersicht
137
4.4
Klassen von Werten und Klassen von Objekten
137
4.4.1
Werte in den objektorientierten Programmiersprachen
138
4.4.2
Entwurfsmuster »Fliegengewicht«
141
4.4.3
Aufzählungen (Enumerations)
144
4.4.4
Identität von Objekten
147
5
Vererbung und Polymorphie
157
5.1
Die Vererbung der Spezifikation
157
5.1.1
Hierarchien von Klassen und Unterklassen
158
5.1.2
Unterklassen erben die Spezifikation von Oberklassen
159
5.1.3
Das Prinzip der Ersetzbarkeit
163
5.1.4
Abstrakte Klassen, konkrete Klassen und Schnittstellenklassen
169
5.1.5
Vererbung der Spezifikation und das Typsystem
178
5.1.6
Sichtbarkeit im Rahmen der Vererbung
185
5.2
Polymorphie und ihre Anwendungen
196
5.2.1
Dynamische Polymorphie am Beispiel
197
5.2.2
Methoden als Implementierung von Operationen
202
5.2.3
Anonyme Klassen
211
5.2.4
Single und Multiple Dispatch
213
5.2.5
Die Tabelle für virtuelle Methoden
231
5.3
Die Vererbung der Implementierung
242
5.3.1
Überschreiben von Methoden
245
5.3.2
Das Problem der instabilen Basisklassen
253
5.3.3
Problem der Gleichheitsprüfung bei geerbter Implementierung
258
5.4
Mehrfachvererbung
265
5.4.1
Mehrfachvererbung: Möglichkeiten und Probleme
265
5.4.2
Delegation statt Mehrfachvererbung
273
5.4.3
Mixin-Module statt Mehrfachvererbung
275
5.4.4
Die Problemstellungen der Mehrfachvererbung
279
5.5
Statische und dynamische Klassifizierung
294
5.5.1
Entwurfsmuster »Strategie« statt dynamischer Klassifizierung
295
5.5.2
Dynamische Änderung der Klassenzugehörigkeit
300
6
Persistenz
305
6.1
Serialisierung von Objekten
305
6.2
Speicherung in Datenbanken
306
6.2.1
Relationale Datenbanken
306
6.2.2
Struktur der relationalen Datenbanken
307
6.2.3
Begriffsdefinitionen
307
6.3
Abbildung auf relationale Datenbanken
313
6.3.1
Abbildung von Objekten in relationalen Datenbanken
313
6.3.2
Abbildung von Beziehungen in relationalen Datenbanken
317
6.3.3
Abbildung von Vererbungsbeziehungen auf eine relationale Datenbank
321
6.4
Normalisierung und Denormalisierung
326
6.4.1
Die erste Normalform: es werden einzelne Fakten gespeichert
327
6.4.2
Die zweite Normalform: alles hängt vom ganzen Schlüssel ab
329
6.4.3
Die dritte Normalform: keine Abhängigkeiten unter den Nichtschlüsselspalten
332
6.4.4
Die vierte Normalform: Trennung unabhängiger Relationen
336
6.4.5
Die fünfte Normalform: einfacher geht’s nicht
338
7
Abläufe in einem objektorientierten System
343
7.1
Erzeugung von Objekten mit Konstruktoren und Prototypen
344
7.1.1
Konstruktoren: Klassen als Vorlagen für ihre Exemplare
344
7.1.2
Prototypen als Vorlagen für Objekte
348
7.1.3
Entwurfsmuster »Prototyp«
354
7.2
Fabriken als Abstraktionsebene für die Objekterzeugung
355
7.2.1
Statische Fabriken
359
7.2.2
Abstrakte Fabriken
362
7.2.3
Konfigurierbare Fabriken
367
7.2.4
Registraturen für Objekte
371
7.2.5
Fabrikmethoden
375
7.2.6
Erzeugung von Objekten als Singletons
384
7.2.7
Dependency Injection
393
7.3
Objekte löschen
404
7.3.1
Speicherbereiche für Objekte
404
7.3.2
Was ist eine Garbage Collection?
406
7.3.3
Umsetzung einer Garbage Collection
407
7.4
Objekte in Aktion und in Interaktion
419
7.4.1
UML: Diagramme zur Beschreibung von Abläufen
419
7.4.2
Nachrichten an Objekte
428
7.4.3
Iteratoren und Generatoren
428
7.4.4
Funktionsobjekte und ihr Einsatz als Eventhandler
440
7.4.5
Kopien von Objekten
450
7.4.6
Sortierung von Objekten
460
7.5
Kontrakte: Objekte als Vertragspartner
463
7.5.1
Überprüfung von Kontrakten
463
7.5.2
Übernahme von Verantwortung: Unterklassen in der Pflicht
465
7.5.3
Prüfungen von Kontrakten bei Entwicklung und Betrieb
478
7.6
Exceptions: wenn der Kontrakt nicht eingehalten werden kann
479
7.6.1
Exceptions in der Übersicht
480
7.6.2
Exceptions und der Kontrollfluss eines Programms
486
7.6.3
Exceptions im Einsatz bei Kontraktverletzungen
493
7.6.4
Exceptions als Teil eines Kontrakts
497
7.6.5
Der Umgang mit Checked Exceptions
502
7.6.6
Exceptions in der Zusammenfassung
509
8
Module und Architektur
511
8.1
Module als konfigurierbare und änderbare Komponenten
511
8.1.1
Relevanz der Objektorientierung für die Softwarearchitektur
511
8.1.2
Erweiterung von Modulen
513
8.2
Die Präsentationsschicht: Model, View, Controller (MVC)
520
8.2.1
Das Beobachter-Muster als Basis von MVC
520
8.2.2
MVC in Smalltalk: Wie es ursprünglich mal war
521
8.2.3
MVC: Klärung der Begriffe
522
8.2.4
MVC in Webapplikationen: genannt »Model 2«
527
8.2.5
MVC mit Fokus auf die Testbarkeit: Model-View-Presenter
529
9
Aspekte und Objektorientierung
533
9.1
Trennung der Anliegen
533
9.1.1
Kapselung von Daten
537
9.1.2
Lösungsansätze zur Trennung von Anliegen
538
9.2
Aspektorientiertes Programmieren
545
9.2.1
Integration von aspektorientierten Verfahren in Frameworks
545
9.2.2
Bestandteile der Aspekte
546
9.2.3
Dynamisches Crosscutting
547
9.2.4
Statisches Crosscutting
554
9.3
Anwendungen der Aspektorientierung
556
9.3.1
Zusätzliche Überprüfungen während der Übersetzung
557
9.3.2
Logging
558
9.3.3
Transaktionen und Profiling
559
9.3.4
Design by Contract
562
9.3.5
Introductions
565
9.3.6
Aspektorientierter Observer
566
9.4
Annotations
569
9.4.1
Zusatzinformation zur Struktur eines Programms
569
9.4.2
Annotations im Einsatz in Java und C#
571
9.4.3
Beispiele für den Einsatz von Annotations
573
10
Objektorientierung am Beispiel: eine Webapplikation in JavaScript
579
10.1
OOP in JavaScript
581
10.1.1
Objekte in JavaScript
582
10.1.2
Vererbung: JavaScript kennt keine Klassen
582
10.1.3
Datenkapselung durch Closures
585
10.2
Die Anwendung im Überblick
588
10.2.1
Architekturentscheidungen als Basis
588
10.2.2
Die Komponenten der Anwendung
592
10.3
Das Framework
593
10.3.1
Controller: zentrale Repräsentation von Diensten
595
10.3.2
Aktionen: Operationen auf Datenmodellen
602
10.3.3
Views: verschiedene Sichten auf die Daten
608
10.4
Die Applikation
611
10.4.1
Anwendungsfälle und das Design der Applikation
611
10.4.2
Eine eigene Ableitung des Controllers – und der Dienst »team_lesen«
613
10.4.3
Modelle zur Datenhaltung
618
10.4.4
Aktionen zur Durchführung von Fachlogik
622
10.4.5
Views für unterschiedliche Repräsentationen der Daten
625
10.5
Ein Fazit – und was noch übrig bleibt
635
Anhang
637
A
Verwendete Programmiersprachen
639
B
Glossar
659
C
Die Autoren
673
Index
675
Erscheinungsdatum | 29.05.2018 |
---|---|
Reihe/Serie | Rheinwerk Computing |
Verlagsort | Bonn |
Sprache | deutsch |
Maße | 168 x 240 mm |
Einbandart | gebunden |
Themenwelt | Mathematik / Informatik ► Informatik ► Programmiersprachen / -werkzeuge |
Informatik ► Software Entwicklung ► Objektorientierung | |
Schlagworte | C# • C++ • guter Code • Hand-Buch Anleitung Einführung Tutorial Grundlagen lernen Ideen Tipps Workshops Ausbildung Rheinwerk-Verlag Galileo Computing • Java • Objektorientierte Analyse Design • Objektorientierte Analyse und Design • Objektorientierung • OOP • Programmierung • Python • UML |
ISBN-10 | 3-8362-6247-9 / 3836262479 |
ISBN-13 | 978-3-8362-6247-7 / 9783836262477 |
Zustand | Neuware |
Haben Sie eine Frage zum Produkt? |
aus dem Bereich