8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
1/12
VBA – Objects, Properties, Methods, Events, ...PROJEKTOVANJE KLASNIH MODULA ...
mr Milovan Milivojević dipl. ing.
Objekti
Svojstva
Metode
Dogadjaji
KLASE
Deo I
27.05.131 Visoka Poslovno-Tehnička Škola- Užice
8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
2/12
VBA objekat predstavlja bilo šta što se u aplikaciji može videti i čime se na neki
način može manipulisati.
Excel Objekti – Excel Objects
Šta jeste objekat: radni list, ćelija, blok ćelija, radna knjiga, dijagram, ...Šta nije objekat: dugme Maximize, dugme Minimize,...
Manipulacija objektima može se ostvariti preko:• Osobina objekata• Metoda objekata ( Metoda je sposobnost objekta da izvrši neki zadatak, odnosno akciju,koja je pridružena datom objektu )• Događaja (Događaji su akcije na koji objekat automatski reaguje. Događajima se mogu
pridružiti procedure – rukavaoci događaj a)PRIMERI OBJEKATA: KOMJUTER, ČOVEK, AUTO, ...
HIJERARHIJA Objekata:Application.ThisWorkBook.WorkSheets(”TEMA11”).Range(A3:C5)
27.05.132 Visoka Poslovno-Tehnička Škola- Užice
Primeri objekata iz Excel –objektnog modela:• Workbook• Worksheet• Range• Application• ...
8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
3/12
27.05.133
Osobine predstavljaju definicioni skup karakteristika datog objekta.
One kontrolišu izgled i poziciju objekta
Osobine objekata – Object.Property
Primeri osobina objekta: Name, Type, Saved, WindowState...
Neke OSOBINEmoguimati ulogu objekata.
Drugim rečima objektikoji se nalaze na nižemnivou u hijerarhijiobjekata su u stvarisamo OSOBINEnjihovihroditeljskih objekata.
Primer: Application.ActiveWindow.ActiveCell.Font. Italic
PRIMERI OSOBINA OBJEKATA -Subroutine: Osobine
Visoka Poslovno-Tehnička Škola- Užice
8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
4/12
27.05.134
Osobine opisuju ono što objekat predstavlja, dok metode opisuju što možemo
uraditi sa objektom ili šta objekat može uraditi.Primer: Objekat je LISTA a metoda SORTIRANJE
Metode Excel objekata
Način obraćanja metodu:•Metod bez argumentima
Objekat.metodaPrimer: ActiveWorkBook.Save
Metod sa argumentimaObjekat.metoda (arg1, arg.2...)Zagrade su potrebne samo ako rezultat metode dodeljujemo nekoj promenljivoj iliosobini objektavrednost=Objekat.metoda (arg1, arg2...)
Redosled argumenata se mora poštovati ili se moraju stavljati zarezi Primer:WorkBook.Close (SaveChanges, Filename, RouteWorkbook)
Da bi se metoda lakše čitala mogu se koristiti imenovani VBA argumenti. Imenovanimargumentima se vrednost dodeljuje sa operatorom :=Primer:
ActiveWorkbook.Close SaveChanges:=xlPromptToSaveChanges
Imenovani argumenti pored lak šeg čitanja obezbeđuju:-upisivanje u bilo kom redosledu -ignorisanje argumenata koji nisu potrebni
PRIMERI METODA OBJEKATA -Subroutine: MetodClose
Visoka Poslovno-Tehnička Škola- Užice
8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
5/12
27.05.135
DOGAĐAJ je nešto što se dešava objektu.
Primer: Otvaranje radne sveske u Excel-uMetoda OPEN inicijalizuje otvaranje a sam proces otvaranja je DOGAĐAJ
Događaji Excel objekata- Events
VAŽNO!!!PROCEDURE KOJE SE PRIDRUŽUJU DOGAĐAJIMA služe za upravljanje APLIKACIJOM(Events Driven Application)DOGAĐAJI mogu „pucati” u prazno
Primer: FORMA SA DOGAĐAJEM InitializePrimer: Dugme sa događajem CLICK
Private Sub DUGME1_Click()MsgBox "Dobro Jutro"
End Sub
Private Sub UserForm_Initialize()MsgBox "MM"
End Sub
Visoka Poslovno-Tehnička Škola- Užice
8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
6/12
27.05.136
Kreiranje sopstvenih OBJEKATA / KLASE
Visoka Poslovno-Tehnička Škola- Užice
Elementi Objektnog OrijentisanogProgramiranja - OOP (Object OrientedProgramming).
Pitanja?• Šta se KLASNI MODULI?• Prednosti upotrebe KLASA?
• Šta su OBJEKTI?• Po čemu se objekti razlikuju odkolekcija međusobno povezanihprocedura?
• Tehnike kreiranja sopstvenih objekatakorišćenjem KLASNIH MODULA?
• Kako kreirati sopstvene OBJEKTE?• Šta je objektni način razmišljanja?
•Da li se klase moraju koristiti i kada...
Ključni pojmovi:• KLASA(Class) /// Programska definicija objekta. Na
osnovu klasa kreiraju se objekti (postupak:Instanciranja /// Otelotvorenja klase od straneklijentske aplikacije ili nekog drugog procesa ///Metafora: KLASA –kalup za pravljenje kolača; Objekti –sami kolači.
• KLASNI MODUL (Class module) – Specijalni kodnimodul koji se koristi isključivo za definisanje klasa
• INSTANCIRANJE KLASE(Instantiate) – Kreiranjekonkretnog objekta /// New ///
• INTERFACE KLASE(Interface) – Javno (vidljivo) liceneke klase. Delovi klase kojima se može pristupitipreko eksternih procesa
• ČLAN KLASE(Member) – Metod ili svojstvo neke klase• METOD (Method) – Metod predstavlja akciju koja se
može izvršiti na nakom objektu ili akciju koju tajobjekat može realizovati.
• SVOJSTVO (Property) – Karakteristika nekog objekta
• OBJEKAT (Object) – Konkretna instanca neke klase.• OBJEKTNO ORIJENTISANO PROGRAMIRANJE (ObjectOriented Programming) /// Paradigma: Objekti-Svojstva-Događaji-Metodi /// Objects-Properties-Events-Methods.
• VBA nije potpuno objektno orijentisan
8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
7/12
27.05.137
Zbog čega su KLASE značajne?
Visoka Poslovno-Tehnička Škola- Užice
• KLASE UJEDINJUJUo Predstavljaju formalno ujedinjenje podataka,
ponašanja i procedura koje su pridruženenekom objektu.
o Svi ovi elementi su upućeni jedni na druge takoda funkcionišu u određenoj simbiozi sa ciljemda programski reprezentuju neki opipljiv iliapstaktni objekat.
o Ovo se bitno razlikuje od klasičnog modula kojipredstavljaju kolekcije varijabli, procedura ifunkcija koje posmatrač (program ili proces
potrošač) ne mora tretirati kao celinu.o Procedure (programi) potrošači mogu kreirativiše objekata (kopija) na bazi iste klase, pričemu se svaki od njih može ponašati kaonezavisan entitet.
o Kod tako kreiranog objekta sva relevantnasvojstva i metodi će biti dostupna direktno,preko odgovarajuće objektne varijable.
• KLASE skrivaju detaljeo Klasni moduli skrivaju detalje vezane za njihovu
implementaciju.o Procedura potrošač (pozivajuća procedura) će
moći da vidi odnosno da upotrebi samo onečlanove tog objekta koje je projektant klasesmatrao prikladnim za tu svrhu.
o Formira se svojevrstan apstraktni sloj izmeđuinterfejsa (tj. Procedura koje potrošač može davidi) i implemetacije tog istog interfejsa.
o Pojam ENKAPSULACIJE.o
Velika prednost pri izmeni implementacija samihklasa jer spolja (za korisnike ili drugeprogramere) interfejs može ostati isti.
o Sprečavanje promene programa u zavisnimprogramima (potrošačima, programima iz kojihsu te klase/ ti objekti otelotvoreni/instancirani).
o Mentalni model naprednijio Dobro projektovane klase vešto skrivaju
složenost svoje implementacije i sebe prikazujusamo u obliku jednostavnog, dopadljivog
interfejsa, koji će moći da koriste sve budućeprocedure u kojima se javi potreba zakorišćenjem funkcionalnosti tog objekta.
• KLASE omogućavaju saradnjuo Saradnja većeg broja programera na složenim
aplikacijama/// Timski rado Zajednički interface.o Efikasnost
8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
8/12
27.05.138 Visoka Poslovno-Tehnička Škola- Užice
primer Klase: KREDIT
Private Sub cmdKlase_Click()Call KreditComplex
End Sub
Private Sub cmdKlaseSvojstva_Click()Call TestiranjeKredita
End Sub
Private Sub cmdKreditBezKlasa_Click()
Call KreditBezKlasaEnd Sub
Private Sub cmdNiz_Click()Call Niz
End Sub
A) podešavanje svojstava pomoću Public varijabli u klasnom modulu
Podešavanje svojstavapomoću procedureProperty Get
Konstruktor!?!
Svojstva!?!
8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
9/12
27.05.139
…Testiranje klase KREDIT….
Visoka Poslovno-Tehnička Škola- Užice
Sub TestiranjeKredita()'Metod 1 // Preporuka-koristiti kod jednostavnih procedura
'kod kojih se instanciranje i unistavanje objekta desava'u istoj proceduri'Deklarisanje varijable koja upucuje'(referencira)na objekat Kredit'ipak objekat se instancira tek kada se prvi'put upotrebi - provera Break rezim ///...F8...F8...'/// Prozor Immediate ukljucenDim obj1Kredit As New Kredit
'Metod 2 /// Preporuka - Koristiti u slozenijim slucajevima'radi pojednostavljenja mentalnog metoda
'Deklarisanje objektne varijableDim obj2Kredit As Kredit'Eksplicitno instanciranje (otelotvorenje)'objekta na koji ukazuje varijabla obj2KreditSet obj2Kredit = New Kredit 'eksplicitno instanciranje
'Demoobj1Kredit.BrojKredita = 1 ' instanciranje tek pri 1. upotrebi'Instanciranje se desava implicitno i skoro neprimetnoobj2Kredit.BrojKredita = 24
Debug.Print "Broj kredita obj1Kredit je " & obj1Kredit.BrojKreditaDebug.Print "Broj kredita obj2Kredit je " & obj2Kredit.BrojKredita
'Unistavanje objektnih varijabli i oslobadjanje memorije'koja im je bila dodeljena
Set obj1Kredit = NothingSet obj2Kredit = Nothing
End Sub
Metode za instanciranjeobjekata
a)Dim …. New...b) Dim ...…Set ...=New…
8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
10/12
27.05.1310
Zbog čega suProcedureGet/Let)Set značajne?
Visoka Poslovno-Tehnička Škola- Užice
• Podešavanje pristupa svojstvima• Kada se svojstva objekta inpmlemetiraju pomoću
procedura Get/Let/Set programer može da odlučida li će svojstvo biti tipa read/write, read -only iliwrite-only tako što će implementirati jednu ili dveprocedure.
o Procedura Property Get omogućava read pristupdatom svojstvu
o Procedura Property Let iliProperty Setomogućavaju write pristup datom svojstvupredstavljaju formalno ujedinjenje podataka,
ponašanja i proceda. Procudura Property Letkoristi se kada se opisuje svojstvo čija prirodapodataka pripada nekom od osnovnih tipovapodataka (Integer, String, Variant..). ProceduraProperty Set rse koristi kada je tip podataka zasvojstvo objektna promenjiva (Worksheet,Range...).
o Za read/write osobinu nekog svojstva koriste seobe procedure u paru: Property Get i Property Let
• Validacija menjanja vrednostisvojstava
o Ukoliko se koriste Procedure Get///Let///SET klaseće biti svesne promena koja je na svojstvurealizovala neka procedura potrošač .
o Ovo omogućuje da se dodatno izvrši proveravaljanosti (validnost) unešenih podataka za datosvojstvo
Sub KreditComplex()Dim rg As RangeDim objKreditX As KreditComplex
Set rg = ThisWorkbook.Worksheets("Krediti"). _Range("KreditiPocetakListe").Offset(1, 0)
'Podrazumeva se da postoji imenovana zona'--"KreitiPocetakListe"...Celija A1Set objKreditX = New KreditComplex
Do Until IsEmpty(rg)With objKreditX
.RokOtplate = rg.Offset(0, 1).Value
.KamatnaStopa = rg.Offset(0, 2).Value
.Glavnica = rg.Offset(0, 3).Valuerg.Offset(0, 4).Value = .VisinaRate
End WithSet rg = rg.Offset(1, 0)
Loop
Set objKreditX = NothingSet rg = Nothing
End Sub
…Testiranje klase KREDIT sapodešavanjem svojstava preko PropertyGet i property Set procedurama….
8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
11/12
27.05.1311
…Klasa KREDITComplex….
Visoka Poslovno-Tehnička Škola- Užice
Option Explicit'Privatne varijable klase u kojima ce se cuvati vrednosti svojstavaDim mvGlavnica As Variant
Dim mvKamatnaStopa As VariantDim mvRokOtplate As VariantDim mvVisinaRate As VariantDim mvBrojKredita As Variant
Public Property Get Glavnica() As VariantGlavnica = mvGlavnica
End PropertyPublic Property Let Glavnica(ByVal vNewValue As Variant)
mvGlavnica = vNewValueEnd Property
Public Property Get KamatnaStopa() As VariantKamatnaStopa = mvKamatnaStopa
End PropertyPublic Property Let KamatnaStopa(ByVal vNewValue As Variant)
mvKamatnaStopa = vNewValueEnd Property
Public Property Get RokOtplate() As VariantRokOtplate = mvRokOtplate
End Property
Public Property Let RokOtplate(ByVal vNewValue As Variant)mvRokOtplate = vNewValue
End Property
Public Property Get VisinaRate() As VariantVisinaRate = Application.WorksheetFunction.Pmt _
(mvKamatnaStopa / 12, mvRokOtplate, -mvGlavnica)End Property'Public Property Let VisinaRate(ByVal vNewValue As Variant)''End Property
Public Property Get BrojKredita() As VariantBrojKredita = mvBrojKredita
End PropertyPublic Property Let BrojKredita(ByVal vNewValue As Variant)
mvBrojKredita = vNewValueEnd Property
Private Sub Class_Initialize()mvGlavnica = 0mvKamatnaStopa = 0.08mvRokOtplate = 36mvBrojKredita = 0
End Sub
8/18/2019 Uvod u Objektno Programiranje M. Milivojevic Deo I
12/12
27.05.1312
…KREDITComplex…bez KLASA.
Visoka Poslovno-Tehnička Škola- Užice
'Primer: Resenje istog zadatka bez upoterbe klasa
' + primena Function za obracun RateSub KreditBezKlasa()Dim rg As RangeDim vGodisnjaStopa As DoubleDim vRok As VariantDim vGlavnica As Variant
'Dim objKreditX As KreditComplexSet rg = ThisWorkbook.Worksheets("Krediti"). _Range("KreditiPocetakListe").Offset(1, 0)
'Set objKreditX = New KreditComplex
Do Until IsEmpty(rg)vRok = rg.Offset(0, 1).Value
vGodisnjaStopa = rg.Offset(0, 2).ValuevGlavnica = rg.Offset(0, 3).Value'rg.Offset(0, 5).Value = Rata(rg.Offset(0, 2).Value, _
rg.Offset(0, 1).Value, rg.Offset(0, 3).Value)'varijanta B
rg.Offset(0, 5).Value = Rata(vGodisnjaStopa, vRok, vGlavnica)'Varijanta A
Set rg = rg.Offset(1, 0)Loop
'Set objKreditX = NothingSet rg = Nothing
' U CEMU JE RAZLIKA U MODELIMA sa KLASAMA i BEZ Klasa!!!?'Suptilna razlika!!!'ObjKreditComplex ... sve varijable... atributi vezani za objekat
KreditComplex'Function Rata nije diretno vezana za Kredit .. . ne postoje direktne'relacije medju varijablama
End Sub
Public Function Rata(GodisnjaStopa As Double, Rok As Variant, Glavnica As Variant) As Variant
Rata = Application.WorksheetFunction.Pmt(GodisnjaStopa / 12, Rok, Glavnica)'Primer greske Implicitnog deklarisanja: 'Iskljuciti: Option Explicit na pocetku modula'u Function RATA postaviti GodisnaStopa umesto GodisnjaStopa.... testirati rezultate
dobijene'pomocu Soubrutine sa klasama i Soubrutine bez klasa /// ... Zakljucak...'ukljuciti Option Explicit
End Function
Razlika u odnosu rešenje sa primenom klasnih objekata:• Mentalni model
• Kod KLASNOG modela sve varijable su vezane eksplicitno za objekatKREDIT• Kod klasičnog modela mora se voditi izuzetna pažnja pri povezivanju
komponenti, jer komponente nemaju eksplicitno ugrađene relacije jednaprema drugoj kao kod klasa