15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

Slides:



Advertisements
Ähnliche Präsentationen
Ziele von EINI I + II Einführen in „Informatik“
Advertisements

der Universität Oldenburg
Konzepte objektorientierter Systeme
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Claudio Moraga; Gisbert Dittrich
Java: Objektorientierte Programmierung
Java: Grundlagen der Objektorientierung
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
Claudio Moraga; Gisbert Dittrich
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 5 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 3 Claudio Moraga, Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 2 Gisbert Dittrich; Claudio Moraga FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 12 Claudio Moraga, Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 11 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 10 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
DVG Klassen und Objekte
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Java-Kurs Übung Besprechung der Hausaufgabe
 Präsentation transkript:

Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure II Prof. Dr. Gisbert Dittrich

17-2 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Gliederung Komplexe(re)s Beispiel: Steuer v.Beschäftigte(n) Aspekte des Software Engineering – (Anforderungsanalyse) – SW- Entwurf --> Klassifikationshierarchie – Implementierung --> Klassenhierarchie Implementierungsaspekte – Klassenhierarchie- virtual/rein virtual – inline - Wiederholung Liste - rand() (Vorteil des OO-Ansatzes) – Erweiterung – Nachteil von alternativem Ansatz

17-3 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Beschäftigte Grobklassifikation: Angestellte: festbesoldet Arbeiter: Entlohnung nach Arbeitsstunden Steuern: – Freibetrag: (abhängig von Position) – Einheitlicher Steuersatz: 45%

17-4 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Beschäftigte (Forts.) also: Steuer = ((Gehalt - Freibetrag)*45)/100, Freibetrag ergibt sich aus Basisfreibetrag + Zusatzfreibetrag, Basisfreibetrag für alle: 500 DM

17-5 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Beschäftigte (Forts.) Angestellte: B1: 4000 DM, Zusatzfreibetrag: 200 DM, B2: 6000 DM, Zusatzfreibetrag: 400 DM. Arbeiter: A1: Stundenlohn: 20 DM A2: Stundenlohn: 30 DM – Zusatzfreibetrag für alle: 100 DM.

17-6 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Klassifikationshierarchie

17-7 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Aufgabe Realisierung dieser Hierarchie Implementierung auf Grundlage der Modellierung --> einige neue Gesichtspunkte und Ideen. Berechnungen: Gehaltssumme Summe anderer Ausgaben. Erweiterung der Hierarchie um B3

17-8 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Programm-Entwurf Klassifikationshierarchie angemessen berücksichtigen: Vererbung folgt der (Modellierungs-)Hierarchie In der Hierarchie angegebene Attribute etc. an der richtigen Stelle darstellen Attribute und Methoden "so hoch wie mög- lich im Baum" anbringen.

17-9 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Jedem Knoten im Kassifikationsbaum entspricht eine Klasse. Die Relation IstSohnVon in der Klassifikationshierarchie wird übersetzt in ErbtVon in der Klassenhierarchie. Konsequenzen

17-10 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Programm-Entwurf (Forts.) Abstrakte Methoden da, wo der Name bereits bekannt sein sollte, der Name schon verwendet werden kann, der Code noch nicht angegeben werden kann oder soll.

17-11 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte wichtige Kategorie auch in der Softwaretechnik Programm-Entwurf (Forts.) Zugriffsspezifikationen angemessen berücksichtigen: Sie werden in der (Modell-)Hierarchie nicht dargestellt. Hier hilft gesunder Menschenverstand.

17-12 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Die Klasse Beschaeftigter als Wurzel class Beschaeftigter { private: char * Name; protected: static const int BasisFreibetrag = 500;//* virtual int DerZusatzfreibetrag() = 0; public: Beschaeftigter(char *); virtual int Gehalt() = 0; int Freibetrag(); int Steuer(); char * DerName(); virtual void Druck (); }; * In Borland so nicht: "Mag der Compiler nicht". Konstante rein virtuelle Funktionen

17-13 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Konstruktor/ Druck Beschaeftigter :: Beschaeftigter(char * t) { Name = new char[strlen(t)]; strcpy(Name, t); } void Beschaeftigter::Druck() { cout << "Name: "<< DerName() << "\t\tGehalt: "<< Gehalt() << endl; }

17-14 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Berechnung der Steuer Bemerkenswert: Gehalt ist rein virtuell – der Code ist also an dieser Stelle nicht bekannt, – er wird erst später klassenspezifisch nachgetragen. Steuern sollten (numerisch) positiv sein!

17-15 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Beachten Sie: rein virtuelle Methoden Weitere Methoden Ausgabe des Namens Berechnung des Freibetrags Berechnung der Steuer char * Beschaeftigter::DerName() { return Name;} int Beschaeftigter ::Freibetrag() { return BasisFreibetrag + DerZusatzfreibetrag();} int Beschaeftigter::Steuer() { int SteuerGehalt = Gehalt() - Freibetrag(); return (SteuerGehalt > 0 ? (SteuerGehalt*45)/100 : 0) ;}

17-16 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Nächste Ebene Implementiert werden sollten die Klasse Angestellter, die Klasse Arbeiter. Angestellter : keine besonderen Angaben Arbeiter : schon komplizierter.

17-17 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Konstruktor wird mit dem Code angegeben, der ihn implementiert ( inline -Formulierung) class Angestellter : public Beschaeftigter { protected: int FestGehalt; public: Angestellter(char * t): Beschaeftigter (t) {} }; Die Klasse der Angestellten

17-18 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Einschub zu : inline Zum Abarbeiten einer Methode: Konstruktion eines activation record mit – Werten der aktuellen Parameter, – Werten lokaler Variablen, – Rückgabewert, Rücksprungadresse etc. Beim Aufruf der Methode: – Aktivierung des activation record auf dem Laufzeitstack Rücksprung an die Stelle des Aufrufs, wenn der Aufruf abgearbeitet ist.

17-19 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Einschub: inline (Forts.) Methodenaufruf zeitintensiv -> bei einfachen Methoden: Verwaltungsaufwand höher als der Aufwand für die Berechnung. Alternative: inline Spare mir den Aufwand mit dem activation record, kopiere dafür den Code für die Methode direkt an die Stelle im Aufruf.

17-20 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Einschub: inline (Forts.) inline -Formulierung sollte (nur) in einfachen Fällen benutzt werden: Vereinfacht die Formulierung erheblich, wird also hier i.f. (stillschweigend) verwendet. Ist Frage der Implementierung Ändert also nicht die Wirkung (Semantik) der Funktion.

17-21 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Angestellter B1 Stellen keine abstrakte Klasse dar: Es sollen Objekte dieses Typs erzeugt werden, alle Angaben sind vorhanden. Konsequenz: Die rein virtuellen Methoden, die noch nicht implementiert wurden, müssen in dieser Klasse realisiert werden: – Gehalt – DerZusatzfreibetrag

17-22 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte class AngestellterB1 : public Angestellter { public: AngestellterB1(char * t): Angestellter(t) {FestGehalt = 4000;} int Gehalt() {return FestGehalt;} int DerZusatzfreibetrag() {return 200;} void Druck () { cout<< " Angestellter B1\t" ; Beschaeftigter::Druck(); }; Klassendefinition

17-23 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Die Klasse Arbeiter Rein virtuelle Methoden DerZusatzfreibetrag, Gehalt hier implementierbar. Dazu Einführung einer rein virtuellen Methode DerStundenlohn gibt den Stundenlohn für die jeweilige Klasse an verwendbar, ohne daß der Wert dafür bekannt.

17-24 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Die Klasse Arbeiter (Forts.) class Arbeiter: public Beschaeftigter { protected: int StundenZahl; int DerZusatzfreibetrag() {return 100;} public: Arbeiter(char * t):Beschaeftigter(t) {} void SetzeStunden(int v) {StundenZahl = v;} int DieStundenZahl() {return StundenZahl;} virtual int DerStundenlohn() = 0; int Gehalt() { return DerStundenlohn()*DieStundenZahl();} };

17-25 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte ArbeiterA1 Die Klasse ist nicht abstrakt. Vorgehen wie oben für AngestellterB1: muß die bislang virtuell gebliebenen Methoden definieren

17-26 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte ArbeiterA1 (Forts.) class ArbeiterA1: public Arbeiter { public: ArbeiterA1(char *, int); int DerStundenlohn() { return 20; } void Druck () { cout<< " Arbeiter A1\t\t" ; Beschaeftigter::Druck();}; }; ArbeiterA1:: ArbeiterA1(char * t, int w): Arbeiter(t) { StundenZahl = w;}

17-27 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Andere Klassen Definition der anderen Klassen: AngestellterB2 ArbeiterA2 völlig analog zu den angegebenen Definitionen, wird daher hier nicht wiederholt.

17-28 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Zusammenfassung Konstruktion einer Klassifikationshierarchie aus einer Beschreibung Daten Verhalten, d.h. Methoden Umsetzung in eine Klassenhierarchie Überlegung, wo Komponenten (Methoden, Attribute) angebracht werden,

17-29 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Zusammenfassung (Forts.) Analyse, an welcher Stelle welche Methode benötigt wird, Überlegung, an welcher Stelle welche Methode definiert werden kann – d.h.auch: Realisierung abstrakter Klassen/ [rein] virtueller Methoden. Technisch: Einführung von inline -Code.

17-30 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Buchhalteraufgabe Aufgabe: Bestimme, was monatlich an Gehältern, Steuern und Freibeträgen zusammenkommt. Lösungsplan: Verwalte die Beschäftigten – z.B. in einer verketteten Liste Iteriere über die Liste und ermittle die benötigten Daten.

17-31 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Listenelement: Attribute: – weiter: Zeiger auf Listenelement – Zur Konstruktion der Liste Nutzinfoweiter Beschäftigter Nutzinfo (hier: (Zeiger auf) Beschaeftigter) Methoden: Holen, Setzen der Nutzinfos

17-32 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Zur Konstruktion der Liste class BeschaeftigtenListenEl { private: Beschaeftigter * Nutzinfo; public: BeschaeftigtenListenEl * weiter; Beschaeftigter * Get_Beschaeftigten(); void Set_Beschaeftigten(Beschaeftigter *);}; Beschaeftigter * BeschaeftigtenListenEl::Get_Beschaeftigten(){ return Nutzinfo;}; void BeschaeftigtenListenEl:: Set_Beschaeftigten(Beschaeftigter * wen){ Nutzinfo=wen;};

17-33 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Zur Konstruktion der Liste Zur Liste selbst: Attribute: Kopf, Aktuelles Element Methoden: Konstruktor Einfügen in Liste (d.h. Engagieren eines Beschaeftigten ), Starten der Iteration Inspektion des aktuellen Elements Weiterschalten (möglich?)/Am Ende der L.

17-34 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Zur Konstruktion der Liste class BeschaeftigtenListe { public: BeschaeftigtenListenEl * Kopf; BeschaeftigtenListenEl * AktuellesElement; BeschaeftigtenListe(); void Engagieren(Beschaeftigter *); void StartIteration(); Beschaeftigter * DieserBeschaeftigte(); int WeiterSchalten(); };

17-35 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Zu den Methoden Konstruktor: BeschaeftigtenListe::BeschaeftigtenListe() { Kopf = NULL; AktuellesElement = NULL;} Einfügen: void BeschaeftigtenListe:: Engagieren(Beschaeftigter * wen) { BeschaeftigtenListenEl * HilfsKopf = new BeschaeftigtenListenEl; HilfsKopf->Set_Beschaeftigten(wen); HilfsKopf->weiter = Kopf; Kopf = HilfsKopf;}

17-36 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Zu den Methoden Startiteration: void BeschaeftigtenListe::StartIteration() { AktuellesElement = Kopf;} Inspektion des aktuellen Elements : Beschaeftigter * BeschaeftigtenListe:: DieserBeschaeftigte() { if (AktuellesElement == NULL) return NULL; else return AktuellesElement->Get_Beschaeftigten();}

17-37 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Zu den Methoden Weiterschalten (+ Am Ende der Liste ?) Es muß klar sein, wann die Liste zu Ende durchlaufen ist. Gib dann -1 aus, und sonst 0 ; also: int BeschaeftigtenListe::WeiterSchalten() { if (AktuellesElement->weiter == NULL) return -1; else { AktuellesElement = AktuellesElement->weiter; return 0;}

17-38 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Zur Entstehung der Liste Durch Zufallszahlen: Erzeuge eine ganzzahlige Zufallszahl – über Funktion rand() aus stdlib.h Abhängig vom Rest der Division durch 4 wird ein entsprechender Beschäftigter erzeugt. Analog: Erzeuge zufällig Namen. Baue damit Liste mit (hier:) 15 Einträgen auf.

17-39 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Code 1 BeschaeftigtenListe * Mitarbeiterliste = new BeschaeftigtenListe; // Erzeugen der Listeneinträge int zufall=rand(); char * nme = new char [6]; nme[5] = '\0'; cout << "Beschäftigte und deren Gehälter: "<< endl;

17-40 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Code 2 for (int j = 0; j < 15; j++) {for ( int i = 0;i < 5; i++) { nme[i] = (rand()%26)+65; // Zufallszahlen zwischen bestimmen; entsprechen A-Z } int A1_Stunden = zufall%168; int A2_Stunden = zufall%200; Beschaeftigter * einBeschaeftigter; int switsch = zufall % 4;

17-41 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Code 3 switch (switsch){ case 0: einBeschaeftigter = new AngestellterB1(nme);break; case 1: einBeschaeftigter = new AngestellterB2(nme);break; case 2: einBeschaeftigter = new ArbeiterA1(nme, A1_Stunden);break; case 3: einBeschaeftigter = new ArbeiterA2(nme, A2_Stunden);break;}

17-42 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Code 4 Mitarbeiterliste ->Engagieren(einBeschaeftigter); einBeschaeftigter->Druck(); zufall = rand(); } cout << endl;

17-43 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Verwendung der Liste Akkumulierte Werte berechnen Akkumulierte Werte ausgeben

17-44 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Code 1 // Akkumulierte Werte berechnen: Mitarbeiterliste->StartIteration(); Beschaeftigter * akt_Beschaeftigter = Mitarbeiterliste->DieserBeschaeftigte(); long int gehaltsSumme = akt_Beschaeftigter->Gehalt(); long int steuerSumme = akt_Beschaeftigter->Steuer(); long int freiBetragsSumme = akt_Beschaeftigter->Freibetrag();

17-45 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Code 2 // Akkumulierte Werte berechnen 2: while (Mitarbeiterliste->WeiterSchalten() == 0) { akt_Beschaeftigter = Mitarbeiterliste->DieserBeschaeftigte(); gehaltsSumme += akt_Beschaeftigter->Gehalt(); steuerSumme += akt_Beschaeftigter->Steuer(); freiBetragsSumme += akt_Beschaeftigter->Freibetrag(); }

17-46 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Code 3 // Akkumulierte Werte ausgeben: cout <<"Insgesamt also (alle Beträge in DM): " << endl << "Gehälter:\t\t" << gehaltsSumme << endl << "Steuern:\t\t" << steuerSumme << endl << "Freibeträge:\t" << freiBetragsSumme << endl; Steuern 1 ProgSteuern 1 Quelltext

17-47 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Ausgabe auf Console Beschäftigte und deren Gehälter: Arbeiter A1 Name: MZRHL Gehalt: 760 Arbeiter A1 Name: JOETB Gehalt: 3240 Angestellter B1 Name: WLTZT Gehalt: 4000 Angestellter B2 Name: IEMHP Gehalt: 6000 Arbeiter A2 Name: YBPSW Gehalt: 5010 Angestellter B1 Name: JCCVJ Gehalt: 4000 Arbeiter A1 Name: FJEEE Gehalt: 3080 Angestellter B2 Name: JZYLN Gehalt: 6000 Arbeiter A1 Name: EXKSZ Gehalt: 520 Arbeiter A1 Name: ASXFV Gehalt: 1320

17-48 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Ausgabe auf Console 2 Beschäftigte und deren Gehälter (Fortsetzung): Arbeiter A2 Name: FFUCR Gehalt: 2370 Angestellter B1 Name: JDUGC Gehalt: 4000 Arbeiter A1 Name: KKKIX Gehalt: 2920 Angestellter B2 Name: ETOBW Gehalt: 6000 Angestellter B1 Name: VDFQJ Gehalt: 4000 Insgesamt also (alle Beträge in DM): Gehälter: Steuern: Freibeträge: 10300

17-49 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Zu beachten Formulierung nimmt keinen Bezug auf den Typ des Beschäftigten. Flexibilität durch objektorientierten Zugang Vererbung dynamisches Binden Änderungsfreundlichkeit durch Objektorien- tierung.

17-50 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte AngestellterB3 Ist Angestellter Festgehalt: 8000 DM, Zusatzfreibetrag: 1000 DM Berücksichtigung in der Hierarchie: Einfügen der entsprechenden Klasse. Darstellung der Klasse mit minimalem Aufwand durch Vererbung.

17-51 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte class AngestellterB1 : public Angestellter { public: AngestellterB1(char * t): Angestellter(t) {FestGehalt = 4000;} int Gehalt() {return FestGehalt;} int DerZusatzfreibetrag() {return 200;} void Druck () { cout<< " Angestellter B1\t" ; Beschaeftigter::Druck();}; }; AngestellterB1

17-52 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte class AngestellterB3 : public Angestellter { public: AngestellterB3(char * t): Angestellter(t) {FestGehalt = 8000;} int Gehalt() {return FestGehalt;} int DerZusatzfreibetrag() {return 1000;} void Druck () { cout<< " Angestellter B3\t" ; Beschaeftigter::Druck();}; }; AngestellterB3

17-53 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Klassifikationshierarchie alt

17-54 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Klassifikationshierarchie neu

17-55 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Code Änderung im Hauptprogramm int switsch = zufall % 5; switch (switsch){ case 0: einBeschaeftigter = new AngestellterB1(nme);break; case 3: einBeschaeftigter = new ArbeiterA2(nme, A2_Stunden);break; case 4: einBeschaeftigter = new AngestellterB3(nme);break;}

17-56 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Steuern 2 ProgSteuern 2 Quelltext Hauptprogramm Wird (sonst) nicht verändert !!!! Konsequenz: – erweiterungsfreundlicher Entwurf.

17-57 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Ausgabe auf Console Beschäftigte und deren Gehälter: Arbeiter A2 Name: MZRHL Gehalt: 1140 Angestellter B1 Name: JOETB Gehalt: 4000 Angestellter B3 Name: WLTZT Gehalt: 8000 Arbeiter A1 Name: IEMHP Gehalt: 2100 Arbeiter A1 Name: YBPSW Gehalt: 2220 Angestellter B3 Name: JCCVJ Gehalt: 8000 Angestellter B3 Name: FJEEE Gehalt: 8000 Angestellter B1 Name: JZYLN Gehalt: 4000 Arbeiter A1 Name: EXKSZ Gehalt: 520 Arbeiter A1 Name: ASXFV Gehalt: 1320

17-58 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Ausgabe auf Console 2 Beschäftigte und deren Gehälter (Fortsetzung): Angestellter B3 Name: FFUCR Gehalt: 8000 Arbeiter A2 Name: JDUGC Gehalt: 1440 Arbeiter A2 Name: KKKIX Gehalt: 4140 Angestellter B2 Name: ETOBW Gehalt: 6000 Angestellter B1 Name: VDFQJ Gehalt: 4000 Insgesamt also (alle Beträge in DM): Gehälter: Steuern: Freibeträge: 13200

17-59 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Alternative Annahme: Objektorientierter Ansatz nicht zur Verfügung. --> Arbeite mit structs mit Kennungen: Führe für jede Stellenart eine Kennung ein, – umständliche Formulierung, – entsprechende struct muß an die Anforderungen der einzelnen Stellenarten angepaßt werden. Frage bei der Iteration über die Liste jeweils die Kennung für jedes Element ab.

17-60 Prof. Dr. G. Dittrich EINI II Kap. 17: Komplexes Beispiel: Beschäftigte Alternative (Forts.) Das ist fehleranfällig, nicht änderungsfreundlich, wenig verständlich (Spaghetti-Code). Hier keine Demonstration dazu!!!