A Cool programozási nyelv

Osztályok

Osztályok

Minden osztálydefiníció egy file-ban kell szerepeljen, de egy file-ban több osztályleírást is elhelyezhetünk. Osztályt definiálni a következőképpen tudunk:

class <típus> [ inherits <típus> ] is
      <tulajdonságok>
end;

Minden osztály globális láthatósággal rendelkezik. Az osztálynevek nagy betűvel kell kezdődjenek, az osztályok nem újradefiniálhatók.

Tulajdonságok

Az osztálydefiníció törzse tulajdonságok (attribútumok és metódusok) listáját tartalmazza.
A Cool a legegyszerűbb módon támogatja az információrejtést: minden attribútum lokális, minden metódus globális láthatósággal rendelkezik.
A tulajdonságnevek kis betűvel kell kezdődjenek. Egy osztályon belül sem két metódus, sem két attribútum nem definiálható azonos néven, de egy metódus és egy attribútum lehet azonos nevű.

Egy példa:

class Cons inherits List is
xcar : Int;
xcdr : List;

isNil() : Bool is false end;

init(hd : Int, tl : List) : Cons is
begin
      xcar <- hd;
      xcdr <- tl;
      self;
end
...
end;

Itt a Cons osztálynak két attribútuma (xcar és xcdr), valamint két metódusa (isNil és init) van. Mint látható, a típust minden esetben meg kell adni.
A new <osztálynév> utasítás segítségével hozhatunk létre objektumokat. így például a

(new Cons).init(1, new Nil)

utasítás helyes (a Nil a List egy altípusa). Nincs szükség az objektumok megszüntetésére, az automatikus szemétgyűjtés megsemmisíti a felesleges adatokat.

öröklődés

Az osztálydefinícióban csak egy típust adhatunk meg szülőként. A gyermek a szülő minden tulajdonságát örökli. A metódusok bizonyos korlátozásokkal felüldefiniálhatók, az attribútumok nem.
Az Object osztály különleges, ha nem adunk meg szülőt, akkor automatikusan ez lesz az. A körkörös öröklődés nem megengedett.