Model.h
download
#ifndef __MODEL_H
#define __MODEL_H
// Odwzorowanie analizowanego systemu
// Fragment pracy dyplomowej
//
// Dariusz Cieślak, http://cieslakd.prv.pl
#include "Const.h"
#include "Trigger.h"
#include "Predicate.h"
#include "Transition.h"
#include "PtrList.h"
#include "AbstractModel.h"
#include "VariableList.h"
#include "Set.h"
class Variable;
class AbstractState;
class InputSet;
class ostream;
class Expression;
class Input;
class Scaner;
class Model : public AbstractModel
{
friend class RealTriggerGenerator;
PtrList<Const> consts;
PtrList<Predicate> predicates;
Expression* /*only null*/ errorCondition;
PtrList<Trigger> triggerList;
const BitVector computeAbstractState() const;
void createData();
// do celów debugowania
void showAbstractState(
ostream& os, AbstractState* /*shared*/ as) const;
void dumpVars();
// disallow copy and assign by clients
Model(const Model&);
Model& operator=(const Model&);
// elementy rekursywnego parsera wyrażeń
Expression* /*only*/ parse_mul(Scaner& scan) const;
Expression* /*only*/ parse_sum(Scaner& scan) const;
Expression* /*only*/ parse_rel(Scaner& scan) const;
Expression* /*only*/ parse_log(Scaner& scan) const;
// metoda ułatwiająca zapisywanie testów
// wykonuje wyrażenie i sprawdza wynik
// sygnalizuje jeśli wynik inny niż oczekowany
bool checkExpressionResult(
const char* sExpression, int iExpected) const;
public:
SetOf<Input> inputList;
VariableList variableList;
Model();
~Model();
// budowanie modelu ze składników
void add(Const* /*only*/ c);
void add(Predicate* /*only*/ p);
void add(Trigger* /*only*/ t);
Expression* /*only*/ parseExpression(Scaner& scan) const;
Expression* /*only*/ parseValue(Scaner& scan) const;
void setErrorCondition(Expression* /*only*/ expr);
// format CXL służy do wymiany danych z narzędziami środowiska
// COSMA
void saveCxl(ostream& os);
static void selfTest();
};
#endif /* __MODEL_H */
(...)
Nie ma bowiem łatwych odpowiedzi.
Nie istnieje nic takiego jak najlepsze
rozwiązanie - zarówno jeśli chodzi o
narzędzia,
jak i języki czy systemy operacyjne. Są
jedynie systemy, które mogą być bardziej
odpowiednie w konkretnych okolicznościach.
I tu właśnie do gry wchodzi pragmatyzm.
Nie należy przywiązywać się do żadnej
określonej metody, ale mieć na tyle rozległą
wiedzę i doświadczenie, by w danej sytuacji
wybrać dobre rozwiązanie.
(...)
Andrew Hunt, David Thomas
"Pragmatyczny Programista"