FB Informatik Prof. Dr. R.Nitsch
C++ - Arrays – Abstrakter Datentyp
Reiner Nitsch 8417
[email protected]
Abstrakter Datentyp - Begriff
FB Informatik Prof. Dr. R.Nitsch
• Daten stehen im Mittelpunkt; • Sie haben eigene Funktionen zur Verfügung, die Methoden bzw. Operationen genannt werden. Zu jeder Operation gehören 2 Bedingungen – Vorbedingung (precondition): gibt an, welche Eigenschaften das ADT-Objekt vor der Operation haben muss, damit diese ihre Leistung korrekt erbringen kann. – Nachbedingung (postcondition): beschreibt den Zustand des ADT-Objekts nach Beendigung der Operation.
• Nur diese Methoden haben Zugriff auf die Daten (Datenkapselung, Zugriffsschutz). • Daten und zugehörige Funktionen werden an einer Stelle im Programm zusammen gefasst. Daraus resultiert eine bessere Pflegbarkeit, Wiederverwendbarkeit und einfachere Fehlereingrenzung • Die Implementierung der Methoden und die interne Datenstruktur wird vor dem Benutzer verborgen (Geheimnisprinzip). • ADTs können durch eine Invariante gekennzeichnet sein. Die darf durch nichts und niemanden geändert werden. – Beispiel: Die Elemente eines ADT "sortiertes Array" sind vor und nach jeder Operation dieses ADT sortiert. • ADTs können in objektorientierten Programmen durch Klassen realisiert werden. 19.05.2009
C++ Array - ADT
2
Abstrakter Datentyp (ADT)
FB Informatik Prof. Dr. R.Nitsch
• ADT-Beispiele bisher: Klassen Counter, Time, Motorboot, Handy, string, … • Neues Beispiel: ADT Notenspiegel zur Erfassung und Auswertung der Noten einer Prüfung Fach: Programmieren Note Anzahl 1 4 2 5 … 5 3 Durchschnittsnote: 2.3 Durchfallquote: 17%
Attribute - unbekannt, d.h. abstrakt. Geheimnisprinzip: Zugriff von aussen nur lesend über Akzessor-Methoden) Abstrakte Methoden - weil sie unabhängig von der konkreten Attributstruktur sind Akzessormethoden nicht abstrakt weil abhängig von konkreter Attributstruktur.
19.05.2009
C++ Array - ADT
ExamResult Attribute (?) Konstruktor Destruktor show():void mean():float record(mark:int):void failRatio():float getMarkCount(mark:int):int setMarkCount(mark:int, count:int):void 3
Abstrakter Datentyp - Akzessormethoden
FB Informatik Prof. Dr. R.Nitsch
• sollen Schutzfunktionen bieten für die sonst ungeschützte Datenstruktur • bieten gezielten Zugriff auf eine Klasse – lesend (get...) • private: oder public : getAttribut1() const get() const – schreibend (set...) • private: void set(,) //Deklaration class ExamResult { private: int count1, count2, count3, count4, count5; public: ExamResult(); ~ ExamResult(); void show(); const; float mean(); const; void record(int); int getMarkCount(int mark); private: void setMarkCount(int mark ,int count); }; 19.05.2009
C++ Array - ADT
Aufgabe: Suchen Sie die read-only Methoden und deklarieren Sie diese als solche!
4
Abstrakter Datentyp - Notenspiegel // Anwendung void main() { ExamResult math; math.record(2); math.record(5); math.record(3); math.record(2); … math.show(); cout