Upload
others
View
18
Download
0
Embed Size (px)
Citation preview
VBA – Objects, Properties, Methods, Events, ... PROJEKTOVANJE KLASNIH MODULA ...
mr Milovan Milivojević dipl. ing.
Objekti
Svojstva
Metode
Dogadjaji
KLASE
Deo I
27.05.131Visoka Poslovno-Tehnička Škola - Užice
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đaja)
PRIMERI OBJEKATA: KOMJUTER, ČOVEK, AUTO, ...
HIJERARHIJA Objekata:Application.ThisWorkBook.WorkSheets(”TEMA11”).Range(A3:C5)
27.05.132Visoka Poslovno-Tehnička Škola - Užice
Primeri objekata iz Excel –objektnog modela:• Workbook• Worksheet• Range• Application• ...
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 OSOBINE mogu imati ulogu objekata.
Drugim rečima objekti koji se nalaze na nižem nivou u hijerarhiji objekata su u stvari samo OSOBINE njihovih roditeljskih objekata.
Primer: Application.ActiveWindow.ActiveCell.Font.Italic
PRIMERI OSOBINA OBJEKATA - Subroutine: Osobine
Visoka Poslovno-Tehnička Škola - Užice
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.metoda Primer: ActiveWorkBook.Save
Metod sa argumentimaObjekat.metoda (arg1, arg.2...)Zagrade su potrebne samo ako rezultat metode dodeljujemo nekoj promenljivoj ili osobini 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. Imenovanim argumentima 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
27.05.135
DOGAĐAJ je nešto što se dešava objektu. Primer: Otvaranje radne sveske u Excel-u
Metoda 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
27.05.136
Kreiranje sopstvenih OBJEKATA / KLASE
Visoka Poslovno-Tehnička Škola - Užice
Elementi Objektnog Orijentisanog Programiranja - OOP (Object Oriented Programming).
Pitanja?• Šta se KLASNI MODULI?• Prednosti upotrebe KLASA?• Šta su OBJEKTI?• Po čemu se objekti razlikuju od
kolekcija međusobno povezanih procedura?
• Tehnike kreiranja sopstvenih objekata korišć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 strane klijentske aplikacije ili nekog drugog procesa /// Metafora: KLASA – kalup za pravljenje kolača; Objekti –sami kolači.
• KLASNI MODUL (Class module) – Specijalni kodni modul koji se koristi isključivo za definisanje klasa
• INSTANCIRANJE KLASE (Instantiate) – Kreiranje konkretnog objekta /// New ///
• INTERFACE KLASE (Interface) – Javno (vidljivo) lice neke klase. Delovi klase kojima se može pristupiti preko 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 taj objekat može realizovati.
• SVOJSTVO (Property) – Karakteristika nekog objekta• OBJEKAT (Object) – Konkretna instanca neke klase. • OBJEKTNO ORIJENTISANO PROGRAMIRANJE (Object
Oriented Programming) /// Paradigma: Objekti-Svojstva-Događaji-Metodi /// Objects-Properties-Events-Methods.
• VBA nije potpuno objektno orijentisan
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žene nekom objektu.
o Svi ovi elementi su upućeni jedni na druge tako da funkcionišu u određenoj simbiozi sa ciljem da programski reprezentuju neki opipljiv ili apstaktni objekat.
o Ovo se bitno razlikuje od klasičnog modula koji predstavljaju kolekcije varijabli, procedura i funkcija koje posmatrač (program ili proces potrošač) ne mora tretirati kao celinu.
o Procedure (programi) potrošači mogu kreirati više objekata (kopija) na bazi iste klase, pri čemu se svaki od njih može ponašati kao nezavisan entitet.
o Kod tako kreiranog objekta sva relevantna svojstva 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 klase smatrao prikladnim za tu svrhu.
o Formira se svojevrstan apstraktni sloj između interfejsa (tj. Procedura koje potrošač može da vidi) i implemetacije tog istog interfejsa.
o Pojam ENKAPSULACIJE. o Velika prednost pri izmeni implementacija samih
klasa jer spolja (za korisnike ili druge programere) interfejs može ostati isti.
o Sprečavanje promene programa u zavisnim programima (potrošačima, programima iz kojih su te klase/ ti objekti otelotvoreni/instancirani).
o Mentalni model naprednijio Dobro projektovane klase vešto skrivaju
složenost svoje implementacije i sebe prikazuju samo u obliku jednostavnog, dopadljivog interfejsa, koji će moći da koriste sve buduće procedure u kojima se javi potreba za korišćenjem funkcionalnosti tog objekta.
• KLASE omogućavaju saradnjuo Saradnja većeg broja programera na složenim
aplikacijama/// Timski rado Zajednički interface.o Efikasnost
27.05.138Visoka 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 KreditBezKlasa
End Sub
Private Sub cmdNiz_Click()Call Niz
End Sub
A) podešavanje svojstava pomoću Public varijabli u klasnom modulu
Podešavanje svojstava pomoću procedure Property Get
Konstruktor!?!
Svojstva!?!
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 instanciranje objekata
a) Dim …. New...b) Dim ...
…Set ...=New…
27.05.1310
Zbog čega su Procedure Get/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či da li će svojstvo biti tipa read/write, read-only ili write-only tako što će implementirati jednu ili dve procedure.
o Procedura Property Get omogućava read pristup datom svojstvu
o Procedura Property Let ili Property Setomogućavaju write pristup datom svojstvu predstavljaju formalno ujedinjenje podataka, ponašanja i proceda. Procudura Property Letkoristi se kada se opisuje svojstvo čija priroda podataka pripada nekom od osnovnih tipova podataka (Integer, String, Variant..). Procedura Property Set rse koristi kada je tip podataka za svojstvo objektna promenjiva (Worksheet, Range...).
o Za read/write osobinu nekog svojstva koriste se obe procedure u paru: Property Get i Property Let
• Validacija menjanja vrednosti svojstava
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 provera valjanosti (validnost) unešenih podataka za dato svojstvo
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 sa podešavanjem svojstava preko Property Get i property Set procedurama….
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 VariantDim 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
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).ValuevGodisnjaStopa = 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 objekat
KREDIT• Kod klasičnog modela mora se voditi izuzetna pažnja pri povezivanju
komponenti, jer komponente nemaju eksplicitno ugrađene relacije jedna prema drugoj kao kod klasa