http://www.adaconcept.com/programs/orokles/idozito.ads
with Ada.Calendar;

package Idozito is

   -- Megjegyzesek:
   --    Az Ada nyelv osztaly fogalmat gyakran felreertik, ezert most kulonboztessunk meg harom dolgot egymastol:
   --       Ha szeretnenk, egy csomagot tekinthetunk (egyke) osztalynak is az allapotaival (valtozoival),
   --       ahol a csomag torzse a konstruktor.... (megjegyzes: ha tobb egyforma csomagot szeretnenk, keszithetunk parameter nelkuli generic csomagot is...)
   --
   --       Azonban az osztaly fogalma az Ada nyelvhez kotodo terminologiaban teljesen mast jelent!
   --       Az osztaly nem mas mint egy (jelolt) rekord tipus,
   --       a rajta vegezheto specialis muveletekkel.
   --
   --       ez elter az 'Class fogalmatol, amely egy olyan "(tipus)halmazt" jelol, amely egy osztalyt es a belole szarmazo osszes osztalyt magaban foglalja


-- Figyeljuk meg, hogy maganak az Idozito csomagnak nincsen allapota (nincsenek inicializalo utasitasok a csomag torzseben)!


   -- Ahhoz, hogy az Idozito_Tipus muveletei a kesobbiekben a szarmaztatas soran oroklodjenek,
   -- a tipus delkaraciojanak egy csomag specifikaciojaban kell lennie.
   type Idozito_Tipus is tagged private;                   -- lehetne nem jelolt tipus is a nyilvanos / publikus / reszleges nezete a tipusnak mig a teljes nezete jelolt...

   procedure Inicializal(Idozito : out Idozito_Tipus);

   procedure Start(Idozito : in out Idozito_Tipus; Lejarati_Idotartam : Duration);

   procedure Frissit(Idozito : in out Idozito_Tipus);

   function Elindult(Idozito : Idozito_Tipus) return Boolean;

   function Lejart(Idozito : Idozito_Tipus) return Boolean;


private


   type Idozito_Tipus is tagged record
      Elindult : Boolean;                      --| adhatnank "egyszeru" kezdoertekeket is ("konstruktor"),
      Lejart   : Boolean;                      --| vagy szarmaztathatnank az Ada.Finalization csomag valamely tipusabol is
      Lejarati_Idopont : Ada.Calendar.Time;    --| az utobbival kaphatunk "konstruktort", destruktort es keszithetunk sajat ertekadast is.
                                               --| (megjegyzes: erdemes kiprobalni, hogy melyik pontosan mikor hivodik meg mielott hibas feltetelezesekkel elnenk, kulonosen igaz ez az Adjust -ra)
   end record;


end Idozito;