1. 2 informatik 3 praktikum 1.heizobjekt und toggles 2.heizungssteuerungs- automat 3.testaufbau...
Post on 05-Apr-2015
106 Views
Preview:
TRANSCRIPT
1
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
3
Grundlagen
• Einführung
• Modularisierung
• Interpretative Implementierung von Automaten
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
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
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
7
Beispielautomat: Dualzahlkonvertierer
1 Update1
Update0 0
ZifferLesen Ende Ausgabe
=
8
ConvObj: Converter
Automat
Automatentabelle
Inp0
Inp1
InpEq
IOObj: InputOutput
IOObj: InputOutput
Update0
Update1
Output
Realisierung:
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 };
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
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);
...
12
Übersicht
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);
}
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;
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";
}
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;
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
top related