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