Dialog'lar class değildir

TROIA'da nesne yönelimli programlama var, ama çoğu dilden farklı bir yaklaşımla: dialog'lar, rapor'lar ve component'ler class sayılmaz — hepsi aynı seviyede, ayrı yapılardır. Class'lar TROIA'da genelde veri değil davranış (metod kümesi) taşımak için kullanılır; veri saklamak için çoğunlukla TABLE tercih edilir.

_VARIABLES ve _CONSTRUCTOR: bir kez çalışan başlatıcılar

Her class'ın iki özel metodu vardır: _VARIABLES ve _CONSTRUCTOR. Bir instance ilk tanımlandığında bir kez çalışırlar — aynı instance birden fazla değişken tanımlama komutuyla (OBJECT: gibi) yeniden tanımlansa bile tekrar çalışmazlar:

/* _VARIABLES metodu */
MEMBER:
    STRING AD,
    DECIMAL BAKIYE;

/* _CONSTRUCTOR metodu */
BAKIYE = 0;

@ operatörü: üye alana erişim

Bir class instance'ının üye (member) alanına dışarıdan erişmek için nokta değil @ operatörü kullanılır:

LOCAL:
    HESAP INSTANCE1;

INSTANCE1@BAKIYE = 500;
SONUC = INSTANCE1@AD;

@ yalnızca bir seviye derinlik destekler; INSTANCE1@ALTNESNE@ALAN gibi zincirleme erişim geçerli değildir.

OBJECT komutunun gizli davranışı

OBJECT: ile tanımlanan basit tipli (STRING, INTEGER, DECIMAL...) değişkenlerin kapsamı (scope), hangi metodun içinde olduğunuza göre değişir:

  • Bir dialog/report metodunda → global
  • _CONSTRUCTOR/_VARIABLES içinde → member
  • Sıradan bir class metodunda → local

Bu örtük davranış yüzünden okunabilirlik için OBJECT yerine niyeti açıkça belirten LOCAL:, MEMBER: veya GLOBAL: kullanmak önerilir — ama mevcut CANIAS kod tabanında hâlâ en çok OBJECT görülür.

Sonuç

TROIA class'larını anlamanın anahtarı üç şey: başlatıcıların yalnızca bir kez çalışması, üye erişiminde @ operatörü ve OBJECT komutunun bağlama göre değişen kapsam davranışı.