12
VBA – Objects, Properties, Methods, Events, ... PROJEKTOVANJE KLASNIH MODULA ... mr Milovan Milivojević dipl. ing. Objekti Svojstva Metode Dogadjaji KLASE Deo I 27.05.13 1 Visoka Poslovno- Tehnička Škola - Užice

Objekti Svojstva Metode Dogadjaji KLASE...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

  • 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