Uvod u Objektno Programiranje M. Milivojevic Deo I

Embed Size (px)

Citation preview

  • 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