Top Banner
15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 [email protected] EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure II Prof. Dr. Gisbert Dittrich
60

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

Apr 05, 2015

Download

Documents

Meinrad Karper
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

15.5.2000

Universität Dortmund, Lehrstuhl Informatik [email protected]

EINI IIEinführung in die Informatik

für Naturwissenschaftler und Ingenieure II

Prof. Dr. Gisbert Dittrich

Page 2: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-2

Prof. Dr. G. Dittrich15.5.2000

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

Page 3: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-3

Prof. Dr. G. Dittrich15.5.2000

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%

Page 4: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-4

Prof. Dr. G. Dittrich15.5.2000

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

Page 5: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-5

Prof. Dr. G. Dittrich15.5.2000

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.

Page 6: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-6

Prof. Dr. G. Dittrich15.5.2000

EINI II Kap. 17: Komplexes Beispiel: Beschäftigte

Klassifikationshierarchie

B1Gehalt: 4000 DM

Zusatzfreibetrag: 200 DM

B2Gehalt: 6000 DM

Zusatzfreibetrag: 400 DM

Angestellterfestes Gehalt

A1Stundenlohn: 20 DM

A2Stundenlohn: 30 DM

ArbeiterStundenlohn

Zusatzfreibetrag: 100 DM

BeschaeftigterSteuer = 45% von (Gehalt - Freibetrag)

Basisfreibetrag: 500 DMFreibetrag: Basis + Zusatz

Page 7: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-7

Prof. Dr. G. Dittrich15.5.2000

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

Page 8: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-8

Prof. Dr. G. Dittrich15.5.2000

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.

Page 9: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-9

Prof. Dr. G. Dittrich15.5.2000

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

Page 10: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-10

Prof. Dr. G. Dittrich15.5.2000

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.

Page 11: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-11

Prof. Dr. G. Dittrich15.5.2000

EINI II Kap. 17: Komplexes Beispiel: Beschäftigte

wichtige Kategorieauch in der

Softwaretechnik

Programm-Entwurf (Forts.)

• Zugriffsspezifikationen angemessen berücksichtigen:• Sie werden in der (Modell-)Hierarchie nicht

dargestellt.• Hier hilft gesunder Menschenverstand.

Page 12: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-12

Prof. Dr. G. Dittrich15.5.2000

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 virtuelleFunktionen

Page 13: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-13

Prof. Dr. G. Dittrich15.5.2000

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; }

Page 14: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-14

Prof. Dr. G. Dittrich15.5.2000

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!

Page 15: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-15

Prof. Dr. G. Dittrich15.5.2000

EINI II Kap. 17: Komplexes Beispiel: Beschäftigte

Beachten Sie: rein virtuelleMethoden

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);}

Page 16: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-16

Prof. Dr. G. Dittrich15.5.2000

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.

Page 17: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-17

Prof. Dr. G. Dittrich15.5.2000

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

Page 18: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-18

Prof. Dr. G. Dittrich15.5.2000

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.

Page 19: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-19

Prof. Dr. G. Dittrich15.5.2000

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.

Page 20: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-20

Prof. Dr. G. Dittrich15.5.2000

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.

Page 21: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-21

Prof. Dr. G. Dittrich15.5.2000

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

Page 22: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-22

Prof. Dr. G. Dittrich15.5.2000

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

Page 23: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-23

Prof. Dr. G. Dittrich15.5.2000

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.

Page 24: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-24

Prof. Dr. G. Dittrich15.5.2000

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();}};

Page 25: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-25

Prof. Dr. G. Dittrich15.5.2000

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

Page 26: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-26

Prof. Dr. G. Dittrich15.5.2000

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; }

Page 27: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-27

Prof. Dr. G. Dittrich15.5.2000

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.

Page 28: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-28

Prof. Dr. G. Dittrich15.5.2000

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,

Page 29: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-29

Prof. Dr. G. Dittrich15.5.2000

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.

Page 30: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-30

Prof. Dr. G. Dittrich15.5.2000

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.

Page 31: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-31

Prof. Dr. G. Dittrich15.5.2000

EINI II Kap. 17: Komplexes Beispiel: Beschäftigte

• Listenelement:• Attribute:

– weiter: Zeiger auf Listenelement –

Zur Konstruktion der Liste

Nutzinfo weiter

Beschäftigter

Nutzinfo (hier: (Zeiger auf) Beschaeftigter) • Methoden:

Holen, Setzen der Nutzinfos

Page 32: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-32

Prof. Dr. G. Dittrich15.5.2000

EINI II Kap. 17: Komplexes Beispiel: Beschäftigte

Zur Konstruktion der Listeclass 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;};

Page 33: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-33

Prof. Dr. G. Dittrich15.5.2000

EINI II Kap. 17: Komplexes Beispiel: Beschäftigte

Zur Konstruktion der Liste

• Zur Liste selbst:• Attribute:

Kopf, Aktuelles Element• Methoden:

KonstruktorEinfügen in Liste (d.h. Engagieren eines Beschaeftigten),

Starten der Iteration

Inspektion des aktuellen Elements

Weiterschalten (möglich?)/Am Ende der L.

Page 34: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-34

Prof. Dr. G. Dittrich15.5.2000

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();

};

Page 35: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-35

Prof. Dr. G. Dittrich15.5.2000

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;}

Page 36: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-36

Prof. Dr. G. Dittrich15.5.2000

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();}

Page 37: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-37

Prof. Dr. G. Dittrich15.5.2000

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;}

Page 38: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-38

Prof. Dr. G. Dittrich15.5.2000

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.

Page 39: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-39

Prof. Dr. G. Dittrich15.5.2000

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;

Page 40: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-40

Prof. Dr. G. Dittrich15.5.2000

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 65-91 bestimmen;

entsprechen A-Z

}

int A1_Stunden = zufall%168;

int A2_Stunden = zufall%200;

Beschaeftigter * einBeschaeftigter;

int switsch = zufall % 4;

Page 41: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-41

Prof. Dr. G. Dittrich15.5.2000

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;}

Page 42: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-42

Prof. Dr. G. Dittrich15.5.2000

EINI II Kap. 17: Komplexes Beispiel: Beschäftigte

Code 4

Mitarbeiterliste

->Engagieren(einBeschaeftigter);

einBeschaeftigter->Druck();

zufall = rand();

}

cout << endl;

Page 43: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-43

Prof. Dr. G. Dittrich15.5.2000

EINI II Kap. 17: Komplexes Beispiel: Beschäftigte

Verwendung der Liste

• Akkumulierte Werte berechnen

• Akkumulierte Werte ausgeben

Page 44: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-44

Prof. Dr. G. Dittrich15.5.2000

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();

Page 45: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-45

Prof. Dr. G. Dittrich15.5.2000

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();

}

Page 46: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-46

Prof. Dr. G. Dittrich15.5.2000

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 Prog Steuern 1 Quelltext

Page 47: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-47

Prof. Dr. G. Dittrich15.5.2000

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

Page 48: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-48

Prof. Dr. G. Dittrich15.5.2000

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: 53220

Steuern: 19349

Freibeträge: 10300

Page 49: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-49

Prof. Dr. G. Dittrich15.5.2000

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.

Page 50: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-50

Prof. Dr. G. Dittrich15.5.2000

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.

Page 51: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-51

Prof. Dr. G. Dittrich15.5.2000

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

Page 52: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-52

Prof. Dr. G. Dittrich15.5.2000

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

Page 53: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-53

Prof. Dr. G. Dittrich15.5.2000

EINI II Kap. 17: Komplexes Beispiel: Beschäftigte

Klassifikationshierarchie alt

B1Gehalt: 4000 DM

Zusatzfreibetrag: 200 DM

B2Gehalt: 6000 DM

Zusatzfreibetrag: 400 DM

Angestellterfestes Gehalt

A1Stundenlohn: 20 DM

A2Stundenlohn: 30 DM

ArbeiterStundenlohn

Zusatzfreibetrag: 100 DM

BeschaeftigterSteuer = 45% von (Gehalt - Freibetrag)

Basisfreibetrag: 500 DMFreibetrag: Basis + Zusatz

Page 54: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-54

Prof. Dr. G. Dittrich15.5.2000

EINI II Kap. 17: Komplexes Beispiel: Beschäftigte

B1Gehalt: 4000 DM

Zusatzfreibetrag: 200 DM

B2Gehalt: 6000 DM

Zusatzfreibetrag: 400 DM

B3Gehalt: 8000 DM

Zusatzfreibetrag: 1000 DM

Angestellter

festes Gehalt

A1Stundenlohn: 20 DM

A2Stundenlohn: 30 DM

Arbeiter

StundenlohnZusatzfreibetrag: 100 DM

BeschaeftigterSteuer = 45% von (Gehalt - Freibetrag)

Basisfreibetrag: 500 DMFreibetrag: Basis + Zusatz

Klassifikationshierarchie neu

Page 55: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-55

Prof. Dr. G. Dittrich15.5.2000

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;}

Page 56: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-56

Prof. Dr. G. Dittrich15.5.2000

EINI II Kap. 17: Komplexes Beispiel: Beschäftigte

Steuern 2 Prog Steuern 2 Quelltext

Hauptprogramm

Wird (sonst) nicht verändert !!!!• Konsequenz:

– erweiterungsfreundlicher Entwurf.

Page 57: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-57

Prof. Dr. G. Dittrich15.5.2000

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

Page 58: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-58

Prof. Dr. G. Dittrich15.5.2000

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: 62880

Steuern: 22392

Freibeträge: 13200

Page 59: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-59

Prof. Dr. G. Dittrich15.5.2000

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.

Page 60: 15.5.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.

17-60

Prof. Dr. G. Dittrich15.5.2000

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!!!