A Visual Basic programozási nyelv

Objektum-orientált programozás

1. Bevezetés

A Visual Basic objektum alapú nyelv, nem objektum orientált, ezért aztán hiányoznak belőle a megszokott eszközök, de az újabb verziókban már lehetőségünk van osztályokat készíteni, amelyekből aztán objektumokat hozhatunk létre. Az alkalmazás során objektumokkal (Form, Control) dolgozunk, amelyekhez létrehozhatunk objektumváltozókat, amelyekkel pl. egy ablaknak több példányát hozhatjuk létre futási időben, illetve módosíthatjuk bármelyik ablakot vagy control-t. Az objektumváltozók láthatósága a deklarálás helyétől függ, mint ahogy a hagyományos változóknál is.

2. User Defined Types

Lehetőségünk van saját típus létrehozására. Ehhez a Type kulcsszót használjuk. Ez a fajta típuskonstrukció leginkább a C++ struct-jához, vagy a Pascal record-jához hasonlítható.

Az UDT-kre az alábbi megkötések vonatkoznak:

UDT-ben elhelyezhetünk tetszőleges típusokat, mint adattagokat, sőt másik UDT is beágyazható. Ezen kívül az UDT tartalmazhat fix méretű tömböket is. Nem tartalmazhat azonban olyan adattagot, aminek a típusa saját maga. Ilyen rekurzív típushoz osztályt kell definiálnunk.

Az UDT használatához annak példányosítására van szükség. A szokásos szintaxist alkalmazzuk: Dim Név As TypeName

Az egyes adattagokat a név után elhelyezett . karakterrel érhetjük el: Név.Adattag.

Ha UDT-t szeretnénk használni egy függvény vagy eljárás paramétereként, akkor azt az eljárást Friend módosítóval kell deklarálnunk, és használhatjuk az UDT-t.

3. Osztályok, Objektumok

Objektumok és osztálymodulok

Az újabb Visual Basic verziókban már háromfajta modul található: form, standard és osztály. Ez utóbbi a Visual Basic objektumorientált programozásának alapja. Az alkalmazásunk alprogramjai által használt objektumok létrehozására használható, saját objektumokat készíthetünk a segítségével (tulajdonságaikkal és tagfüggvényeikkel együtt). Az osztálymodul tartalmazhat kódot és adatot is.

Egy osztálymodulnak kezdetben két eseménye van: Class_Initialize() és Class_Terminate(). A modul neve lesz az osztály neve, az objektumokat pedig az osztály eljárásain keresztül érhetjük el.

Az osztályban ugyanúgy deklarálhatunk függvényeket, mint más modulokban (a Public és Private kulcsszó hasznlatával).

Eseményeket a "Public Event event_name(...)" utasítással hozhatunk létre, és a "RaiseEvent event_name(...)" utasítással válthatunk ki. Esemény mindig publikus kell legyen, nem lehet opcionális és nem lehet ParamArray argumentuma.

A Visual Basic nem használ öröklődést, a polimorfizmust pedig többszörös interfészen keresztül biztosítja (két osztályban implementálom ugyanazt az interfészt, és ekkor mindkét osztály egyedeire hivatkozhatok ezen az interfészen keresztül, de a megfelelő osztály megfelelő művelete fog végrehajtódni). Interfészt egy külön osztálymodulban kell létrehozni, melyben csak a műveletek fejlécét kell megadni (így ez egy absztrakt osztály lesz), az implementációt pedig abban az osztályban kell megadni, amelyiket ezen az interfészen keresztül szeretnénk elérni (az osztályban szerepelnie kell az Implement interface_name sornak és a megfelelő műveletek deklarációjának). A használathoz létre kell hozni egy interfész típusú változót (Dim iface As Interface_nev), ehhez rendeljük hozzá az adott osztály egy objektumát, és ekkor az interfész műveleteivel érhetjük el az objektum adatait (csak ezeket az alprogramokat látjuk).

Egy osztályban lehet Collection típusú attribútum is, így létrehozható 1-sok kapcsolat osztályok közt.

Objektumváltozók deklarálása

Kód modul deklarációs részében a Global kulcsszóval - globális, az alkalmazás futása alatt él.

Kód modul deklarációs részében a Dim kulcsszóval - modul szintű, az alkalmazás futása alatt él.

Kód modulban a Static kulcsszóval - modul szintű, az alkalmazás futása alatt él.

Form modul deklarációs részében a "Dim" kulcsszóval - az ablakpéldány élettartama alatt él.

Form modulban a Static kulcsszóval - az ablakpéldány élettartama alatt él.

Alprogramon belül a Dim kulcsszóval - az alprogram végrehajtási ideje alatt él.

Objektumváltozót deklarálhatunk általánosnak (ekkor pl. az alkalmazás bármelyik ablakára mutathat), vagy speciálisnak (az objektum egy egyedi típusára hivatkozhat). Három féle általános objektumváltozó van: Form, Control, MDIForm.

A Me taggal a konkrét objektumra hivatkozhatunk. Speciális objektumváltozó lehet az alkalmazás tervezésekor létrehozott objektumok közül valamelyik (Form típusnál valamelyik létező ablak, Control típusnál pedig valamilyen speciális control). Érdemes speciális objektumváltozókat használni, mert ekkor a Visual Basic felismeri az objektumokhoz tartozó metódusokra és tulajdonságokra vonatkozó hivatkozásokat az alkalmazás futásakor, így gyorsabb lesz a programunk.

Objektumváltozókból létrehozhatunk fix méretű vagy dinamikus tömböket, és ekkor is használhatjuk a New kulcsszót.

Példa:

Dim sajatform(10) As New Form1

Objektumváltozók kezelése

Objektumváltozókat átadhatunk alprogramoknak paraméterként, ekkor az átadás mindig hivatkozás szerinti. Objektumváltozó típusának meghatározásához használhatjuk az If TypeOf .... Is .... then .... [Else ...] szerkezetet.

Objektumváltozókhoz a Set paranccsal rendelhetünk értéket (pl. Set objval={ objkifejezés | New formtípus | Nothing}). Ha egy objektumváltozó nem hivatkozik semmilyen objektumra, akkor az értéke Nothing (ez a kezdeti értéke is inicializálás után). A Set sajatform=Nothing utasítás kiadásakor felszabadul az ablak által lefoglalt memória.

Két objektumváltozó összehasonlításakor az Is parancsot használhatjuk annak eldöntésére, hogy ugyanarra az objektumra mutatnak-e.

Jellemzők

Az osztályokhoz tartozhatnak bizonyos jellemzők (property) is. Ezek úgy viselkednek, mintha adattagok volnának, azzal a különbséggel, hogy ha értéküket kiolvassuk, vagy új értéket kapnak, akkor egy függvény (illetve eljárás) fut le. Gondoljunk csak arra, mennyi mindennek kell történnie, ha egy beviteli mező Text jellemzőjét módosítjuk.

Saját osztályainkhoz is rendelhetünk jellemzőket. Erre mutat példát a következő kódrészlet.

Property Let jellemző (érték) kód End Property

Ennek hatására az osztályunk rendelkezni fog egy jellemző jellemzővel, ami ha értéket kap, akkor a kód -ban leírt utasítások fognak végrehajtódni. Hasonlóan egy Property Set blokkban azt állíthatjuk be, mi történjen, ha a jellemzőhöz új objektumot rendelnek. A Property Get blokkban meghatározott kód akkor fut le, ha a jellemző értékét kiolvassák.

4. Öröklődés

A szokásos értelemben vett öröklődésről nem beszélhetünk, hiszen nem objektumorientált nyelvről van szó. A Visual Basicben mindössze egy példányosításra hasonlító lehetőségünk van, mégpedig hogy mikor létrehozzuk egy ablak egy másolatát, akkor az örökli az eredeti ablak minden beállítását, s innentől kezdve a másolat az eredetitől teljesen függetlenül kezelhető. Egy egyedi ablak minden példánya ugyanazon a kódon osztozik (műveletek), de az adatokról saját másolata van.

5. Rendszerobjektumok

A Visual Basic speciális rendszerobjektumot ad, melyek globálisak, és melyek segítségével a környezetről szerezhetünk információkat:

App alkalmazás-specifikus információk
Clipboard az operációs rendszer háttértárjához ad hozzáférést
Debug a Debug ablakba történő nyomtatást támogatja
Printer a nyomtatást segíti
Screen az aktuális ablak, control és egyéb képernyőhöz kapcsolódó adatokat kezel