lehrerbibliothek.deDatenschutzerklärung
Softwaretechnik in C und C++ - Das Kompendium Modulare, objektorientierte und generische Programmierung 3., aktualisierte und erweiterte Auflage; alle Programmbeispiele auf CD
Softwaretechnik in C und C++ - Das Kompendium
Modulare, objektorientierte und generische Programmierung


3., aktualisierte und erweiterte Auflage; alle Programmbeispiele auf CD

Rolf Isernhagen

Carl Hanser Verlag
EAN: 9783446217263 (ISBN: 3-446-21726-6)
994 Seiten, hardcover, 18 x 25cm, September, 2001, inkl. CD-ROM

EUR 49,90
alle Angaben ohne Gewähr

Umschlagtext
Die Sprachen C und C++ sind weltweit standardisiert und in Ausbildung und Praxis weit verbreitet. Sie gehören zum Handwerkszeug jedes Informatikers und werden häufig nebeneinander benutzt.



Dieses Kompendium stellt C und C++ umfassend vor, genauso wie die wesentlichen Programmier- und Entwurfstechniken, die von beiden Sprachen unterstützt werden: die strukturierte, die modulare, die objektorientierte und die generische Programmierung.



Die vorliegende Auflage wurde gründlich überarbeitet und im Kapitel ANSI/ISO-C++-Standardbibliothek erheblich erweitert. Neu ist ein Kapitel zur Softwaremodellierung mit UML-Klassendiagrammen.

Softwareingenieure erhalten mit diesem Kompendium ein hilfreiches und klar strukturiertes Nachschlagewerk für ihre Arbeit. Zahlreiche Beispiele und Grafiken veranschaulichen die komplexen Themen. Ein Überblick über die C- und C++-Standardbibliothek rundet das Buch ab.



Auf der CD-ROM:

Die Programmbeispiele des Buches, der C++-Draft-Standard, der neu C-Draft-Standard sowie Demoversionen von UML-Tools.
Inhaltsverzeichnis
Vorwort

Hinweise für den Leser

Inhaltsübersicht XXV

I Die Sprache C und Modulare Softwareentwicklung

1 ANSI/ISO-C, Clean-C und Better-C
1.1 Entwicklungsgeschichte: Von K&R-C nach C++
1.2 Clean-C und Better-C
1.3 Neun Beispiele
1.4 Aufbau der Sprache
1.4.1 Lexikalische und Syntaktische Struktur
1.4.2 Formale Beschreibung (Syntaxnotation)
1.4.3 Lexikalische Elemente (Symbole, Token)
1.4.4 Clean-C/Better-C: Restriktionen/Erweiterungen
1.5 Daten, Operatoren, Ausdrücke, Anweisungen
1.5.1 Vorde nierte Datentypen
1.5.2 Variablen und Konstanten
1.5.3 Operatoren für Elementare Datentypen
1.5.4 Ausdrücke
1.5.5 Prioritäten von Operatoren
1.5.6 Explizite und implizite Typkonvertierungen
1.5.7 Arbeiten mit Zahlen
1.5.8 Arbeiten mit Zeichen
1.5.9 Arbeiten mit Booleschen Ausdrücken
1.5.10 Aufzählungstypen
1.5.11 Ausdrücke als Anweisungen, Mehrfachzuweisungen
1.5.12 Bedingte Ausdrücke und bedingte Anweisungen
1.5.13 Clean-C/Better-C: Restriktionen/Erweiterungen
1.6 Steueranweisungen
1.6.1 Übersicht
1.6.2 Verbundanweisung (compound-statement)
1.6.3 Verzweigungen
1.6.4 Wiederholungen
1.6.5 Marken und Sprünge
1.6.6 Zusammenfassung
1.6.7 Clean-C/Better-C: Restriktionen/Erweiterungen
1.7 Funktionen
1.7.1 Grundlagen
1.7.2 Rekursive Algorithmen und Funktionen
1.7.3 Variable Anzahl von Parametern
1.7.4 De nition, Deklaration und Aufruf von Funktionen
1.7.5 ANSI/ISO-C-Bibliotheksfunktionen
1.7.6 Clean-C/Better-C: Restriktionen/Erweiterungen
1.8 Datenstrukturen, Werte- und Zeigersemantik
1.8.1 Zeiger, Adressen, Vektoren
1.8.2 Mehrdimensionale Vektoren
1.8.3 Strukturen
1.8.4 Vereinigungen (Unionen)
1.8.5 Zeiger und Zeigerkonvertierungen
1.8.6 Arbeiten mit selbst verwalteten Daten, Zeigersemantik
1.8.7 Syntax von Deklarationen
1.8.8 Clean-C/Better-C: Restriktionen/Erweiterungen
1.9 Eingabe und Ausgabe von Daten
1.9.1 Überblick
1.9.2 Typen, Variable und Konstanten
1.9.3 Arbeiten mit den Standardgeräten
1.9.4 Arbeiten mit Textdateien
1.9.5 Datenformatierung
1.9.6 Dateien mit Blockstruktur
1.9.7 Strings als Medium für formatierte Ein- und Ausgabe
1.9.8 Fehlerbehandlung
1.9.9 Weitere Funktionen
1.9.10 Clean-C/Better-C: Restriktionen/Erweiterungen
1.10 Programmstruktur und Speicherklassen
1.10.1 Dateien, Geltungsbereiche, Lebensdauer
1.10.2 Geltungsbereich von Bezeichnern
1.10.3 Lebensdauer von Variablenwerten
1.10.4 Zusammenfassung und Ergänzungen
1.10.5 Module: De nitions- und Implementationsdateien
1.10.6 Allgemeiner Aufbau von ANSI/ISO-C-Programmen
1.10.7 Clean-C/Better-C: Restriktionen/Erweiterungen
1.11 Zeiger auf Funktionen
1.11.1 Zeiger auf Funktionen in Vektoren und Strukturen
1.11.2 Zeiger auf Funktionen als Funktionsparameter
1.12 Präprozessor
1.12.1 Einfügen von Dateien
1.12.2 Ersetzen von Textstellen
1.12.3 Bedingte Einfügung, bedingte Übersetzung
1.12.4 De nition von Makros
1.12.5 Vorde nierte Namen
1.12.6 Sonstiges
1.12.7 Zusammenfassung und Bewertung
1.12.8 Clean-C/Better-C: Restriktionen/Erweiterungen
1.13 Speicherverwaltung, Speichermodelle
1.14 Fehlerbehandlung/Ausnahmebehandlung
1.15 Übersicht über den neuen Standard C99
1.15.1 Allgemeines
1.15.2 Neue Datentypen
1.15.3 Zeiger mit dem Attribut restrict
1.15.4 Dynamische Arrays
1.15.5 Reihenfolge von Deklarationen und Anweisungen
1.15.6 inline-Kommentare
1.15.7 inline-Funktionen
1.15.8 Bibliothek
1.16 Übungen

2 ANSI/ISO-C-Standardbibliothek
2.1 Kurzübersicht über die Gesamtbibliothek
2.2 Fehlerdiagnostik:
2.3 Zeichenoperationen:
2.4 Fehlererkennung:
2.5 Grenzwerte für Gleitkommatypen:
2.6 Grenzwerte für Ganzzahl-Typen:
2.7 Lokale (nationale) De nitionen:
2.8 Mathematische Funktionen:
2.9 Globale Sprünge:
2.10 Ausnahmebehandlung:
2.11 Variable Parameterlisten:
2.12 Allgemeine De nitionen:
2.13 Ein- und Ausgabe:
2.14 Hilfsfunktionen:
2.15 String-Operationen:
2.16 Datum und Zeit:

3 Modulare Programmierung
3.1 Module und Modulschnittstellen
3.1.1 Softwareentwurf und Modularisierung
3.1.2 Geheimnisprinzip, Datenkapselung, Abstrakte Datentypen
3.1.3 Realisierung von Abstrakten Datentypen in C
3.1.4 Realisierung von generischen Modulen in C
3.2 Fallstudie 1: Komplexe Arithmetik
3.2.1 Spezi kation
3.2.2 Implementierung
3.2.3 Anwendung
3.3 Fallstudie 2: Strings
3.3.1 Spezi kation
3.3.2 Implementierung
3.3.3 Anwendung
3.4 Fallstudie 3: Set (Menge)
3.4.1 Allgemeine Spezi kation
3.4.2 Modul Set, Version 0: Kleiner Wertebereich
3.4.3 Modul Set, Version 1: Vergrößerung des Wertebereichs
3.4.4 Modul Set, Version 2: Einstellbarer Wertebereich
3.4.5 Modul Set, Version 3: Alternative Realisierung
3.4.6 Modul Set, Version 4: Ein generisches Modul
3.5 Fallstudie 4: Generische Sortierte Liste
3.5.1 Spezi kation
3.5.2 Implementierung
3.5.3 Anwendung
3.5.4 Anpassung an Anwendungen
3.6 Übungen

II Datenstrukturen, Algorithmen, ADTs, Container

4 Sortieren, Suchen und Zeitkomplexität
4.1 Zeitkomplexität
4.2 Einfache Sortieralgorithmen
4.3 Schnelle Sortieralgorithmen
4.4 Laufzeitmessungen an Sortieralgorithmen
4.5 Lineares Suchen
4.6 Binäres Suchen
4.7 Die Macht der Zeitkomplexität

5 Dynamische Datenstrukturen
5.1 Lineare Listen, Stapel und Schlangen
5.1.1 Zeigernotation und Heapverwaltung
5.1.2 Lineare einfach gekettete Listen
5.1.3 Lineare doppelt gekettete Listen
5.1.4 Stapelspeicher
5.1.5 Warteschlange
5.1.6 ADT List (Unsortierte Liste)
5.1.7 Prioritätswarteschlange
5.1.8 Übungen
5.1.9 ADT SList (Sortierte Liste)
5.2 Binäre Wilde Bäume
5.2.1 Grundlagen
5.2.2 Traversieren
5.2.3 Einfügen
5.2.4 Suchen
5.2.5 Löschen
5.2.6 Übungen
5.2.7 ADT Tree (Binärer Suchbaum)
5.2.8 Fallstudie Querverweis-Listengenerator
5.3 Binäre Ausgeglichene Bäume
5.3.1 De nition der Ausgeglichenheit und Konzept
5.3.2 Einfügen
5.3.3 Löschen
5.3.4 ADT Avl (Ausgeglichener Binärer Suchbaum)
5.4 Vielweg-Bäume (B-Bäume)
5.4.1 Einführung und Konzept
5.4.2 Datenstrukturen
5.4.3 Traversieren
5.4.4 Einfügen
5.4.5 Löschen
5.4.6 Demoprogramm
5.4.7 Übungen
5.5 Heap-Strukturen
5.6 Hashverfahren
5.6.1 Allgemeines
5.6.2 Statische Hashverfahren
5.6.3 Halbdynamische Hashverfahren
5.6.4 Dynamische Hashverfahren
5.6.5 Zusammenfassung

6 Container-Strukturen
6.1 Container-Strukturen, Überblick
6.2 Realisierung von Container-Strukturen
6.2.1 Stack, Queue und Priorityqueue
6.2.2 Set und Multiset
6.2.3 Map, Multimap und Vector
6.3 Anwendungsbeispiele
6.3.1 Test- und Demoprogramm
6.3.2 Anwendungsbeispiel Textanalyse
6.3.3 Anwendungsbeispiel Anagramme
6.4 Übungen

7 Automaten in der Softwaretechnik
7.1 Automaten und Sprachen
7.2 Endliche Automaten und Reguläre Sprachen
7.3 Lexikalische Analyse, Scanner
7.3.1 Scanner für Zahlen
7.3.2 Scanner für Kommentare
7.3.3 Ein Scanner für die kleine Sprache ML2
7.4 Kellerautomaten und Kontextfreie Sprachen
7.5 Syntaktische Analyse, Parser
7.5.1 EBNF-Notation und Syntaxdiagramme
7.5.2 Parser
7.5.3 Die Sprachen ML1 und ML2 und ihre Parser

8 Von ANSI/ISO-C nach ANSI/ISO-C++ - ein Überblick
8.1 Die Funktion main
8.2 Neue Schlüsselwörter und reservierte Wörter
8.3 Neue Operatoren
8.4 Neue Bibliotheksmodule
8.5 Der Namensraum std
8.6 Deklarationen und Bindung
8.7 Benutzen von Modulen mit C-Bindung (Bindespezi kation)
8.8 Kleine nicht objektorientierte Erweiterungen
8.8.1 Vorde nierter Makro-Name
8.8.2 Inline-Kommentare
8.8.3 Inline-Funktionen
8.8.4 Der Typ bool
8.8.5 Der Typ wchar_t
8.8.6 Zeichenkonstanten
8.8.7 Syntax von Typkonvertierungen
8.8.8 Das Attribut const
8.8.9 Erweiterung des Strukturtyps
8.8.10 Positionierung von Deklarationen
8.8.11 Default-Parameterwerte und variable Parameterzahl
8.8.12 Funktionen ohne Parameter
8.9 Mittlere nicht direkt objektorientierte Erweiterungen
8.9.1 Referenztypen
8.9.2 Speicherverwaltung mit new und delete
8.9.3 Überladen von Funktionen
8.9.4 Überladen von Operatoren
8.9.5 Generische Funktionen (Funktions-Templates)
8.9.6 Namensbereiche (Namespaces)
8.9.7 Typkonvertierungen (Typecasts)
8.10 Objektorientierung: das Klassenkonzept
8.10.1 Die Konzepte der Objektorientierung in C++
8.10.2 Klassen
8.10.3 Vererbung
8.10.4 Polymorphie und dynamisches Binden
8.10.5 Klassenschablonen
8.11 Ausnahmebehandlung (Exception Handling)
8.12 Die C++-Standardbibliothek
8.12.1 Überblick
8.12.2 Neues EA-Konzept: Stream-IO
8.12.3 Container & Zubehör: Standard Template Library (STL)
8.12.4 Strings

9 Objektorientierte Programmierung
9.1 Kapselung: Klassen als Abstrakte Datentypen
9.1.1 Grundlagen
9.1.2 Konstruktoren und Destruktoren
9.1.3 Der Zuweisungsoperator
9.1.4 Minimale Standardschnittstelle und Nice Class
9.1.5 Konstante Elementfunktionen, konstante Objekte
9.1.6 Zugri srechte
9.1.7 Mitglieder und Freunde
9.1.8 Überladen von Operatoren
9.1.9 Dynamische verwaltete Daten in Klassen
9.1.10 Ezienzbetrachtungen: Laufzeitezienz
9.1.11 Statische Elemente in einer Klasse
9.1.12 Schachtelung von Klassen
9.1.13 Funktionsobjekte
9.1.14 Zusammenfassung: Wichtige Hinweise und Regeln
9.1.15 Übungsaufgaben
9.2 Vererbung: Erweiterung von Klassen
9.2.1 Grundlagen
9.2.2 Konstruktoren, Destruktor und Zuweisungsoperator
9.2.3 Typkompatibilität in Klassenhierarchien
9.2.4 Virtuelle Funktionen
9.2.5 Öffentliches und Privates Erben
9.2.6 Privates Erben und Benutzen
9.2.7 Rein Virtuelle Funktionen und Abstrakte Klassen
9.2.8 Übungsaufgaben
9.3 Polymorphie: Dynamisches Binden
9.3.1 Dynamischer Typ, dynamisches Binden
9.3.2 Übungsbeispiel Polymorphe Strukturen
9.3.3 Heterogene Datenstrukturen
9.3.4 Virtuelle Destruktoren
9.3.5 Ein Klassensystem für gra sche Objekte, Vers. 1
9.3.6 Objektschachtelung: Grafische Objekte, Vers. 2
9.3.7 Zwei Aspekte der Polymorphie: heterogen und generisch
9.3.8 Polymorphe Container-Strukturen
9.3.9 Übungsaufgabe
9.4 Die richtige Anwendung der Vererbung
9.4.1 Verschiedene Sichten und Probleme
9.4.2 Schnittstellen-Klassen
9.4.3 Abstrakte und nicht abstrakte Basisklassen
9.4.4 Fallstudie Querverweis-Listengenerator
9.4.5 Zuweisungsoperatoren in Klassen mit polymorphen Zeigern
9.5 Mehrfachvererbung
9.5.1 Grundlagen
9.5.2 Verwendung nicht virtueller Basisklassen
9.5.3 Verwendung virtueller Basisklassen
9.5.4 Virtuelle Methoden in virtuellen Basisklassen
9.5.5 Fallstudie Querverweis-Listengenerator
9.6 Beziehungen zwischen Klassen { Übersicht
9.7 Klassen-Templates: Generische Strukturen
9.7.1 Grundlagen
9.7.2 Eine generische Container-Bibliothek
9.7.3 Spezialisierung von Templates
9.7.4 Eine spezialisierte Container-Bibliothek
9.7.5 Funktions-Templates
9.7.6 Funktions-Templates als Elemente
9.7.7 Laufzeit- und Compilezeit-Polymorphismus
9.8 Namensbereiche: Namenskollisionen vermeiden
9.8.1 Grundlagen: De nition und Benutzung
9.8.2 Erweiterung von Namensbereichen
9.8.3 Alias (Synonym) für Namensbereiche
9.8.4 Using-Direktive und Using-Deklaration
9.8.5 Anonyme Namensbereiche
9.8.6 Anwendung von Namensbereichen
9.9 Typkonvertierung, Laufzeit-Typinformation
9.9.1 Die Grundidee
9.9.2 Syntax und Semantik der Sprachkonstrukte
9.9.3 Zusammenfassung
9.10 Ausnahmebehandlung (Exception-Handling)
9.10.1 Grundlagen
9.10.2 Syntax und Semantik der Sprachkonstrukte
9.10.3 Ausnahmebehandlung am Beispiel der Klasse Stack
9.10.4 Empfehlungen
9.10.5 Zusammenfassung

10 Objektorientierte und Generische Softwareentwicklung
10.1 Besondere Programmiertechniken
10.1.1 Smart Pointer
10.1.2 Iteratoren
10.1.3 Generische Algorithmen
10.1.4 Referenzzählung (Reference-Counting)
10.1.5 Up-Calls
10.1.6 Botschaften und Botschaftsinterpreter
10.2 Template-Metaprogrammierung
10.2.1 Compilezeit-Berechnungen
10.2.2 Compilezeit-Polymorphismus
10.3 Zusicherungen (assertions)
10.3.1 Das Prinzip: Zusicherungen in Ei el
10.3.2 Simulation von Zusicherungen in C++, Version 1
10.3.3 Simulation von Zusicherungen in C++, Version 2
10.3.4 Zusammenfassung
10.4 Fallstudien
10.4.1 Strings
10.4.2 Eine Array-Klasse
10.4.3 Entwicklung einer kleinen Container-Bibliothek

11 ANSI/ISO-C++-Standardbibliothek
11.1 Übersicht
11.2 Allgemeine Dienste
11.2.1 Vergleichsoperatoren
11.2.2 Paare
11.2.3 Auto-Zeiger
11.3 Strings
11.3.1 Konzept und Übersicht
11.3.2 Funktionalität
11.4 Eingabe und Ausgabe (EA)
11.4.1 Vorteile des neuen EA-Konzeptes
11.4.2 EA im Standardformat mit Standardgeräten
11.4.3 Struktur & Funktionalität der Stream-IO-Bibliothek
11.4.4 Formatierung
11.4.5 EA-Funktionen
11.4.6 Arbeiten mit Dateien
11.4.7 Strings als Ein- und Ausgabemedium
11.4.8 Anzeige & Abfrage von Zuständen, Fehlerbehandlung
11.4.9 Eigene De nitionen, weitere Funktionen
11.5 Container
11.5.1 Das Konzept der Standard Template Library (STL)
11.5.2 Einführung
11.5.3 Gemeinsame De nitionen
11.5.4 Container für Sequenzen
11.5.5 Containeradapter für Sequenzen
11.5.6 Container für Assoziationen
11.5.7 Die Containerklasse bitset
11.6 Iteratoren
11.6.1 Operationen und Klassi zierung
11.6.2 Iteratoren als Container-Schnittstellen
11.6.3 Reverse-Iteratoren
11.6.4 Insert-Iteratoren
11.6.5 Stream-Iteratoren
11.6.6 Selbst de nierte Iteratoren (Iterator-Adapter)
11.7 Funktionsobjekte
11.7.1 Verwendung von Funktionsobjekten
11.7.2 Funktionsobjekte der Standardbibliothek
11.7.3 Funktionsadapter der Standardbibliothek
11.8 Algorithmen: globale generische Funktionen
11.8.1 Nicht modi zierende sequenzielle Operationen
11.8.2 Modi zierende sequenzielle Operationen
11.8.3 Sortieren, Suchen und verwandte Operationen
11.8.4 Mengenoperationen
11.8.5 Heap-bezogene Operationen
11.8.6 Minimax bestimmen und lexikogra sche Vergleiche
11.8.7 Permutieren
11.8.8 Anwendungsbeispiel Textanalyse
11.8.9 Anwendungsbeispiel Anagramme
11.9 Weitere Dienstleistungen
11.9.1 Ausnahmebehandlung
11.9.2 Grenzwerte der Implementierung
11.9.3 Speichermodelle
11.9.4 Internationalisierung
11.9.5 Numerik

12 Softwaremodellierung mit UML-Klassendiagrammen
12.1 Überblick über die UML-Konzepte
12.2 Klassendiagramme: Modellierung der Architektur
12.2.1 Modellierung von Klassen
12.2.2 Modellierung von Beziehungen zwischen Klassen
12.2.3 Verwendung von Klassenschablonen
12.2.4 Codegenerierung und Reverse Engineering
12.3 Beispiele
12.3.1 Beispiel 1: Polymorphe Prioritätswarteschlange
12.3.2 Beispiel 2: Gra k-Editor
12.3.3 Beispiel 3: Querverweis-Listengenerator
12.3.4 Beispiel 4: Polymorphe Container-Bibliothek
12.3.5 Beispiel 5: Generische Container

Literaturverzeichnis

C/C++-Textverzeichnis

Abbildungsverzeichnis

Tabellenverzeichnis

Stichwortverzeichnis