Override: "inherit method" deniyor ama override anlamına geliyor

TROIA'da bir class (ya da dialog) başka birini miras alabilir; IDE'de buna "inherit method" dense de gerçekte yaptığı şey standart bir override'dır. Üst sınıfta olmayan yeni metodlar eklemek de, var olanları override etmek de mümkündür — ama bir class yalnızca tek bir üst sınıfa sahip olabilir (çoklu kalıtım yoktur).

SUPER(): derleme zamanı birleştirme

Override edilen bir metodun içinde üst sınıfın kodunu da çalıştırmak için SUPER() kullanılır. Kritik nokta: bu bir fonksiyon çağrısı değil, derleme (compile) zamanında üst sınıfın kodunu olduğu gibi metnin içine kopyalayan bir komuttur:

/* alt class metodu */
SUPER();
LOG = LOG + 'Ek işlem tamamlandı.';
RETURN LOG;

Bu yüzden üst sınıfın kodu bir RETURN içeriyorsa, SUPER()'den sonraki satırlar hiç çalışmaz — derleyici üst sınıfın RETURN'ünü olduğu gibi taşır. _CONSTRUCTOR/_VARIABLES dışındaki metodlarda SUPER() yazmazsanız üst sınıfın kodu hiç çalışmaz.

SUPER nesnesi: gerçek bir metod çağrısı

Daha yeni sürümlerde (5.01.07+) SUPER bir nesne olarak da kullanılabiliyor — bu, gerçek bir metod çağrısıdır ve dönüş değeri alınabilir:

LOCAL:
    INTEGER SONUC;

SONUC = SUPER.HESAPLA(PARAM);
SONUC = SONUC + 1;
RETURN SONUC;

SUPER() komutunun aksine burada üst sınıfın RETURN'ü metodu bitirmez, sadece değeri döner — geri kalan kod normal şekilde çalışmaya devam eder.

Cross: kod değiştirmeden davranış değiştirmek

Cross, bir class ya da dialog'u çalışma zamanında (runtime) başka biriyle değiştirme tanımıdır — veritabanı kaydıdır, derleme zamanı işlemi değildir. Örneğin CAT class'ından LAZYCAT'e bir cross tanımlarsanız, CAT'in tanımlandığı her yerde sistem otomatik olarak LAZYCAT'i yükler; kaynak kodda tek satır değiştirmenize gerek kalmaz. Cross'lar sistem genelinde ya da kullanıcı/profil bazında tanımlanabilir; öncelik sırası kullanıcının kendi cross'u → profil cross'u → sistem cross'udur.

Sonuç

SUPER() derleme zamanı bir metin birleştirmesi, SUPER nesnesi ise gerçek bir çağrıdır — ikisini karıştırmak sessiz (silent) hatalara yol açabilir. Cross ise CANIAS'ta özelleştirmelerin (customization) standart koda dokunmadan yapılmasını sağlayan temel mekanizmadır.