A Fortress programozási nyelv

Traitek, osztályok, objektum-orientált programozás

Traitek

A trait nem más, mint egy absztrakt metóduscsoport nevesítése. Lényegében felfogható a Javaból már ismert interfésznek, azzal a különbséggel, hogy jelen esetben a metódusok tartalmazhatnak implementációt is.
Nézzük meg hogy írnánk le a mozgó tárgyhoz szükséges traitet!

trait Moving position():RR32^3 velocity():RR32^3 end

Osztályok

A nyelv lehetőséget biztosít oszályok létrehozására is. Singleton osztályt így tudunk létrehozni:

object Sol extends Moving position() = [0 0 0] velocity() = [0 0 0] end

Az osztályok és traitek szabadon keverhetőek egymással. Ha nem singletont szeretnénk létrehozni, akkor az osztályt deklarálhatjuk konstruktorral is:
object Particle(position:RR32^3, velocity:RR32^3) extends Moving end

Objektumok

Ezután minden konstruktorhívás új objektumot fog eredményezni, például:

pos:RR32^3 = [3 2 5] vel:RR32^3 = [1 0 0] p = Particle(pos, vel)

Látható, hogy a konstruktorparaméterek implicit értéket adnak az örökölt mezőknek.

Öröklodés

Az "extends" kulcsszó használható erre, ugyanúgy, mint Javaban. a nyelv osztályokra az egyszeres öröklodést támogatja.

Polimorfizmus, dinamikus kötés

A nyelv nem csak az objektumaira támogatja a polimorfizmust, hanem az összes nyelvi elemére is (ahol ez értelmezhető). A dinamikus kötést támogatja a nyelv.

Interfészek

A nyelvben a traitek helyettesítik az interfészeket.