A Boo programozási nyelv

Objektum-orientált programozás

Osztályok

Osztály = Az osztályok olyan típusok, amelyek egységbe foglalnak adattagokat, metódusokat, amelyek egymáshoz kötődnek, tartoznak. Egy speciális struktúra. Hasonló, mint a struct. A kettő közötti különbség Boo-ban, hogy a struct minden metódusa, adattagja publikus (hasonlóan sok más prog. nyelvhez), addig az osztály alapból private elérésű összetevőkből áll. Az osztály leír egy adatszerkezetet, minden egyes példány tartalmazza a metódusokat, amelyekkel változtatni, hozzáférni lehet az adatokhoz. Az osztály meghatározza azokat a szabályokat, amelyek szerint a belőle példányosított objektum működhet. A struct érték típus, az osztály referencia típus.

Az osztályok segítenek a kód egyszerűsítésében, hogy logikailag összefüggő részekre bonthassuk a kódunkat.

Field: Az osztály egy eleme, amely információt tárol.

Property: Szintaktikai segítség, a getter/setter funkciók helyett.

class Cat: [Getter(Name)] _name = 'Meowster' [Setter(FavoriteFood)] _favoriteFood as string fluffy = Cat() print fluffy.Name fluffy.FavoriteFood = 'Broccoli'


Meowster

Itt látható, hogy lehetnek kívülről csak írható illetve csak olvasható adatok, és ha a Name-et szeretnénk megváltoztatni, akkor fordítási hibát kapnánk. Léteznek osztály módosító klucsszavak, amelyek megszorításokat tesznek az osztályokra:

Objektumok

Objektum: Az osztály egy példánya.

Öröklődés

Egy lehetséges megoldása új osztályok létrehozásának. Ha van már egy nagyon hasonló osztályunk, amelyben csak egy két dolgot kell változtatni, akkor nem kell újra megírni őket, hanem származtatni kell belőle, és hozzáadni/elvenni adattagokat, metódusokat, illetve felüldefiniálni esetleg túlterhelni azokat.

class Cat(Feline): [Property(Name)] _name as string class Feline: [Property(Weight)] _weight as single


Az osztályok egy vagy nulla osztályból és több interfészből származhatnak. Egy osztályból több osztály is öröklődhet.
szintaktikája: class osztály(ősosztály)

Polimorfizmus, dinamikus kötés

Két kulcsszó van ennek a megvalósítására: virtual és override. Virtualként kell egy metódust megírni, ha overrideol-ni(felüldefiniálni) szeretnénk később. Egy példán keresztül elég jól meg lehet érteni, mit jelent ez:

class Base: virtual def Execute(): print 'From Base' class Derived(Thing): override def Execute(): print 'From Derived' b = Base() d = Derived() print b.Execute() print d.Execute() print cast(Base, d).Execute()


From Base
From Derived
From Derived

Ha elhagyjuk a virtual és az override kulcsszavakat, akkor az output:

From Base
From Derived
From Base

Interfészek

Interface: Az interfész metóduslistát definiál, amit az őt megvalósító osztálynak implementálnia kell. Az interfész nem tartalmazhat kódrészleteket, csak üres metódusdefiníciókat Egy interfész több interfészből is öröklődhet, de osztályból nem.

Metódusok

Az osztályokban definiálunk metódusokat, amelyek lehet publikus, private, és protected elérésűek. Speciális metódusok a konstruktor és a destruktor, ami az osztály betöltődéséért és megsemmisítéséért felelős.

class Cat: def constructor(): _name = 'Whiskers' def destructor(): print "${_name} is no more... RIP" [Getter(Name)] _name as string cat = Cat() print cat.Name


Metódusok módosító kulcsszavait: