A Blue programozási nyelv

Absztrakt adattípusok



Általános osztalyok

A Blue típusai kizárólag osztályokból származnak. A leggyakrabban használt osztályokat előre definiálták a nyelvben. Ezek:

Az osztályok két típusa létezik: manifesztálódó és dinamikus.

A manifesztálódó osztályok minden objektuma statikus. Az osztály definíciójakor létrejön és nem kell külön létrehozni. Ilyen osztályok az Integer, Real, Boolean, String és Enumeration (felsorolás). Az első 4 előre definiált osztály és a compiler minden értéküket ismeri. Az Enumeration felhasználó által definiált osztály. Egy ilyen osztály definíciója tartalmazza minden létező elem felsorolását és ezzel párhozamosan mindegyikre egy névvel ellátott referenciát.

A dinamikus osztályokban az objektumok felsorolása mellett az objektum létrehozó metódusa is szerepel. Dinamikus osztályok az Array és a felhasználó által definiált osztályok, ezek definíciójakor nem jön létre automatikusan az objektum, a felhasználó egy create művelettel hozhat létre objektumokat.

A Blue-ban minden változó egy objektumra mutató referenciát tartalmaz. Egy értékkel ellátott Integer változó egy Integer objektumra hivatkozó referenciát tartalmaz. Az objektum modell egyszerű: csak objektumreferenciák léteznek. A különbség a manifesztálódó és dinamikus osztályok között csak az objektumok létrehozásának idejében és módjában van.

Általános osztályok

Az általános osztályok definíciója a procedurális nyelvek programjának megfelelő fogalom. Az osztály általában tartalmaz néhány belső adatot (elrejtve), belső rutinokat, egy létrehozó rutint és interface rutinokat. Az interfész nem tartalmazhat változókat.


Példa:
class Rectangle is == a Rectangle osztaly meghatarozott koordinataju == es szinu teglalapokat tartalmaz uses Point, Colour internal var top_left: Point bottom_right: Point fill_col: Colour border_col: Colour interface creation (tl: Point, br: Point) is == Letrehoz egy teglalapot, melyen a tl es br koordinatak hataroznak meg. == Alapertelmezesben a szinek: kitoltes feher, keret fekete. do top_left:=tl bottom_right:=br fill_col:=white border:=black end creation routines move (dx: Integer, dy: Integer) is == Elmozgatja a teglalapot a dx,dy-al meghatarozott helyre do top_left.move(dx, dy) bottom_right.move(dx, dy) post size=old size end move size->(width: Integer, height: Integer) is == Visszaadja a teglalap magassagat es szelesseget do width:=bottom_right.x-top_left.x height:=bottom_right.y-top_left.y end size invariant (top_leftx < bottom_right.x) and (top_left.y < bottom_right.y) end class

Az osztálynak nincs elkülönített interface definíciója. Az osztály interface-e az attribútumok egy részének nézete (pontosan az internal rész marad rejtve) és a felhasználó számára ezt a Blue programozási környezet egy segédprogramja teszi speciálisan láthatóvá a teljes definícióból kiemelve.