Version [22758]
Dies ist eine alte Version von ObjProg02Kapselung erstellt von RonnyGertler am 2013-03-28 23:14:19.
Objektorientierte Programmierung - Kapitel 2 - Datenabstraktion und Datenkapselung
Inhalte von Dr. E. Nadobnyh
2.1. Klasse
Datentyp und Klasse
Ein Datentyp ist eine Zusammenfassung von Wertebereichen und der darauf anwendbaren Operationen.
Ein Typ stellt das Muster dar, nach dem beliebig viele Variablen (Instanzen, Exemplaren, Objekten) erzeugt werden können.
Es gibt in C++ eingebaute Datentypen (z.B. int, float usw.) und benutzerdefinierte Datentypen. Eine Klasse ist ein benutzerdefinierter Datentyp.
Eine Klasse ist eine Typbeschreibung, die folgende Merkmale enthält: ´
1) Daten (auch Attribute und Eigenschaften genannt),
2) Operationen (auch Methoden, Elementfunktionen und Fähigkeiten genannt).
Datenabstraktion
Die Abstraktion ist ein gängiges Mittel, Komplexität zu reduzieren. Die komplexen Dinge werden auf das Wesentliche reduziert und mit einem Oberbegriff versehen.Die Sprache C++ unterstützt die Datenabstraktion durch den Begriff Klasse.
Eine Klasse ermöglicht:
1) mehrere zusammengehörige Daten (Attribute) in einen Datentyp zu bündeln und
2) den Zugriff auf die Attribute nicht direkt, sondern über die Methoden durchzuführen.
Vorteile der Datenabstraktion
1) Die interne Darstellung der Daten braucht das Anwendungsprogramm nicht zu kennen.
2) Der Zugriff auf die Daten erfolgt in kontrollierter Weise über die Methoden.
3) Bei Bedarf kann die interne Darstellung der Daten auch geändert werden, ohne das Anwendungsprogramm davon betroffen wird.
Datenkapselung
Attribute und Methoden der Klasse können als geschützt oder öffentlich deklariert werden. Normaleweise werden Attribute als private und Methoden als public d.h. öffentlich deklariert.
Ohne Datenkapselung können die Vorteile der Datenabstraktion durch das sogenannte Vorbeiprogrammieren an Methoden zerstört werden.
Beispiel: Ein Element auf Stack legen
Prozedurale Lösung
Prozedurale Lösung mit Datenabstraktion
Lösung mit Datenabstraktion und Datenkapselung
Schnittstelle einer Klasse
Die Deklarationen von allen public- Methoden bilden die öffentliche Schnittstelle (Interface). Durch die öffentliche Schnittstelle kommuniziert ein Objekt mit der Umgebung.
Die Schnittstelle sagt nichts über die Implementierung (über die interne Darstellung der Daten) aus. Die Datenabstraktion realisiert das Prinzip der Trennung von Schnittstelle und Implementierung.
Das Anwendungsprogramm merkt keine Veränderungen in der Implementierung, wenn die Schnittstelle dieselbe bleibt.
ADT
Der abstrakten Datentyp (ADT) ist ein Konzept der Entwurfsphase.
Als ADT bezeichnet man spezielle Datentypen:
1) deren Operationen und das korrekten Zusammenspiel der Operationen genau spezifiziert sind,
2) die jedoch nicht an einen konkreten Wertebereich gebunden sind.
Die Spezifikation des ADT kann:
1) durch natürliche Sprache,
2) durch eine Reihe von Axiomen,
3) durch Methodendeklaration mit Kommentaren usw. beschrieben werden.
Vorsicht: Ein benutzerdefinierter Typ wird häufig als ADT bezeichnet.
2.2. Definition von Klassen und Objekten
Deklaration, Definition und Verwendung
Eine Deklaration bestimmt, welche Bedeutung ein Bezeichner im Programmtext besitzt.
Jede Definition stellt auch eine Deklaration dar.
Bei der Definition:
1) einer Variable (eines Objektes) wird Speicherplatz reserviert.
2) einer Funktion (Methode) wird der Rumpf festgelegt.
3) eines Typs(Klasse) werden alle Merkmale festgelegt.
Vor der Verwendung muss jede Variable(Objekt), jede Funktion(Methode), jeder Typ(Klasse) definiert werden.
Beispiele für Deklaration, Definition, Verwendung
Deklaration | Definition | Verwendung | |
Typ |
//Vorwärtsdeklaration class A; |
class A{…}; | A a1, a3; |
Variable, Objekt |
extern A a1; class B { A a1; }; |
A a1; |
// Zugriff f(a1); a1 = a3; |
Funktion, Methode |
//Prototyp extern void f(A a2); class B { void m (A a2); }; |
void f(A a2){…} void B::m(A a2){…} |
//Aufruf f(a3); a1.m(a3); |
Definition von Klassen
Definition einer Klasse legt den Namen der Klasse sowie die Namen und Typen von Merkmalen (Klassenelementen, members)
fest. Merkmale sind Attribute (Daten) und Methoden (Elementfunktionen).
Bei der Klassendefinition werden die Attribute nur deklariert, d.h. keine Speicherreservierung.
CategoryObjProg