next up previous contents
Next: Struktura simulačního programu Up: No Title Previous: Úvod

Objektově orientovaná simulace

Model je v SIMLIB chápán jako množina prvků (entit), které jsou spolu navzájem propojeny vazbami. Tyto vazby spolu s chováním prvků určují chování systému jako celku. Podobný přístup je podstatou objektově orientovaného programování, jehož principy se poprvé objevily v šedesátých letech v jazyce SIMULA 67. Objektově orientovaný program je tvořen množinou objektů, které spolu navzájem komunikují -- posílají si zprávy.

Rozdělení systému na jednotlivé objekty je závislé na účelu modelu. Mezi objekty modelu můžeme najít takové, které mají shodné podstatné charakteristiky a ty pak můžeme zařadit do jedné třídy objektů. Třída definuje vnitřní strukturu objektů, reakce objektů na vstupy (zprávy) a vlastní chování objektu v čase.

Objekty modelu provádějí určité akce jako odezvu na přijímané zprávy a současně provádějí jiné akce, které jsou nezávislé na přijímaných zprávách. Akce mění stav objektu, jenž je dán obsahem jeho vnitřních datových struktur.

Každý objekt má definované akce, které realizuje když je vytvořen (inicializuje se) a když je rušen. Tyto akce se nazývají konstruktory a destruktory. Stejně jako ostatní akce, související s popisem chování objektu, patří k takzvaným metodám. Přijetí zprávy odpovídá vyvolání metody a metoda pak popisuje akce, kterými má objekt na tuto zprávu reagovat.

Mezi třídami objektů modelu lze nalézt jisté vzájemné vztahy. Tyto vztahy mají obvykle hierarchický charakter (částečné uspořádání). Některé třídy popisují obecné vlastnosti objektů, jiné je více konkretizují. Toho lze výhodně využít při návrhu tříd modelu tak, aby třídy konkrétní mohly využít všeho, co již definovaly třídy obecné. Tato hierarchie tříd je definována relací dědičnosti. Třída může zdědit vlastnosti své bázové třídy, přidávat nové vlastnosti a případně modifikovat vlastnosti zděděné. Takto pojatá hierarchie tříd umožňuje v maximální míře využívat již existujících tříd, což zjednodušuje a zpřehledňuje implementaci modelů. Hierarchie tříd je v podstatě uspořádáním abstrakcí, obvykle od nejobecnějších po konkrétní. Například:

 Objekt
    Dopravní prostředek
       Automobil
          Nákladní automobil
          Osobní automobil
    Osoba
       Učitel
       Žák

Postup od obecných tříd ke konkrétním odpovídá postupu shora dolů, lze však postupovat i jinak. Vytvoření vhodné hierarchie tříd obvykle závisí na řešeném problému.

Hierarchická struktura existuje i na úrovni objektů modelu. Jde o vzájemný vztah objektů z hlediska jejich zahrnutí do jiných objektů jako jejich částí. Tato relace se označuje "patří do" ("is part of"), má jiné použití než dědičnost ("is kind of") a definuje hierarchii objektů.

  figure13
Figure: Příklad hierarchického uspořádání objektů

Tento způsob popisu problémů je velmi přirozený, protože lze vyjádřit jednoznačný vztah mezi objekty modelu (programu) a objekty modelovaného systému. Metod pro analýzu problémů a návrh objektově orientovaných programů lze využít i v oblasti modelování a simulace. Proto zde uvedeme základní pojmy objektově orientovaného programování.

Objektově orientované programování je metoda implementace, při níž jsou programy tvořeny spolupracujícími skupinami objektů, z nichž každý reprezentuje instanci některé třídy, a třídy jsou navzájem v relaci dědičnosti. Základní principy objektově orientovaného programování:

Abstrakce
ukazuje na podstatné charakteristiky objektu, které jej odlišují od všech ostatních druhů objektů a tedy poskytuje přesně definované konceptuální hranice, vztažené k perspektivě pozorovatele.

Zapouzdření
(encapsulation) Zapouzdřením se rozumí ukrývání všech detailů objektu, které nepřispívají k jeho podstatným charakteristikám, viditelným vně objektu.

Modularita
vyjadřuje vlastnost systému, jenž byl dekomponován do množiny modulů s přesně definovanými vazbami.

Hierarchie
je uspořádání nebo seřazení abstrakcí. Příkladem je hierarchie dědičnosti tříd v objektově orientovaném programování.

Tyto principy jsou pro objektově orientované programování podstatné, následující tři jsou méně důležité.

Typování
je takové uplatnění třídy objektu, že objekty různých tříd nemohou být zaměňovány, nebo nanejvýš mohou být zaměňovány jen velmi omezeným způsobem.

Paralelismus
(concurrency) je vlastnost, která odlišuje aktivní objekt od neaktivního. Při simulačním modelování dynamických systémů se tato vlastnost stává podstatnou.

Persistence
je vlastnost objektu, která definuje dobu jeho existence v čase a prostoru. Například globální proměnné existují pouze při běhu programu, ve kterém jsou definovány, naopak soubory existují, i když program neběží.

Tyto principy nejsou v oblasti programování nové, ale objektově orientované programování je vhodným způsobem kombinuje. Požadavky, které jsou kladeny na objektově orientovaný jazyk můžeme shrnout do následujících bodů:

Existuje mnoho objektově orientovaných programovacích jazyků, největšího rozšíření dosáhly především jazyky Smalltalk a C++. Bližší informace o objektově orientovaném programování jsou dostupné v literatuře.


next up previous contents
Next: Struktura simulačního programu Up: No Title Previous: Úvod

Petr Peringer
Mon Dec 8 13:24:19 CET 1997