A Genie programozási nyelv

Objektum-orientált programozás

Osztályok

Az alapelvek a C#-nál és más objektumorientált nyelveknél tárgyaltak szerint értendőek. Property támogatás is rendelkezésre áll ennek mintájára.

A Genie-ben a névterek (namespace) más nyelvektől eltérően nem könytárszerkezethez kötött. Lehetnek osztályba nem tartozó metódusai, ezáltal kiválthatóak a statikus osztályok (amelyeket a nyelv nem támogat).

Egy osztálynál feltüntethető, hogy mely osztályból származik és mely interfészeket valósítja meg.
Metódus módosítók:

Genie-ben vannak kötelező, speciális és opcionális függvény blokkok, amik használhatóak az osztályhoz (is).

Genie-ben bár jelenleg nem adható meg 'final', a jövőben tervezik sealed kulcsszóval ennek támogatását. Nincs névtelen osztály sem benne, de helyette delegate és klósúra felhasználásával megoldhatók az ezt igénylő problémák, sokszor még elegánsabban is.

class Ember : Object kor : int init print "Vagyok!" final print "Voltam..." construct (kor_ : int) print "Mostmar tudom hany eves vagyok" kor = kor_ def gyerek_e () : bool return kor < 14 def jovore () kor++

A nyelv lehetőséget kínál az osztályokon belül tulajdonságok használatára is. Ezek működése a C# tulajdonságokhoz hasonló.

class Foo : Object prop name : string prop readonly count : int prop output : string get return "output" set _name = value

Az első tulajdonságnak nincs megírva getter/setter művelete, így ebből egy privát _name lesz, a másodiknak automatikusan generálódik egy getter (mivel readonly) és a harmadiknak van megírt getter/setter művelete.

Egy specialitás a Genie-ben amit a GObject-től örökölt az, hogy egy osztály metódusokon kívül még tartalmazhat eseménykezelőket is. Ezek úgy jelennek meg mint törzs nélküli metódusok. Példányosítás után lehet őket kötni += operátorral egy delegate-hez.

init var e = new Szamvitel() e.megnott += def (obj, jutalom) print "kaptam $%s penzt!", jutalom e.novel(42) class Szamvitel prop egyenleg : int = 0 def novel (jutalom) egyenleg += jutalom megnott (self, jutalom) def megnott (obj, jutalom)

Objektumok

Kidolgozásra vár...

Öröklődés

Genie-ben egyszeres öröklődés van, ahol a Java-val ellentétben az Object bázisosztályt külön jelölnünk kell, és javasolt is a legtöbb osztályunknál.

class Osztaly1 : Object implements Interfesz1 ...

Polimorfizmus, dinamikus kötés

Metódus felüldefiniáláskor a virtual nem alapértelmezett és az override kulcsszó is kötelező amennyiben szükséges.

Kidolgozásra vár.

Interfészek

Interfész implementálhat statikus (factory) metódust. A benne tartalmazott metódusok nem kötelezően 'abstract'-ak (és Java-val ellentétben itt nem is alapértelmezés!), lehet törzsük, ezáltal mixinként felhasználhatóak.

Interfész nem származtatható (és belőle sem származtathatunk). Ellenben egy úgynevezett követelményként egy másik interfész vagy osztály adható definiáláskor. Egy interfészt egy osztály csak akkor valósíthat meg, ha a követelményként adott összes interfészt megvalósítja, illetve az esetlegesen adott osztályból származtatás is teljesül. Ezzel gyakorlatilag kiváltható az interfészek egymásból származtatása.