next up previous contents
Next: Řízení simulace Up: Popis modelu Previous: Popis modelu

Vytváření a rušení objektů

V objektově orientovaném popisu systémů je třeba používat různé druhy objektů podle způsobu jejich vytvoření. Podle požadavků na dobu existence objektu lze použít různé způsoby vytvoření objektů podle toho, má-li být objekt statický nebo dynamický. Předpokládáme-li třídu Zakaznik, můžeme vytvořit objekty této třídy například takto:

 (1)  new Zakaznik;

 (2)  Zakaznik *ptr;
      ptr = new Zakaznik;

 (3)  Zakaznik Z;

V prvním případě je dynamicky vytvořen nový objekt třídy Zakaznik a takto vytvořený objekt není nijak identifikovatelný. Proto je tento způsob použitelný pouze pro objekty, na které nebude třeba se explicitně odkazovat. Druhý případ je doplněn o ukazatel na objekt třídy zákazník. Tento ukazatel potom slouží k identifikaci konkrétního zákazníka při komunikaci s ním. Dynamické objekty lze vytvářet i rušit v průběhu simulace. Třetí způsob odpovídá vytvoření globálního statického objektu s identifikací jménem (identifikátorem). Tento objekt existuje po celou dobu běhu simulačního programu.

Objekty, definované tvůrcem modelu, mohou být globální nebo lokální z hlediska jejich umístění v jiných objektech. Objekty globální jsou dostupné vždy, objekty uvnitř třídy (lokální) jsou dostupné pouze když to tato třída dovolí specifikací public. Lokální objekty jsou součástí jiných tříd objektů:

class X : public Process {
  Histogram H;
  double  StartTime;
  int i;
public:
  X() : H("X.H",0,0.1,10), i(0) {};
  ...
};

Z ukázky je patrná syntaxe volání konstruktoru lokálního objektu H. Každý objekt třídy X obsahuje histogram H, který je nedostupný objektům jiné třídy (má implicitně specifikaci private).

Další členění objektů je z hlediska časového. Objekty, které v modelu existují po celou dobu simulace, nazveme statické a objekty, které vznikají a zanikají v průběhu simulace, budeme nazývat dynamické.

Protože objekty modelu je nutné identifikovat (pro čitelný výstup), musí se při vytváření objektů některých tříd uvést jejich textové pojmenování:

globální objekty:
  
  Facility  F1("Zařízení 1");
  Store     S1("Sklad 1", Kapacita);
  Histogram H("Četnost hodnot x",Od,Krok,10);

dynamicky vytvořené objekty:
  
  Store *ptr;
  ptr = new Store("Sklad X",10000);

objekty vnořené ve třídě:
  
  class X {
    Facility F;
  public:
    X() : F("Lokální zařízení")  {}
    ...
  };

Pro zrušení objektu odvozeného od třídy Process lze použít metodu Cancel, která provede potřebné operace. Tatáž operace se provede implicitně po ukončení popisu chování objektu v metodě Behavior. Dynamicky vytvořené objekty lze rušit operátorem delete aplikovaným na ukazatel na objekt:

  delete objptr;

Statické globální objekty nelze rušit explicitně, ruší se automaticky po ukončení simulačního programu. Jazyk C++ volá automaticky při rušení každého objektu speciální metodu -- destruktor, který může provést případné operace, nutné pro jeho korektní odstranění z modelu.


next up previous contents
Next: Řízení simulace Up: Popis modelu Previous: Popis modelu

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