Podstawy Symulacji
MODSIM II
-jeden moduł główny(MAIN MODULE)
-dowolna liczba par modulow skojarzonych w osobnych plikach(DEFINITION MODULE – same definicje, IMPLEMENTATION MODULE – implementujemy z definicyjnego)
-el importowane w DEFINITION nie sa widoczne w IMPLEMENTATION
-nie można importować z MAIN
-do importowania sluzy IMPORT np. FROM dupa IMPORT kupa;
-sekwencja FROM .. IMPORT musi być na początku modulu
-nie można importować całej biblioteki, tylko konkretne elementy
-nazewnictwo:
*MAIN MODULE – Mnazwa mmnazwa.mod
*DEFINITION MODULE nazwa …
Identyfikatory
-Nazwy zdefiniowanych przez usera elementów programowych np. modulow, stalych zmiennych, typow, porcedur.
-Wymagania
*nierozdzielony ciag znakow(bez spacji myslinkow itp.)
*pierwszy znak – litera
*rozróżnia wielkość liter
Deklaracje
-blok programowy polozony w module definicyjnym lub przed czescia kodu wykonywalnego w pozostałych modulach lub podprogramach zaczynających się od jednego ze slow kluczowych: CONST, TYPE, VAR
-opisuje def przez użytkownika nowe typu danych oraz wyrażenia przyjmujące stale i zmienne wartości
-np. CONST MaxLiczbaPacjentow = 30;
-np. TYPE Dni Wolne = (Sobota, Niedziela);
-np. TYPE DynamicznaTAblica ARRAY OF REAL
-np. VAR liczbaPacjentow : INTEGER;
-np. VAR tablica : DynamicznaTablica(zmienne referencyjna);
UWAGA – nie ma zmiennych wskaźnikowych, tylko referencje.
Automatyczna Inicjalizacja -> analogicznie jak w innych jezykach.
-łańcuchy znakowe(dynamicznie lancuchy znakow – automatyczne zarzadzanie) String, np. „DUPA”
OPERATORY:
:= przypisanie
+,-,*,/ działania matematyczne
DIV dzielenie calkowito liczbowe
MOD – modulo
ACHTUNG: NIE ma niejasnej konwersji wartości.
OPERATORY RELACJI LOGICZNYCH
= równy
<> nierówny
< mniejszy niż
<=
>
OR suma logiczna
AND iloczyn logiczny
NOT przeczenie
UWAGA Operandy musza być boolowskie(0 i 1 nie zamienia się w boolean)
INSTRUKCJE STERUJACE
-IF
ID wyrazenieLogiczne
Sekwencja działań
[ELSIF wyrazanieLogiczne
Sekwencja]
[ELSE
Sekwencja działań]
END IF;
-brak słowa THEN
-END wystepuje w parze z IF
-CASE
CASE[typ_prosty| string]
WHEN a..e,m: sekwncja
WHEN p: sekwencja
[OTHERWISE sekwncja]
END CASE;
-WHILE
WHILE wyrażenie
Sekwencje dzialan
END WHILE;
-LOOP
LOOP
Sekwencje dzialan
END LOOP
-REPEAT
REPEAT
Sekwencja dzialan
UNTIL wyrażenie logiczne;
-FOR
FOR ident:=wyraźnie TO|DOWNTO wyrażenie [BY wyrażenie - - tzn co ile]
Sekwencja dzialan
END FOR;
-FOREACH
FOREACH obiekt IN GROUP
Sekwencja dzialan
END FOREACH;
- Instrukcja natychmiastowego opuszczenia petli : EXIT
PODPROGRAMY – nazwana ograniczona kluczowymi słowami czesc kodu programowego dostepna z innych części programu poprzez nazwe realizujaca określone operacje
TYPY
*funkcje – zwracają wartość
*procedury….
Deklaracja
PROCEDURE Nazwa (IN w1: W1; INOUT w2: W2; OUT w3:W3)[TypZwracanejWartosci];
CONST
TYPE…
VAR…
BEGIN
[RETURN…}
END
-wywolanie procedury
[w:=] NazwaProcedury(…,..,…);
STANDARDOWE PROCEDURY WEJ/WYJ
-INPUT - wczytanie N ciagow znakow z klawiatury oraz zinterpretowane zgodnie z typami
-OUTPUT
Złożone TYPY DANYCH
-struktury statyczne
*FIXED ARRAY – uporządkowany skończony zbior elementow jednego typu
-ustalony rozmiar
-nie mogą być przekazywane jako parametr
*FIXED RECORD
COSTAM = FIXED RECORD;
typ:…
END RECORD;
-struktury dynamiczne
-ARRAY: dynamiczna tablica(jawnie powolywana) i usuwana przez procedury wbudowane NEW oraz DISPOSE np.
VAR kolejka : ARRAY INTEGER, INTEGER OF BOOLEAN;
k: INTEGER
BEGIN
NEW(kolejka, 1…6);
-w przypadku tablicy wielowymiarowej nalezy pamietac o oddzielnym powolaniu jej pol
-procedura DISPOSE można zwalniac tylko wcześniej zaalokowane obszary pamięci
-dla RECORDu predefiniowane sa
NILREC wartosce zminnej typu record do zainicjowania pamieci
ANYREC
OBIETK
-deklaracja składowych klasy i opcjonalne listy dziediczenie
_blok definicji metod klasy(wszystkich zadeklarowanych w bloku wyżej)
FORWARD – stanowi zapowiedziedz pelnej definicji typu lub procedury w dalszej części modulu umozliwijac wcześniejsze wykorzystanie zapowiadanego elementu przy definicji innego
METODA jest lisciel zwiazana z obiektem i może być wywolana jedynie poprzez wyslanie komunikatu do tego obiektu z zadaniem wykonania określonej moetody
ASK – działanie natychmiastowe ( z punktu widzenia czasu symulacji), podobnie do działania procedury lub funkcji – nie wytraca czasu symulacji
ASK METHOD nazwa[parametry]
Wywolanie:S ASK object[TO] nazwa metody[parametry]
TELL – zwiazana z upływem czasu symulacji. Metoda realizujaca asynchronicznie (wspolbieznie, samodzielnie) proces symulacyjny. W jednej chwili symulacyjnej może być wykonywanych kilka metod TELL tego samego lub roznych instancji obiektu
WAITFOR – zwiazana jest z upływem czasu symulacji. Metoda realizujaca synchronicznie proces symulacyjny ( podproces składowy innego procesu). W jednej chwili może być wykonywanie kilka metod WAITFOR
ACHTUNG: nie ma obiektow statycznych.
SELF – stala referencyjna
Może być wykorzystywana przy odwołaniu się obiektu do własnych pol i metod
TELL SELF TO move(); .
-Do pol obiektu można się odowlac na 3 sposoby:
*speedValues:=ASK movingObject [TO] speed;
*speedV…