Sie sind hier
E-Book

Moderne C++ Programmierung

Klassen, Templates, Design Patterns

AutorRalf Schneeweiß
VerlagSpringer-Verlag
Erscheinungsjahr2006
Seitenanzahl413 Seiten
ISBN9783540459545
FormatPDF
KopierschutzDRM
GerätePC/MAC/eReader/Tablet
Preis6,99 EUR

C++ ist eine objektorientierte Programmiersprache, neben der Objektorientierung gewinnt aber die generische Programmierung mittels parametrisierbaren Klassen oder Templates zunehmend an Bedeutung, da diese Methode große Vorteile gegenüber der objektorientierten aufweist, wenn es darum geht, wiederverwendbaren Code zu schreiben.

Dieses Buch liefert eine fundierte Darstellung des modernen Programmdesigns in C++ gemäß dem ANSI/ISO-Standard. Der Autor gibt dabei zunächst ein kompaktes Repetitorium der grundlegenden Sprachelemente von C++ und erläutert dann detailliert die klassische objektorientierte Modellierung sowie die modernen Techniken der generischen Programmierung mittels Templates und Design Patterns.

Kaufen Sie hier:

Horizontale Tabs

Leseprobe

4 Generische und generative Programmierung mit C++ (S. 221-222)

Mit der Einführung von Templates in C++ hielt auch gleich ein ganz anderes Programmier-Paradigma Einzug in die Sprache. Templates stellen nichts zur Verfügung, das die Objektorientierte Programmierung in irgendeiner Weise unterstützen würde. Man muss in der Templateprogrammierung mit Vorgehensweisen arbeiten, die nichts mit der Objektorientierung zu tun haben. Doch welche Vorgehensweisen sind es dann, die man in der Templateprogrammierung einsetzen kann?

Eisenäcker und Czarnecki haben diese Frage in ihrem Buch „Generative Programming. Methods, Tools and Applications." [CzarneckiEisenecker00] etwas genauer untersucht und einen theoretischen Unterbau erarbeitet. Deshalb seien an dieser Stelle einigewichtige Ideen aus der genannten Publikation dargestellt: DieTemplateprogrammierungwirdauch gerne als„generische" Programmierung oder als „generative" Programmierung bezeichnet. Dabei bezeichnen dieAdjektive generisch und generativ zwei unterschiedlicheAspekte.Generisch bezeichnet die Anpassbarkeit eines Moduls, einer Komponente oder einfach eines Stücks Software an unterschiedliche Gegebenheiten und Anforderungen.

Generativ dagegen bedeutet dieMöglichkeit, etwas automatisch erzeugen zu lassen. Die Entwicklung von Vorlagen zur Erzeugung weiteren Codes und deren Nutzung bezeichnet man als generative Programmierung. BeideAspekte sind Domänen der Templateprogrammierung mehr als der Objektorientierung.Während die Objektorientierung eine Technologie der Strukturierung von Software ist, ist die generische und die generative Programmierung eine Technologie umWiederverwendbarkeit von Code zu erreichen. Auch wennWiederverwendbarkeit als Schlagwort in fast allen Lehrbüchern zur Objektorientierung genannt wird, finden sich doch nur sehr wenige objektorientierte Techniken, die speziell die Wiederverwendbarkeit zum Ziel haben.DieWiederverwendbarkeit bleibt in objektorientierten Projekten meist auf dem Stand, auf dem sie in Projekten mit strukturierter Programmierung auch schon war.Anpassbare – generische – Codeteile sind zur Wiederverwendung geschrieben. Erzeugende – generative – Codeschablonen sind auch in ihrer Rolle zurWiederverwendung geschrieben. Da Templates in C++ zur Compilezeit abgearbeitet werden, beziehen sich sowohl die generischen wie auch die generativen Fähigkeiten auf diese Zeitphase.

Es ist in C++ grundsätzlich der Compiler, der die generischen und generativen Fähigkeiten besitzen muss, die mit den Templates genutzt werden. Wie man diese Fähigkeiten strukturiert nutzt, haben die Autoren von [CzarneckiEisenecker00] auch ein Stück weit erarbeitet.AndreiAlexandrescu ist mit seiner Publikation „Modern C++ Design. Generic Programming and Design Patterns Applied." [Alexandrescu01] auf diesem Weg noch ein Stück weiter gegangen und hat einigeMethoden vorgeschlagen,wie Templates nutzbringend in Framework- und Applikationsentwicklung einzusetzen sind. Eines seiner bekanntesten Konzepte ist das „Policy Based Design", das im Prinzip auf einem Template-basierten Strategiemuster beruht und einen aspektorientierten Ansatz in C++ einführt.

4.1 Templates

In diesem Abschnitt wird die Syntax der Template-Programmierung behandelt, ohne auf deren Bedeutung für den Systementwurf einzugehen. Diese Aufgabe übernimmt der Abschnitt 4.2 ab Seite 268. Hier werden also die wesentlichen Regeln für die Codierung aufgelistet und deren Syntax durchgesprochen, damit an späterer Stelle darauf verwiesen werden kann.DieTemplates waren noch nicht von Anfang an Bestandteil der Sprache C++. Sie wurden erst Anfang der 90er Jahre in die Beschreibung der Sprache aufgenommen. Die Unterstützung durch die damaligen Compiler war noch eine ganz andere Sache.Von Anfang an hatten man in der Template-Programmierung mit den unterschiedlichen Interpretationen durch die Compiler zu kämpfen – ein Problem, das auch heute nochaktuell ist.InAbschnitt 4.2 ist beschrieben,dass die Template-Programmierung die eigentliche Technik zum Erreichen der Wiederverwendbarkeit in C++ ist.

Inhaltsverzeichnis
Vorwort7
Danksagung8
Inhaltsverzeichnis9
1 Einführung12
2 DieSprache C++16
2.1 Geschichte und Paradigmenwandel16
2.2 Grundlagen20
2.2.1 Bezeichner in C++23
2.2.2 Der Präprozessor24
2.2.3 Variablen32
2.2.4 Standarddatentypen33
2.2.5 Literalkonstanten36
2.2.6 Konstanten37
2.2.7 Aufzählungen38
2.2.8 Arrays40
2.2.9 Zeiger40
2.2.10 Referenzen47
2.2.11 Typenkonvertierung48
2.2.12 Ausdrücke50
2.2.13 Operatoren51
2.2.14 Anweisungen55
2.2.15 Kontrollstrukturen56
2.2.16 Funktionen60
2.2.17 Funktionsüberladung65
2.2.18 Funktions - Inlining67
2.2.19 Makros69
2.2.20 Dynamische Speicherallokation70
2.2.21 Strukturen und Klassen78
2.2.22 Typenkonvertierungmit Konstruktoren102
2.2.23 Globale, automatischeund dynamische Instanziierung105
2.2.24 Speicherklassen111
2.2.25 Der Scope - Operator117
2.2.26 Verschachtelte Typen121
2.2.27 Die friend - Deklaration122
2.2.28 StatischeMethoden und Attribute123
2.2.29 Vererbung125
2.2.30 Virtuelle Methoden und Polymorphismus132
2.2.31 Operatoren der Typenkonvertierung138
2.2.32 Mehrfachvererbung145
2.2.33 Virtuelle Vererbung149
2.2.34 Das Schlüsselwort const152
2.2.35 Operatorüberladung156
2.2.36 Exception Handling166
3 Die Objektorientierte Programmierung mit C++184
3.1 Der Klassenbegriff185
3.2 Die Rolle von Patterns und Idiomen187
3.2.1 Der Iterator189
3.2.2 Das Zustandsmuster190
3.2.3 Das Singleton -Muster198
3.3 Datenstrukturen und Containerklassen208
3.3.1 Die Liste209
3.3.2 Der Vektor219
3.3.3 Dynamische Container und das Problemder Speicherfragmentierung221
3.3.4 Verfeinerung des Zugriffs durch überladene Operatoren222
3.4 Arbeitenmit Invarianten224
4 Generische und generative Programmierung mit C++232
4.1 Templates233
4.1.1 Funktionstemplates234
4.1.2 Klassentemplates237
4.1.3 Methodentemplates238
4.1.4 Instanziierung von Templates240
4.1.5 Member- Templates241
4.1.6 Spezialisierung von Templates242
4.1.7 Partielle Spezialisierung243
4.1.8 Vorgabeargumentefür Templateparameter246
4.1.9 Abhängige und qualifizierte Namen247
4.1.10 Explizite Qualifizierung von Templates252
4.1.11 Barton- Nackman- Trick253
4.1.12 Das Schlüsselwort typename255
4.1.13 Template - Templateparameter258
4.1.14 Container mit Templates262
4.1.15 Smart Pointer mit Templates266
4.1.16 Projektorganisationmit Templates272
4.2 Konzepte für den Einsatz von Templates279
4.2.1 „Policy Based Design“281
4.2.2 Idiome für die Template - Programmierung282
4.2.3 Compiletime - Assertions283
4.3 Aspektorientierte Programmierung284
5 Die C++ - Standardbibliothek288
5.1 Die Geschichte der Standardbibliothek288
5.2 Die Teilbereiche der Standardbibliothek289
5.2.1 Die Streams291
5.2.2 Formatierungen auf einem ostream296
5.2.3 Die Manipulatoren297
5.2.4 Die File - Streams300
5.2.5 Die String- Streams301
5.2.6 Die STL303
5.2.7 Die Stringklasse std::string337
5.2.8 Pseudocontainer für optimiertes Rechnen343
5.2.9 Autopointer353
6 Das Softwareprojekt mit C++358
6.1 Modularisierung eines C++ - Projekts358
6.1.1 Der Umgang mit Headerdateien359
6.1.2 Namensräume364
6.1.3 Das argumentenabhängigeLookup - Verfahren372
6.1.4 Einige Anmerkungen zumLinker374
6.1.5 Überladen der Operatoren new und delete378
6.2 Persistenz und Serialisierung385
6.3 Systemprogrammierungmit C++388
6.3.1 Einfaches Objektpooling388
6.3.2 Nebenläufige Programmierung393
Literatur406
Abbildungsverzeichnis408
Listings410
Index420

Weitere E-Books zum Thema: Programmiersprachen - Softwareentwicklung

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

Programmieren lernen in PHP 5

E-Book Programmieren lernen in PHP 5
Format: PDF

Mit der Version 5 erreicht PHP einen bemerkenswerten Reifegrad, der PHP zu einer festen Größe in der Welt der Webprogrammierung macht. Gerade die leichte Erlernbarkeit macht PHP zur idealen…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Weitere Zeitschriften

FESTIVAL Christmas

FESTIVAL Christmas

Fachzeitschriften für Weihnachtsartikel, Geschenke, Floristik, Papeterie und vieles mehr! FESTIVAL Christmas: Die erste und einzige internationale Weihnachts-Fachzeitschrift seit 1994 auf dem ...

Ärzte Zeitung

Ärzte Zeitung

Zielgruppe:  Niedergelassene Allgemeinmediziner, Praktiker und Internisten. Charakteristik:  Die Ärzte Zeitung liefert 3 x pro Woche bundesweit an niedergelassene Mediziner ...

BONSAI ART

BONSAI ART

Auflagenstärkste deutschsprachige Bonsai-Zeitschrift, basierend auf den renommiertesten Bonsai-Zeitschriften Japans mit vielen Beiträgen europäischer Gestalter. Wertvolle Informationen für ...

Correo

Correo

 La Revista de Bayer CropScience para la Agricultura ModernaPflanzenschutzmagazin für den Landwirt, landwirtschaftlichen Berater, Händler und am Thema Interessierten mit umfassender ...

Demeter-Gartenrundbrief

Demeter-Gartenrundbrief

Einzige Gartenzeitung mit Anleitungen und Erfahrungsberichten zum biologisch-dynamischen Anbau im Hausgarten (Demeter-Anbau). Mit regelmäßigem Arbeitskalender, Aussaat-/Pflanzzeiten, Neuigkeiten ...

EineWelt

EineWelt

Lebendige Reportagen, spannende Interviews, interessante Meldungen, informative Hintergrundberichte. Lesen Sie in der Zeitschrift „EineWelt“, was Menschen in Mission und Kirche bewegt Man kann ...

elektrobörse handel

elektrobörse handel

elektrobörse handel gibt einen facettenreichen Überblick über den Elektrogerätemarkt: Produktneuheiten und -trends, Branchennachrichten, Interviews, Messeberichte uvm.. In den monatlichen ...