A Kite programozási nyelv

Objektum-orientált programozás



Osztályok

Az alapvető egység a nyelvben az osztály. Osztálydeklarációt a kódban bárhol elhelyezhetünk. A tulajdonságok (változók) deklarálása a property kulcsszóval lehetséges. A global kulcsszóval biztosíthatjuk, hogy az osztály páldányai azon a változón osztozzanak (mint C++ static kulcsszava). Természetesen kezdeti értéket is adhatunk a változóknak.

class Greeting [
 property text = "Hello!",
 global property number_given = 1,
 method sendGreeting(string) [
  string|print;
 ];
];

Konstruktorok, destruktorok

Egy adott osztály objektumait konstruktorok segítségével hozzuk létre, és destruktorral semmisítjük meg. A nyelvben ezeket a construct és destruc nevű metódusokkal valósíthatjuk meg. A konstruktorokat is túl lehet terhelni, visszatérési értékük nincs. Amennyiben egy ősosztály konstruktorát akarjuk meghívni, akkor a ősosztály|__construct__(...) metódust kell használnunk.

construct (param1, param2, ...) [
 ...
];
destruct [
 ...
];

Csomagok

Lehetőségünk van csomagok írására is. Ily módon az összetartozó osztályokat és műveleteket egy külön egységbe zárhatunk, jelen esetben egy másik fájlba. Ha használni akarjuk, akkor azt az import kulcsszóval tehetjük meg. Nézzünk egy egyszerű példát:

#!/usr/bin/kite

class Greeting [
 property text,
 method sayGreeting() [
  text|print;
 ]
];

class Hello from Greeting [
 construct [
  this.text = "Hello!";
 ]
];

class Hola from Greeting [
 construct [
  this.text = "ÂĄHola!";
 ]
];

A fenti kódot mentsük el a Greetings.kt néven a CommonSayings könyvtárba. Ekkor bármely más Kite kódból hivatkozhatunk rá úgy, mint CommonSayings.Greetings.

#!/usr/bin/kite

import "CommonSayings.Greetings";
greetings = CommonSayings.Greetings;

english = make greetings.Hello;
spanish = make greetings.Hola;

english|sayGreeting;
spanish|sayGreeting;

A fenti esetben feltettük, hogy a könyvtárstruktúránk az alábbi:
 ./CommonSayings/
 ./CommonSayings/Greetings.kt
 ./test.kt

Viszont abban az esetben, ha ez nem így van, kicsit másképp kell kezelni az használni kívánt csomagot. A virtuális gép keresője segítségével már sokkal általánosabban kezelhetjük ezt a problémát:

#!/usr/bin/kite

import "System.vm.loader";
System.vm.loader.searchPath = System.vm.loader.searchPath + ":/path/to/package";
greetings = System.vm.loader|loadClass("CommonSayings.Greetings");

english = make greetings.Hello;
spanish = make greetings.Hola;

english|sayGreeting;
spanish|sayGreeting;

Objektumok

Az objektumokat a make kulcsszóval hozzuk létre explicit módon. Amennyiben operátorokat használunk objektumokon (pl: két szám összeadása), azok implicit módon létrejönnek. Sajnos a nyelv nem támogatja az adatrejtés elvét.

var = make Class(param1, param2, ...);

Egy osztályt több objektum is példányosíthat. Objektumpéldányt bárhol deklarálhatunk a programban. Minden példány rendelkezik saját adatterülettel, a metódusokat azonban közösen használják. Azt hogy az adott metódus éppen melyik példányon fejti ki hatását, a metódus nem látható this paramétere mutatja.

A nyelv különbséget tesz az objektum metódusainak hívása és változóinak elérése közt. A metódusokat a | (pipe) jellel hívhatjuk meg, a változókat pedig . -tal.

x = class.property;
x|doWork();

Minden objektum automatikusan megkapja az type metódust és az is/isof operátorokat. Ezek segítségével meghatározhatjuk a kívánt objektum típusát. A type metódus egy stringként adja vissza az osztály nevét.

x = "string";
x|type|print;

Az is operátor boolean értéket ad vissza aszerint, hogy a két objektum típus megegyezik-e. Az isof szintén objektumok típusait hasonlítja össze, viszont a származásukra figyel.

import System.string;
 class x of System.string [
];

((make x) is x)|print;
((make x) is System.string)|print;
((make x) isof x)|print;
((make x) isof System.string)|print;

Az alábbi kimenetet kapjuk:
true
false
true
true

Öröklődés

Minden osztálynak egy közös őse van, ez pedig a System.object. A származtatott osztály az ősosztály minden tuladjonságát örökli, ezeket azonban felül tudjuk definiálni. A nyelv a from kulcsszóval jelöli a származtatott osztályokat. A többszörös öröklődés nem támogatott.

class Greetings [
 ...
];

class Hello from Greetings [
 ...
];

Polimorfizmus, dinamikus kötés

Kidolgozásra vár.

Interfészek

A nyelv jelenleg nem támogatja az interfészek használatát.