Programske paradigme

Rešavanje nekog problema na računaru se zapravo svodi na modeliranje, tj. na nalaženje pogodne reprezentacije sa kojom računar može da radi i da eventualno proizvede neko rešenje. Sam problem može da se reprezentuje na razne načine, ali računar ne može da obradi svaku reprezentaciju. Najgore je što se ta nemogućnost odnosi i na prirodno-jezičku reprezentaciju koja ljudima deluje najjednostavnije (npr. "naći predmet sa najboljim prosekom u tekućoj školskoj godini").

S druge strane, računar razume mašinsku (fizičku) reprezentaciju problema koju mi obično zamišljamo kao konačne niske nula i jedinica (0110010010 itd), ali to je daleko od onoga što ljudi smatraju razumljivim i podesnim za rešavanje problema.

S obzirom na ogroman jaz između pomenutih reprezentacija ("modela problema" i " modela mašine") nastali su razni programski jezici koji omogućavaju da se zada nekakva "međureprezentacija" (program). Programski jezik (kao sredstvo za reprezentaciju problema programom) ima sledeće prednosti:

Programski jezici se međusobno razlikuju po načinu na koji modeliraju razne realne probleme (programska paradigma). Tokom istorije programiranja pojavile su se 4 programske paradigme. Ovde će biti reči o dve:

Naime, VBA je jezik koji u osnovi podržava objektno-orijentisanu paradigmu. Pošto je objektno-orijentisana paradigma zapravo nadgradnja imperativne (proceduralne) paradigme, neophodno je u kratkim crtama opisati i jednu i drugu.

Imperativna (proceduralna) paradigma

Ova paradigma pri rešavanju problema koristi promenljive, strukture podataka i potprograme za modeliranje rešenja. Naziv proceduralni dolazi od toga što se program svodi na skup "procedura" od kojih svaka predstavlja jedan korak u rešavanju problema (pod "procedurama" se ovde podrazumevaju sve vrste potprograma, dakle i procedure i funkcije). Ovakav način razbijanja problema na manje potprobleme omogućava:

Nedostaci proceduralne paradigme:

Objektno-orijentisanog programiranje (skr. OOP)

Proceduralna paradigma je uvela nekoliko dobrih apstraktnih koncepata kao što su potprogrami (apstrakcija kontrole) i strukture podataka (apstrakcija podataka), ali se vremenom pokazalo da to nije dovoljno i da su neophodne dodatne apstrakcije. Ovde će biti spomenute samo neke osnovne ideje OOP-a koje su prisutne u programskom jeziku VBA.

Objekti i klase

Prvi zakon OOP-a glasi: "Sve je objekat". Pod objektom se podrazumeva bilo šta (predmet, živo biće, pojava, stanje, događaj i sl) što se može identifikovati na jedinstven način.

Svaki objekat je određen svojim osobinama (podacima o objektu) i svojim ponašanjem. Osobine objekta se realizuju kao promenljive (koje se u terminologiji OOP-a nazivaju svojstva objekta), dok ponašanje objekta opisuju potprogrami, procedure i funkcije, koji se u terminologiji OOP-a nazivaju metodi objekta.

Svi objekti koji imaju istovetan skup svojstava i metoda (tj. istovetne osobine i ponašanje) pripadaju istoj klasi. Objekat je konkretni primerak (instanca) klase, dok je klasa opis zajedničkih osobina i ponašanja objekata koji joj pripadaju. Npr. svaki pojedinačni čovek ("Pera Perić") može da se predstavi u OOP-u kao jedan objekat, konkretan primerak klase Čovek. Klasa Čovek opisuje ono što je zajedničko za sve pojedinačne ljude, tj. apstrahuje njihove zajedničke osobine i ponašanje.

U programskom jeziku VBA svaka klasa se opisuje posebnim klasnim modulom u okviru projekta. Ime klase je istovetno sa imenom klasnog modula koji je opisuje. Opis klase je zapravo opis svojstava i metoda njenog proizvoljnog objekta. Na početku klasnog modula se deklarišu promenljive koje predstavljaju svojstva proizvoljnog objekta klase, a potom slede definicije procedura i funkcija koje predstavljaju metode ma kog objekta klase.

Svojstvima i metodama objekta se pristupa primenom sledeće notacije

imeObjekta.imeSvojstva

imeObjekta.imeMetoda

Kao primer navedeni su definicija klase (klasni modul) Student i primer rada sa konkretnim objektom te klase


 Sub testStudent()

    Dim objStud As Student

    Const UKUPNO_ISPITA As Integer = 20

    Set objStud = New Student 'kreiranje memorijskog prostora za objekat

    objStud.Init "Pera", "Pericx", #11/27/1990#, "091234" 'inicijalizacija objekta

    'primeri poziva metoda

    objStud.CurriculumVitae 'ispisivanje kratke biografije

    objStud.dodajPolozxeniIspit "Matematika", 8

    objStud.dodajPolozxeniIspit "Informatika", 9

    objStud.dodajPolozxeniIspit "Bibliotekarstvo", 10

    objStud.dodajPolozxeniIspit "Engleski jezik", 6

    objStud.CurriculumVitae

    If objStud.JeDiplomirao(UKUPNO_ISPITA) Then

        MsgBox "Student je diplomirao. Cyestitamoooooo :))"

    Else

        MsgBox "Josx mora da se ucyi do diplome"

    End If

End Sub

Interfejs i implementacija

Kreiranje objekata nema uticaj na rešavanje problema ukoliko nema njihove uzajamne interakcije. U terminologiji OOP-a kaže se da objekti šalju jedni drugima poruke. Npr, objekat Čovek šalje poruku objektu Televizor da pojača svoj ton.

Jasno je da objekat Televizor ima mnogobrojne osobine i mogućnosti ponašanja, ali da li je objektu Čovek zaista neophodno da ih sve poznaje? Naravno, ne. Čovek uopšte ne mora (i ne želi) da zna kako Televizor zapravo radi, da li koristi katodne cevi ili tečni kristal, i kako kreira sliku i zvuk. Čoveka zapravo zanima način na koji može da pošalje poruku Televizoru (interfejs), npr. da pojača ton, a ne i kako to Televizor konkretno realizuje (implementacija).

Drugi zakon OOP-a glasi: "Razdvojiti interfejs od implementacije". Interfejs treba da bude javan (da bi objekat znao kako da pošalje poruku drugom objektu), a implementacija tajna. Nezanimanje ostalih objekata za implementaciju objekta Televizor nije jedini razlog za njeno skrivanje. Naime, time se omogućava da se u nekom trenutku implementacija promeni, da se učini boljom, a da objekat koji šalje poruku i dalje to čini na isti način, koristeći isti interfejs. Time se sprečava i opasnost da se onaj koji šalje poruku suviše oslanja na konkretnu implementaciju. To bi moglo da dovede do problema ako se jednog dana ta implementacija promeni, jer bi onda i ostali delovi programa (koji zavise od te implementacije) morali da se menjaju. Ideja je da promene u implementaciji objekta jedne klase ne utiču na promene u implementaciji objekata drugih klasa. Time se višestruko olakšava održavanje programa u odnosu na proceduralnu paradigmu.

U programskom jeziku VBA se koriste rezervisane reči Public i Private da bi se prilikom deklarisanja svojstava i definisanja metoda naznačilo da li će svojstvo/metod biti dostupan drugim objektima ili ne.

Svojstva se mogu deklarisati na tri načina:

Dim imeSvojstva As tipSvojstva 'privatno svojstvo

Private imeSvojstva As tipSvojstva 'privatno svojstvo

Public imeSvojstva As tipSvojstva 'javno svojstvo

Dakle, ako se svojstvo ne deklariše eksplicitno pomoću Private/Public, već preko Dim, efekat je isti kao da je upotrebljena reč Private (dakle, svojstva su podrazumevano privatna, tj. sakrivena za druge objekte).

Metodi (procedure i funkcije) se takođe mogu definisati na tri načina. Ovde će biti ilustrovane samo procedure. Za funkcije je sve potpuno isto samo što svuda stoji Function umesto Sub, i, naravno, funkcije imaju vrednost čiji se tip mora navesti u definiciji.

Sub imeProcedure 'javna procedura

    naredbe…

End Sub



Public Sub imeProcedure 'javna procedura

    naredbe…

End Sub



Private Sub imeProcedure 'privatna procedura

    naredbe…

End Sub

Dakle, ako se metod ne definiše eksplicitno pomoću Private/Public, efekat je isti kao da je upotrebljena reč Public (dakle, metodi su podrazumevano javni, tj. dostupni za druge objekte).