51.1 Začneme zase u tříd
51.2 Události vytvoření a zničení objektu třídy
51.3 Procedury vlastností
51.4 Defaultní vlastnost
51.5 Metody
51.6 Domácí úkol
51.7 V další lekci
51.1 Začneme zase u tříd
Vím, minule jsem vám slíbil ActiveX, ale k nim je ještě celkem dlouhá cesta a abychom je mohli začít tvořit, potřebujeme ještě nějaké základy tříd. Pokud si dobře vzpomínáte, je to celkem nedávno, co jsme se třídami zabývali. O třídách jsme si toho zatím řekli jen velice málo a přitom toho umožňují tolik a je k nim toliko co říci. Jak jsem se již zmínil, ze tříd tvoříme objekty. Jsou tedy jakýmisi šablonami, ze kterých se vytvoří objekty podle jejich vzoru. Důležitým pojmem v oblasti OOP je zapouzdření. Co ono zapouzdření vlastně vůbec je? No, jedná se o to, že většinou uživateli objektu nedáme přímý přístup k proměnným, ale měníme je pomocí procedur událostí. Tím zajišťujeme to, že se objekt může nacházet pouze v předpokládaných stavech (pokud to kvalitně ošetříme).
51.2 Události vytvoření a zničení objektu třídy
Pokud je nějaký objekt třídy vytvořen, například pomocí kódu:
Set objMeno = New Class1
…nebo jako dočasný objekt tímto způsobem:
Dim objMeno As New Class1
Print objMeno.val
…kdy je objekt vytvořen až při prvním použití některé z jeho metod, vlastností, a ne na řádku:
Dim objMeno As New Class1
…je vyvolána procedura události Class_Initialize, ve které můžete obsloužit vnitřek třídy, a to od nastavení proměnných, přes kdoví co možné i nemožná, třeba až po informování o tom, že třída byla vytvořena. Obdobně je při ukončení života objektu zavolána událost Class_Terminate a celé to může vypadat asi takto:
Private Sub Class_Initialize()
MsgBox "Právě jsem vznikl já, nový objekt."
End Sub
Private Sub Class_Terminate()
MsgBox "Právě jsem zanikl."
End Sub
…i když toto není moc k využití, kdybyste totiž otravovali uživatele s každým nově vzniklým objektem, tak by vás asi proklínal. Můžete si to vyzkoušet na následujícím kódu, který dáte do normálního formuláře:
Private Sub Command1_Click()
Set objMeno = New Class1
End Sub
Private Sub Command2_Click()
Set objMeno = Nothing
End Sub
Kód:
Set objMeno = Nothing
…nastaví proměnou objMeno tak, aby byla prázdná (neobsahovala žádný odkaz na objekt) a nezabírala tak zbytečně paměť. A zruší tak existující vytvořený objekt a je tedy vyvolána událost Class_Terminate.
51.3 Procedury vlastností
Jak zajisté víte, tak objekty většinou mají nějaké vlastnosti, které můžeme číst, a do některých můžeme i zapisovat. Tomu se tak může dít dvěma způsoby. Prvním se vůbec zabývat nebudeme, protože nemá s OOP nic společného, jsou to proměnné Public, ale pšššt, nic jsem neřekl! Tou druhou, to je ta, kterou se budeme zabývat, je používání procedur vlastností. A jak je to s kódem? No, bez ošetření a úprav vstupních údajů to může vypadat například takto:
Property Get Value() As Long
Value = lngValue
End Property
Property Let Value(val As Long)
lngValue = val
End Properte
Zápis a čtení těchto proměnných je potom velice jednoduché a je to jako všude jinde – jenom jméno objektu, tečka a:
objMeno.Value = 1
Print objMeno.Value
Vlastnosti pouze pro čtení vytvoříme tak, že vynecháme proceduru Let. Prostě ji pro proměnnou vůbec nezapíšeme.
Objektové proměnné potom místo Let používají Set, jinak je to obdobné. Pokud chceme využít vlastnosti variant, je situace komplikovanější. Metody Let a Set jsou voleny podle toho, jakým způsobem do proměnné přiřazujeme, ale metoda Get musí být přizpůsobena tomu, aby mohla vracet jak odkaz na objekt, tak i běžnou vlastnost. Jak toto udělat, byste mohli vědět, o něčem podobném jsme se bavili už kdysi dávno.
51.4 Defaultní vlastnost
Co je to defaultní vlastnost? Asi bude nejlepší ukázat to na příkladu. Pokud bychom tedy měli nějakou běžnou vlastnost, která se u objektu bude často používat, můžeme s ní pracovat místo tímto způsobem:
Private Sub Command3_Click()
objMeno.Value = 1
Print objMeno.Value
End Sub
…způsobem tímto:
Private Sub Command3_Click()
objMeno = 1
Print objMeno
End Sub
…vlastnost ale musí být nastavena jako defaultní. A jak na to? No, jsme teď ve třídě, které se chystáme nastavit defaultní vlastnost, klikneme na nabídku Tools a vybereme Procedure attributes, zobrazí se nám okno, my si nahoře vybereme název vlastnosti, kterou chceme nastavit jako defaultní (neboli výchozí), klikneme na Advanced a v combu pod nápisem Procedure ID si vybereme: „(default)“. Defaultní pak může být jen jediná vlastnost a zastupuje ji přímo název objektu stejně tak, jako je tomu u TextBoxu, kde může být napsáno:
Text1 = "ahoj"
…namísto „složitého“:
Text1.Text = "ahoj"
V důsledku, neboť text je defaultní vlastností TextBoxu, je to jedno a totéž.
51.5 Metody
Metody jsou procedury a funkce. Mohou mít rozličnou činnost. K metodám, pokud znáte funkce a procedury, není příliš co dodávat. Je to naprosto analogické, žádné novoty nebo tak nás prozatím nečekají. Užívejte jich tedy tak, jako dříve s tím, že některé budou veřejné a jiné privátní. Privátní budou jakoby pomocné vevnitř třídy a Public budou tvořit její interface (rozhraní).
51.6 Domácí úkol
Jsme za padesátou lekcí a chtělo by to něco extra. Tím je to, že domácí úkoly už v dalších dílech nebudou, tedy nebudou takové, jaké bývali. Úkoly a jejich zadání nechám na vás, ať se vám rozvíjí kreativita. Jen to musí obsahovat látku probranou v lekci.
51.7 V další lekci
Pokračování toho, co jsme načali.