Amellett, hogy a J egy Funkcionális programnyelv meglehetősen jó az Objektum-orientált programozás terén is.
A Java-hoz kicsit hasonló terminológiát használ.
Osztályok
Class-nak hívja az osztályokat, melyek valójában csak definíciók halmaza.
Method a neve az osztály funkcióinak, Field pedig az osztályhoz tartozó adatoknak.
Az osztálydefiníciókat külön script fájlokban tárolja (.ijs állományokban).
Az osztályokat egy példán keresztül mutatjuk be:
coclass 'pbc'
create=: verb define
data=: keys=: i.0
sn=:0
)
destroy=: codestroy
put=: verb define
data=: data,'<'y
keys=: keys,sn
_1+sn=: '>':sn
)
get=: verb define
r=.'>'(keys i. y){data
b=. keys~:y
data=: b#data
keys=: b#keys
r
)
Magyarázat:
- coclass : Ez után a kulcsszó után jön az osztálynév. A class elé írt co a "class/object" rövidítése.
- pbc : Az osztály neve. Az első 'p' betű jelenti, hogy ez egy privát osztály.
- create: Konstruktor
- destroy: Destuktor
- put, get : Method-ok
Objektumok
Ha az osztályokat használni akarjuk, akkor a főprogramban a "load osztálynév.ijs" parancsot végre kell hajtanunk.
Ezután példányosíthatjuk az osztályokat a következő módon:
bc1=: conew 'pbc'
Az új pbc objektumra mutat a bc1 mutató.
Az objektum létrehozása után lefut a konstruktor.
Metódusok használatára egy példa:
put__bc1 'asdfasdf'
get__bc1 0
asdfasdf
A destroy__bc1: lefut a destruktor.
Öröklődés
A J az egyszeres öröklődést támogatja.
A következőképpen hozhatunk létre alosztályokat (természetesen új fájlban):
coclass 'pbcx'
coinsert 'pbc'
create=: verb define
create_pbc_ f. y NB. a szülő create-je
NB. az új vreate helye
0
)
destroy=: verb define
NB. destroy our stuff here
destroy_pbc_ f. y NB. a szülő destruktora
)
getfirst=: verb def 'get {. keys'
A coinsert kulcsszó után kell írni, hogy mely osztályt egészítjük ki.