Az Afnix programozási nyelv

OOP

Class objektum

A Class objektum az AFNIX terminológiában egyszerûen egy nameset, ami újraépíthetõ egy konstrukciós mechanizmus által. Egy osztály a class lefoglalt kulcsszóval hozható létre. Az eredmény egy Class típusú objektum.

Egy új osztály egy objektum, amit a class lefoglalt kulcsszóval hozhatunk létre. Az ilyen osztály egy objektum, amit egy szimbólumhoz köthetünk.

const Color (class)

A class kulcsszó paramétereként megadhatjuk a példányok adattagjait.

const Complex (class (re im))

Mivel a class namesetként mûködik, lehetséges közvetlenül szimbólumokat kötni az alkalmas név jelölésekhez.

const Color (class) const Color:RED-FACTOR 0.75 const Color:BLUE-FACTOR 0.75 const Color:GREEEN-FACTOR 0.75

Statikus adattag

Amikor egy adat a class namesetben van definiálva, statikus adattagnak nevezzük. A statikus adattag invariáns az osztály példányaiban.

A statikus metódusok hívása a szokásos név jelölésekkel történik.

Color:get-primary-from-string "red" "#23c4e5" Color:get-primary-from-string "green" "#23c4e5" Color:get-primary-from-string "blue" "#23c4e5"

Az osztály példányai AFNIX objektumok, amik egy speciális osztálymetódus, a konstruktor által jönnek létre. Minden példány namesetkénti s funkcionál.

Példányosítás

const i ((class)) const Color (class) const red (Color)

Egy példány létrehozásakor az AFNIX motor egy speciális preset metódust keres, ez a metódus végzi el a példány inicializálását.

const Color (class) trans Color:preset (red green blue) { const this:red (Integer red) const this:green (Integer green) const this:blue (Integer blue) } # create some default colors const Color:RED (Color 255 0 0) const Color:GREEN (Color 0 255 0) const Color:BLUE (Color 0 0 255) const Color:BLACK (Color 0 0 0) const Color:WHITE (Color 255 255 255)

Ha az osztályhoz definiáltunk adattagokat, akkor a példány létrehozásakor ezek az adattagok nil értékkel jönnek létre.

const Complex (class (re im)) trans Complex:preset (re im) { trans this:re (Real re) trans this:im (Real im) }

Metódusok

const Color (class) # class constructor trans Color:preset (red green blue) { const this:red (Integer red) const this:green (Integer green) const this:blue (Integer blue) } const Color:RF 0.75 const Color:GF 0.75 const Color:BF 0.75 # this method returns a darker color trans Color:darker nil { trans lr (Integer (max (this:red:* Color:RF) 0)) trans lg (Integer (max (this:green:* Color:GF) 0)) trans lb (Integer (max (this:blue:* Color:BF) 0)) Color lr lg lb } # get a darker color than yellow const yellow (Color 255 255 0) const dark-yellow (yellow:darker)

Operátorok

# this method checks that two colors are equals trans Color:== (color) { if (== Color color:meta) { if (!= this:red color:red) (return false) if (!= this:green color:green) (return false) if (!= this:blue color:blue) (return false) eval true } false } # create a new yellow color const yellow (Color 255 255 0) (yellow:== (Color 255 255 0)) # true

Öröklődés

Az AFNIX osztály modell egy egyszerû öröklõdési modellen alapszik. Ha egy példány objektum definiál egy szülõ objektumot, ezt az objektumot super példánynak hívjuk. Azt a példányt, aminek létezik super példánya származtatott példánynak hívjuk.

A származtatott objektum definiálása általában a példány preset metódusában történik, a super adattag beállításábal. A példány létrehozásakor a super adattag értéke nil. Bármilyen objektumot, megadhatunk super példánynak, beépített objektumokat is.

const c (class) const c:preset nil { trans this:super 0 }

A fenti példában a super értéke egy Integer, ezért ezt az osztályt az Integerbõl származtatjuk. A super példány adattagjait elérhetjük a super kulcsszó használatával.

const c (class) const i (c) trans i:a 1 const j (c) trans j:super i println j:a