17
1

1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

Embed Size (px)

Citation preview

Page 1: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

1

Page 2: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

2

Informatik 3 Praktikum

1. Heizobjekt und Toggles

2. Heizungssteuerungs-Automat

3. Testaufbau

4. Simulatoren

5. Histogramm

6. Grafikausgabe (Haus)

7. Bezier mit MFC

8. Prozesse

9. Parallele Prog. I

10. Parallele Prog. II

Vorlesung1. Software-Engineering

• Grundlagen• Softwaremodell• Das V-Modell

2. Windows Applikationen

• Windows 32 API • Fensterorientierte

Applikationen

3. Parallele Programme• Prozesse, Threads • Kommunikation

zwischen parallelen Programmen

• Konflikte

Page 3: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

3

Grundlagen

• Einführung

• Modularisierung

• Interpretative Implementierung von Automaten

Page 4: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

4

Automaten nicht interpretativ (aus IN1)

Implementierung in der Programmstruktur

Aufgabenstellung 1 (z.B. Verkaufsautomat)

Programm für Verkaufs-automat

Eingabe-events Aktionen

Aufgabenstellung 2 (z.B. Dualzahlenkonverter)

Programm für Dualzahlen-automat

Eingabe-events Aktionen

Page 5: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

5

Interpretative Implementierung heißt:

• Umsetzung Ablauflogik in Daten(statt in ein Programm)

• Verwendung eines für beliebige Anwendungen benutzbaren Interpreter-Programms, das auf diesen Daten arbeitet

Page 6: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

6

Jetzt: Automaten interpretativ

Objekt für Aktionen zu Verkauf Objekt für Aktionen zu Verkauf

Objekt für Eingaben zu Verkauf

Automat unabhängig von Aufgabe

Aufgabenstellung 1 (z.B. Verkaufsautomat)

erzeugt Eingabe-events

Aktionen Automatentabelle f. Verkaufsautomat als Datenstruktur

Objekt für Aktionen zu Verkauf

beschreibt die Transitionen

Objekt für Aktionen zu Verkauf Objekt für Aktionen zu Verkauf

Objekt für Eingaben zu Dualz.konv.

Automat unabhängig von Aufgabe

Aufgabenstellung 2 (z.B. Dualzahlenkonvertierung)

erzeugt Eingabe-events

Aktionen Automatentabelle f. Dualz.konv.als Datenstruktur

Objekt für Aktionen zu Dualz.konv.

beschreibt die Transitionen

Page 7: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

7

Beispielautomat: Dualzahlkonvertierer

1 Update1

Update0 0

ZifferLesen Ende Ausgabe

=

Page 8: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

8

ConvObj: Converter

Automat

Automatentabelle

Inp0

Inp1

InpEq

IOObj: InputOutput

IOObj: InputOutput

Update0

Update1

Output

Realisierung:

Page 9: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

9

Automatentabelle

struct AutoTabEintr AutoTab[] = {

{ ZiffLesen,Inp0, ZiffLesen,Update0, &ConvObj }, { ZiffLesen,Inp1, ZiffLesen,Update1, &ConvObj }, { ZiffLesen,InpEq, Ende, Output, &IOObj }, { Fehler, Reset, ZiffLesen,ResetAction, &ConvObj }

};

ConvObj: Converter

Automat

Automatentabelle

Inp0

Inp1

InpEq

IOObj: InputOutput

IOObj: InputOutput

Update0

Update1

Output

// per Konvention: Noop==0 und Fehler== -1

enum Events { Inp1, Inp0, InpEq, Reset };

enum Actions { Noop=0, Update0, Update1, Output, ResetAction };

enum Zustaende { ZiffLesen, Ende, Fehler=-1 };

Page 10: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

10

Verwendung der ISA-Relation

class AutoClient {public:

virtual void Action(short sActNr) {};};

class AutoClient {public:

virtual void Action(short sActNr) {};};

class InputOutput: public AutoClient{ ... void Action(short sActNr);};

class InputOutput: public AutoClient{ ... void Action(short sActNr);};

class Converter: public AutoClient { ... void Action(short sActNr);};

class Converter: public AutoClient { ... void Action(short sActNr);};

Is a

Spezi

alis

ieru

ng

Page 11: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

11

Verwendung virtueller Funktionen

struct AutoTabEintr {public: short sZausg, sEvent, sZfolge, sAction; AutoClient *pAutoClient; };

struct AutoTabEintr {public: short sZausg, sEvent, sZfolge, sAction; AutoClient *pAutoClient; };

struct AutoTabEintr AutoTab[] = { { ZiffLesen,Inp0, ZiffLesen,Update0, &ConvObj }, { ZiffLesen,Inp1, ZiffLesen,Update1, &ConvObj }, { ZiffLesen,InpEq,Ende, Output, &IOObj }, { Fehler, Reset,ZiffLesen,ResetAction,&ConvObj }};

struct AutoTabEintr AutoTab[] = { { ZiffLesen,Inp0, ZiffLesen,Update0, &ConvObj }, { ZiffLesen,Inp1, ZiffLesen,Update1, &ConvObj }, { ZiffLesen,InpEq,Ende, Output, &IOObj }, { Fehler, Reset,ZiffLesen,ResetAction,&ConvObj }};

...

pTable[i].pAutoClient->Action(pTable[i].sAction);

...

...

pTable[i].pAutoClient->Action(pTable[i].sAction);

...

Page 12: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

12

Übersicht

Page 13: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

13

IOObj: InputOutput

ConvObj: Converter

Automat

Automatentabelle

Inp0

Inp1

InpEq

IOObj: InputOutput

IOObj: InputOutput

Update0

Update1

Output

cin>>ch;

switch(ch)

{ case '0': sZust=pAutomat->Event(Inp0); break;

case '1': sZust=pAutomat->Event(Inp1); break;

case '=': sZust=pAutomat->Event(InpEq); break;

default: cout<<"Eingabefehler"; break;

}

if(sZust==Ende) exit(0);

if(sZust==Fehler)

{ cout<<"Falsche Eingabefolge, Reset";

pAutomat->Event(Reset);

}

Page 14: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

14

ConvObj: Converter

ConvObj: Converter

Automat

Automatentabelle

Inp0

Inp1

InpEq

IOObj: InputOutput

IOObj: InputOutput

Update0

Update1

Output

void Converter::Action(short sActNr)

{

switch(sActNr)

{ case Update0: nWert *= 2; break;

case Update1: nWert *= 2; nWert += 1; break;

case ResetAction: nWert = 0; break;

default: break;

}

}

int nWert;

Page 15: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

15

IOObj: InputOutput

ConvObj: Converter

Automat

Automatentabelle

Inp0

Inp1

InpEq

IOObj: InputOutput

IOObj: InputOutput

Update0

Update1

Output

void InputOutput::Action(short sActNr)

{ if(sActNr!=Output)

cout<<"InputOutput: falsche Aktion "<<sActNr;

else

cout<<pConverter->GetResult()<<" (dezimal)\n";

}

Page 16: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

16

DualAuto: Automat

ConvObj: Converter

Automat

Automatentabelle

Inp0

Inp1

InpEq

IOObj: InputOutput

IOObj: InputOutput

Update0

Update1

Output

for(int i=0; i<sAnzTab; i++) if((pTable[i].sZausg==sZustand)&& (pTable[i].sEvent==sEvNo)) { if(pTable[i].sAction != Noop) pTable[i].pAutoClient->Action(pTable[i].sAction); sZustand = pTable[i].sZfolge; return sZustand; } sZustand = Fehler; return sZustand;

Page 17: 1. 2 Informatik 3 Praktikum 1.Heizobjekt und Toggles 2.Heizungssteuerungs- Automat 3.Testaufbau 4.Simulatoren 5.Histogramm 6.Grafikausgabe (Haus) 7.Bezier

17

Gesamtprogramm

ConvObj: Converter

Automat

Automatentabelle

Inp0

Inp1

InpEq

IOObj: InputOutput

IOObj: InputOutput

Update0

Update1

Output

hcpp

cpp

cpp cpp

HauptprogrammMnA2To10.CPP

MsDev alle

cpp

h