[Zurück] [Index] [Weiter]     Kuhlins: Objektorientiertes Design für C++


Inhaltsverzeichnis

Abbildungsverzeichnis

Tabellenverzeichnis

Abkürzungsverzeichnis

1  Einleitung

1.1  Einbettung und Motivation
1.2  Design
1.3  Codegenerierung
1.4  Gliederung

2  Die Mannheimer objektorientierte Analysemethode

2.1  Das statische Modell
      2.1.1  Klassen
      2.1.2  Attribute
      2.1.3  Methoden
      2.1.4  Vererbungsbeziehungen
      2.1.5  Objektbeziehungen
      2.1.6  Aggregationsbeziehungen
      2.1.7  Kardinalitäten
      2.1.8  Nachrichtenverbindungen
      2.1.9  Subjekte
      2.1.10  Beispiel Depotverwaltung
      2.1.11  Klassenspezifikationen
2.2  Das dynamische Modell
      2.2.1  Szenarios und Ereignisfolgediagramme
      2.2.2  Zustandsdiagramme
2.3  Das funktionale Modell

3  Objektorientiertes Design für C++

3.1  Bezeichner
3.2  Datentypen
      3.2.1  Datentypen der ODMG
      3.2.2  Besonderheiten des ganzzahligen Datentyps int
      3.2.3  Komplexe Datentypen
      3.2.4  Abgeleitete Datentypen und typedef
      3.2.5  Dynamische Felder
      3.2.6  union
      3.2.7  Eingabe von Datentypen
3.3  Nachrichtenverbindungen
3.4  Subjekte

4  Klassen

4.1  class oder struct
4.2  Abstrakte Klassen
4.3  Reihenfolge der Zugriffsrechte
4.4  friend-Deklarationen
4.5  Kanonische Form
4.6  Spezielle Eigenschaften
4.7  Eingebettete Typen
4.8  Parametrisierte Klassen
4.9  Header- und Implementationsdateien
4.10  Leere Klassen
4.11  Zusammenfassung

5 Attribute

5.1  Datentyp
5.2  Bitfelder
5.3  Initialisierung
5.4  static
5.5  const
5.6  Klassenkonstanten
5.7  mutable
5.8  volatile
5.9  Zugriffsrechte
5.10  Handle/body-Implementation
5.11  Abgeleitete Attribute
5.12  Zusammenfassung

6  Methoden

6.1  Name
6.2  Parameter
6.3  Typ des Rückgabewerts
6.4  Zugriffsrechte
6.5  inline
6.6  const
6.7  volatile
6.8  static
6.9  virtual
6.10  Überladene Funktionsnamen
6.11  Ausnahmespezifikationen
6.12  Implizite Methoden
      6.12.1  Konstruktoren
      6.12.2  Destruktor
      6.12.3  Zuweisungsoperator
      6.12.4  Compilergenerierte Elementfunktionen
      6.12.5  Zugriffsfunktionen
6.13  Operatoren
      6.13.1  Eigenschaften von Operatorfunktionen
      6.13.2  Vorschläge zur Umsetzung überladener Operatoren
      6.13.3  Additive Operatoren
      6.13.4  Vergleichsoperatoren
      6.13.5  Logische Operatoren
      6.13.6  Ein- und Ausgabeoperatoren
      6.13.7  Speicherverwaltung
      6.13.8  Zeigerklassen
      6.13.9  Kommaoperator
      6.13.10  Funktionsaufrufoperator
      6.13.11  Typumwandlungen
6.14  Member-Templates
6.15  Zusammenfassung

7  Vererbungsbeziehungen

7.1  Zugriffsspezifizierer für Basisklassen
7.2  Virtuelle Basisklassen
7.3  Virtuelle Elementfunktionen
7.4  Überladen und verdecken
7.5  Standardargumente
7.6  Vermeidung doppelter Funktionsaufrufe bei virtuellen Basisklassen
7.7  Auflösung von Namenskonflikten bei Mehrfachvererbung
7.8  Zusammenfassung

8 Aggregations-, Objekt- und Benutztbeziehungen

8.1  Individuelle versus standardisierte Programmierung von Beziehungen
8.2  Beziehungen zu einem Objekt
8.3  Beziehungen zu mehreren Objekten
8.4  Bidirektionale Beziehungen und referentielle Integrität
8.5  Abgrenzung von Aggregations-, Objekt- und Benutztbeziehungen
8.6  Praktische Schwierigkeiten
8.7  Ansätze zur Wiederverwendung von Beziehungsfunktionalität
8.8  Implementation
      8.8.1  Unidirektionale Objektbeziehungen mit Kardinalität 0,1
      8.8.2  Unidirektionale Objektbeziehungen mit Kardinalität 0,n
      8.8.3  Bidirektionale Objektbeziehungen mit Kardinalität 0,1
      8.8.4  Bidirektionale Objektbeziehungen mit Kardinalität 0,n
8.9  Zusammenfassung

9  Grafische Notation

9.1  Zugriffsrechte
9.2  Klassen
      9.2.1  Spezielle Eigenschaften
      9.2.2  Parametrisierte Klassen
      9.2.3  Eingebettete Typen
      9.2.4  friend-Deklarationen
9.3  Attribute
9.4  Methoden
9.5  Vererbungsbeziehungen
9.6  Aggregations-, Objekt- und Benutztbeziehungen
9.7  Nachrichtenverbindungen
9.8  Subjekte
9.9  Anmerkungen
9.10  Filter
9.11  Zusammenfassung der Symbole
9.12  Depotbeispiel

10  Qualitätssicherung

10.1  Klasseninvarianten, Vor- und Nachbedingungen
10.2  Kritische Betrachtung
10.3  Checksummenberechnung als Klasseninvariante
10.4  Zusammenfassung

11  Allgemeine Anforderungen an C++-Codegeneratoren

11.1  Header-Dateien
11.2  Reihenfolge der Klassenelemente
11.3  Layout des generierten Programmcodes
11.4  Kommentare
11.5  Nachvollziehen des Programmablaufs
11.6  Compilereinschränkungen
11.7  Makefile

12  Prototyp des MAOOAM*TOOLS

12.1  Einbindung der Designsicht in die Benutzerschnittstelle des MAOOAM*Tools
12.2  Codegenerierung

13  Geplante Erweiterungen

13.1  Reverse-Engineering
13.2  Wiederverwendung von Klassen
13.3  Garbage-Collection

14  Zusammenfassung und Ausblick

Literaturverzeichnis

Index

Anhang