C++ (4)

HOCHSCHULE MUENCHEN FAKULTÄT ELEKTROTECHNIK UND INFORMATIONSTECHNIK TECHNISCHE INFORMATIK Prof. Dr. A. Irber Stand: 18.11.2012 -----------------------...
Author: Jacob Blau
2 downloads 0 Views 235KB Size
HOCHSCHULE MUENCHEN FAKULTÄT ELEKTROTECHNIK UND INFORMATIONSTECHNIK TECHNISCHE INFORMATIK Prof. Dr. A. Irber Stand: 18.11.2012 ----------------------------------------------------------------------------------

Praktikum zu OOP/C++ (4) Allgemeines Im vorliegenden Versuch soll schrittweise die folgende Klassenhierarchie entwickelt werden:

Bei der Implementierung der einzelnen Klassen ist das Prinzip der Mehrfachverwendung von Code zu beachten, d.h. in der Definition der Memberfunktionen sind - wo immer möglich und sinnvoll - andere Memberfunktionen derselben Klasse oder Memberfunktionen von Basisklassen einzusetzen.

Teil a) Im ersten Schritt ist eine Klasse Uhr zu entwickeln. Objekte dieser Klasse sollen die jeweilige Zeit ("Uhrzeit") in einer privaten Datenkomponente (Attribut) m_Zeit speichern. Hierfür ist die Klasse Zeit einzusetzen, deren Definition in der Header-Datei Zeit.h (s. Anlage 1) enthalten ist und deren Implementierung in der Objekt-Datei Zeit.cpp zur Verfügung steht. In welcher Beziehung stehen die Klassen Uhr und Zeit zueinander und wie wird diese Beziehung im Klassendiagramm dargestellt ? Die Klasse Uhr soll über die folgenden öffentlichen Memberfunktionen verfügen. ▻ Default-Konstruktor, der die Zeit-Datenkomponente auf 00:00.00 (d.h. Stunde=0, Minute=0, Sekunde=0) setzt, ▻ Konstruktor, der die Zeit-Datenkomponente mit dem als Parameter übergebenen Zeit-Objekt initialisiert. ▻ void setTime(....); Setzen der Uhrzeit (Zeit-Datenkomponente) auf den als Parameter übergebenen Wert ▻ Zeit getTime() const; Rückgabe des Werts der Zeit-Datenkomponente (aktuelle Uhrzeit) als Funktionswert. ▻ int tickClock(int); Erhöhung der Uhrzeit um die durch den Parameter angegebene Anzahl Sekunden. (Defaultwert für Parameter = 1) Funktionswert : 0, wenn durch die Erhöhung der Uhrzeit kein Tagwechsel eingetreten ist 1, wenn durch die Erhöhung der Uhrzeit ein Tagwechsel eingetreten ist (23:59.00  00:00.00) Diese Funktion soll in abgeleiteten Klassen überschreibbar sein und durch Delegation, d.h. Benutzung des Attributs m_Zeit realisiert werden. ▻ void displayClock() const; Ausgabe der Uhrzeit in folgender Form in die Standard-Ausgabe : "Uhrzeit : hh:mm.ss" Diese Funktion soll in abgeleiteten Klassen überschreibbar sein. Erstellen Sie das Klassendiagramm der Klasse Uhr mit Visual Paradigm (VP)und erzeugen Sie die Header-Datei Uhr.h und die Implementierungsdatei Uhr.cpp. Zur Ersterzeugung benutzen Sie Visual Paradigm /Code/Instant Engineering. Ergänzen Sie Uhr.cpp mit dem nötigen Quellcode. Nach weiteren Modifikationen im Code ist „C++ Round-Trip/Code umkehren“ zu verwenden, bei Modifikationen im Model „C++ Round-Trip/Code generieren“ . Zur Erzeugung eines kleinen Testprogramms steht das C++-Quell-Modul Ueb3a_main.cpp zur Verfügung.

HOCHSCHULE MUENCHEN FAKULTÄT ELEKTROTECHNIK UND INFORMATIONSTECHNIK BEREICH TECHNISCHE INFORMATIK Prof. Dr. A. Irber ----------------------------------------------------------------------------------

Übungen zu C++ (3- 2) Teil b) Von der Klasse Uhr ist eine Klasse UhrMitDatum abzuleiten. Diese Klasse soll neben der Zeit auch das jeweils aktuelle Datum enthalten und "darstellen". Das Datum ist in einer zusätzlichen privaten Datenkomponente abzulegen. Hierfür ist die Klasse Datum einzusetzen. Die Definition dieser Klasse ist in der Header-Datei Datum.h (s. Anlage 2) enthalten. Ihre Implementierung steht in der Objekt-Datei Datum.cpp zur Verfügung. Die Klasse UhrMitDatum soll die folgenden zusätzlichen öffentlichen Memberfunktionen besitzen : ▻ Default-Konstruktor, der die Zeit auf 00:00.00 und das Datum auf den 01.01.0000 setzt. ▻ Konstruktor, der die Zeit- und die Datums-Datenkomponente mit den als Parameter übergebenen Zeit- und Datum-Objekten (Zeit-Objekt als erster Parameter) initialisiert. ▻ void setClock(....,....); Setzen der Zeit- und der Datum-Datenkomponente auf dem jeweiligen als Parameter übergebenen Wert (Zeit als erster Parameter) ▻ void setDate(....); Setzen der Datum-Datenkomponente auf den als Parameter übergebenen Wert. ▻ void incDate(int); Erhöhung des Datums (Datum-Datenkomponente) um die als Parameter übergebene Anzahl von Tagen. Defaultwert für den Parameter = 1. ▻ Datum getDate() const; Rückgabe des Werts der Datum-Datenkomponente als Funktionswert. Die folgenden öffentlichen Memberfunktionen sollen die entsprechenden Memberfunktionen der Basisklasse Uhr überschreiben : ▻ int tickClock(int); Erhöhung der Uhrzeit um die durch den Parameter angegebene Anzahl Sekunden sowie Erhöhung des Datums wenn die Erhöhung der Uhrzeit den Übergang zu einem neuen Tag bewirkt (Übergang von 23:59.59  00:00.00) (Default-Wert für Parameter = 1) Funktionswert : 0, wenn durch die Erhöhung der Uhrzeit kein Tagwechsel eingetreten ist 1, wenn durch die Erhöhung der Uhrzeit ein Tagwechsel eingetreten ist. (wie Uhr::tickClock()) ▻ void displayClock() const; Ausgabe der Uhrzeit und des Datums in folgender Form in die Standard-Ausgabe : "Uhrzeit : hh:mm.sec Datum : tt.mm.jjjj" Erweitern Sie das Klassendiagramm aus a) um die beschriebene Klasse, generieren Sie den Code und implementieren Sie die benötigte Funktionalität. Erstellen Sie ein kleines Testprogramm unter Verwendung des zur Verfügung stehenden C++-Quell-Moduls Ueb3b_main.cpp.

HOCHSCHULE MUENCHEN FAKULTÄT ELEKTROTECHNIK UND INFORMATIONSTECHNIK BEREICH TECHNISCHE INFORMATIK Prof. Dr. A. Irber ----------------------------------------------------------------------------------

Übungen zu C++ (3 - 3) Teil c) Von der Klasse UhrMitDatum ist eine Klasse Wecker abzuleiten. Objekte dieser Klasse sollen beim Erreichen einer einstellbaren Zeit (Alarm- (Weck-)Zeit) einen Alarm erzeugen. Zur Realisierung der Alarm-Funktionalität benötigen - UhrMitWeckerUndDatum Objekte zwei zusätzliche private Datenkomponenten : ▻ Komponente der Klasse Zeit (s. Teil a)) zur Speicherung der Alarm- (Weck-) Zeit ▻ Komponente vom Typ bool zur Aufnahme eines den Weckerbetrieb ein- bzw ausschaltenden Flags (Alarmflag) Weiterhin soll die Klasse die folgenden zusätzlichen öffentlichen Memberfunktionen besitzen : ▻ Default-Konstruktor, der sowohl die Uhrzeit (Zeit-Datenkomponente) als auch die Alarmzeit auf 00:00.00, das Alarmflag auf false (Weckerbetrieb ausgeschaltet) und das Datum auf den 01.01.0000 setzt. ▻ Konstruktor, der die Zeit- und die Datums-Datenkomponente mit den als Parameter übergebenen Zeit-und Datum-Objekten (Zeit-Objekt als erster Parameter) initialisiert, sowie die Alarmzeit auf 00:00.00 und das Alarmflag auf false (Weckerbetrieb ausgeschaltet) setzt.

▻ void setAlert(....); Setzen der Alarmzeit auf den durch den Parameter bestimmten Wert und Einschalten der Weckerfunktion (Setzen des Alarmflags auf true) ▻ void onAlert(); Setzen des Alarmflags auf true (Einschalten des Weckerbetriebs) ▻ void offAlert(); Setzen des Alarmflags auf false (Ausschalten des Weckerbetriebs); ▻ Zeit getAlertTime() const; Rückgabe der Alarmzeit als Funktionswert ▻ bool getAlertFlag() const; Rückgabe des Werts des Alarmflags als Funktionswert ▻ void genAlert() const; Erzeugung eines Alarms. Die Funktion soll in abgeleiteten Klassen überschreibbar sein. Hier soll lediglich der Text "!!! Alarm !!!" mit vorangehendem und nachfolgendem Zeilenwechsel die Standardausgabe ausgegeben werden. ▻ void displayAlertInfo() const; Ausgabe der Werte der alarmfunktionsspezifischen Datenkomponeneten (Alarmzeit und Alarmflag) in die Standard-Ausgabe in folgendem Format : " Alarmzeit : hh:mm.ss an" bzw. " Alarmzeit : hh:mm.ss aus" Die folgenden öffentlichen Memberfunktionen sollen die entsprechenden Memberfunktionen der indirekten Basisklasse UhrMitDatum überschreiben : ▻ int tickClock(int); Erhöhung der Uhrzeit um die durch den Parameter angegebene Anzahl Sekunden sowie Erhöhung des Datums wenn die Erhöhung der Uhrzeit den Übergang zu einem neuen Tag bewirkt (Übergang von 23:59.59  00:00.00) Erzeugung eines Alarms, wenn durch die Erhöhung der Uhrzeit die Alarmzeit erreicht bzw. überschritten wird. Funktionswert : wie Uhr::tickClock()

HOCHSCHULE MUENCHEN FAKULTÄT ELEKTROTECHNIK UND INFORMATIONSTECHNIK BEREICH TECHNISCHE INFORMATIK Prof. Dr. A. Irber ---------------------------------------------------------------------------------▻ void displayClock() const; Ausgabe der Uhrzeit sowie der Alarmzeit und des Zustands des Alarmflags in folgendem Format (Beispiel für eingeschaltete Weckerfunktion) : "Uhrzeit : hh:mm.ss Alarmzeit : hh:mm.ss an"

Formulieren Sie die Definition der Klasse Wecker in der Header-Datei Wecker.h und die Implementierung der Klasse in der C++-Quell-Datei Wecker.cpp. Erstellen Sie ein kleines Testprogramm unter Verwendung des zur Verfügung stehenden C++-Quell-Moduls Ueb3c_main.cpp. Machen Sie sich klar, wie und an welchen Stellen des Programms Polymorphie realisert wird.

HOCHSCHULE MUENCHEN FAKULTÄT ELEKTROTECHNIK UND INFORMATIONSTECHNIK BEREICH TECHNISCHE INFORMATIK Prof. Dr. A. Irber ----------------------------------------------------------------------------------

Übungen zu C++ (3 - 4) Anlage 1 : Inhalt der Header-Datei "Zeit.h"

// Header-Datei Zeit.h // Definition der Klasse Zeit #ifndef ZEIT_H #define ZEIT_H class Zeit { public : Zeit(int=0, int=0, long=0); void void void long

setTime(int, int, long); resetTime(); printTime() const; timeAsSecs() const;

// Initialisierung mit Stunde, Min, Sek // // // //

Setzen von Stunde, Min, Sek Setzen von Std=0, Min=0, Sek=0 Ausgabe Zeit hh:mm:ss --> stdout Rückgabe der Zeit in Sekunden

// // // //

Increment Increment Decrement Decrement

Zeit& Zeit Zeit& Zeit Zeit Zeit Zeit Zeit Zeit& Zeit& Zeit& Zeit&

operator++(); operator++(int); operator--(); operator--(int); operator+(const Zeit&); operator+(long); operator-(const Zeit&); operator-(long); operator+=(const Zeit&); operator+=(long); operator-=(const Zeit&); operator-=(long);

bool bool bool bool bool bool

operator>=(const Zeit&) const; // Vergleich von Zeiten operator>(const Zeit&) const; operator=(const Datum&) const; // Vergleich zweier Daten operator>(const Datum&) const; operator