Integrované prostředí rubriky Visual Basic

Autor: Ján Hanák

Téma měsíce

OOP a Visual Basic .NET (1. díl)

Časová náročnost

(min):

45

Začátečník

Pokročilý

Profesionál

Použitý operační systém : Hlavní vývojový nástroj :

Další vývojový software :

Jiný software :

Windows 2000 SP4

Visual Basic .NET 2003

Žádný

Žádný

 

 

Milí čtenáři,

 

rok 2004 odstartujeme sérii materiálů, případových studií a programových ukázek, které vás uvedou do světa objektově orientovaného programování ve Visual Basicu .NET 2003. V tomto vydání se zaměříme spíše na teoretický úvod do OOP, přičemž si představíme základy této programovací koncepce a také pojmy třída a objekt. Přeji vám příjemné počtení.

 

Obsah

Objektově orientované programování versus strukturální programování

Základní teze objektově orientovaného programování

Objektově orientovaná koncepce programování

Třída a objekt

 

 

Objektově orientované programování versus strukturální programování

 

Ačkoliv je objektově orientovaná koncepce programování známá programátorům již hodně dlouhý čas, je nutné poznamenat, že ne vždy se k programování počítačových aplikací přistupovalo v souladu s filozofii OOP. Pokud budeme abstrahovat od samotných počátků vývoje programování, kdy pojem programování počítače představoval pečlivou manuální práci vysoce odborných pracovníků a inženýrů, kteří „programovali“ počítač přepínáním kombinací jednotlivých elektrických součástek a spojů, můžeme říct, že ve skutečnosti uběhlo mnoho času, kým se v programování objevily objekty. V těchto dávných časech bylo značným úspěchem, kdy se programování počítače přeneslo od ruční manipulace s jednotlivými součástkami k počítačovým terminálům.

 

Přitom nesmíme zapomínat na to, že v padesátých letech dvacátého století byly počítače daleko větší oproti stavu, v jakém je známé dnes (výjimkou tehdy nebyly ani počítače, které zabíraly několik desítek metrů čtverečních).

 

Programátoři se snažili vytvořit první programovací jazyky, pomocí kterých by bylo možné ovládat počítače použitím terminálu, a to jako lokálního, tak vzdáleného. Byly vytvořeny jazyky, které bychom v současné době nazvaly jazyky nízké úrovně. Tyto programovací jazyky totiž přímo ovládaly hardware počítače. Příkladem takového nízkoúrovňového programovací jazyka je jazyk symbolických instrukcí, ve kterém se používali pro laiky zcela nepochopitelné sady znaků a numerických hodnot, jejichž kombinace vytvářeli příkazy pro počítač. S jazykem symbolických instrukcí se můžete střetnout i dneska, a to například při programování v jazyku C.

 

 

Pokud se blíže podíváme na architekturu a styl práce platformy .NET Framework, i zde nacházíme jistou obdobu jazyku symbolických instrukcí, ovšem na programátorsky a kvalitativně vyšší úrovni. Ano, mám na mysli Microsoft Intermediate Language, mezijazyk, do instrukcí kterého jsou překládány všechny společné výstupy programovacích jazyků platformy .NET.

 

 

Ačkoliv byl třeba původní jazyk symbolických instrukcí použitelný, nebyl ani zdaleka „programátorsky přívětivý“. To mimo jiné znamenalo, že i ti programátoři, kteří s tímto programovacím jazykem pracovali, museli vynaložit velké množství úsilí a času pro to, aby se dovedli v jazyku alespoň jakž takž orientovat. Proto vznikla potřeba pro vytvoření programovacích jazyků vyšší úrovně. Tyto programovací jazyky by měly poskytovat velice dobrý přístup k ovládaní hardwarových možností počítače, ovšem mělo by se s nimi lépe a snadněji pracovat. Tak byly vytvořeny programovací jazyky, které bychom z dnešního pohledu označili jako jazyky střední úrovně. Pokud jste tipovali, že do této skupiny patří dnes již legendární jazyk C, měli jste samozřejmě pravdu. Céčko, jak byl tento programovací jazyk zanedlouho familiérně přezdíván, nebylo vytvořeno takříkajíc „na zelené louce“, ale vyvinulo se z jiných jazyků, přičemž značnou charakteristiku tomuto jazyku vtiskl programovací jazyk B.

 

Jazyk C byl ve světě programování velice populární, a to především z několika následujících důvodů:

 

 

Je pochopitelné, že výhod jazyka C bychom při pečlivější analýze našli více, ovšem to není naším cílem. Jazyk C je totiž typickým představitelem jazyka, ve kterém se programátorské úkoly řešily stylem takzvané strukturované koncepce programování (někdy se tento styl programování označuje rovněž jako procedurální programování). Pokud situaci poněkud zjednodušíme, můžeme prohlásit, že každý počítačový program byl vlastně tvořen kolekcí jistých programových entit, kterým se říkalo funkce. Jedna funkce z množiny všech funkcí programu měla výstřední postavení, přičemž byla označována jako vstupní funkce. Vstupní funkce představovala vstupní bod programu, co znamená, že vždy, když byl daný program spuštěn a jeho data načtena do paměti počítače, byl realizován kód vstupní funkce. V jazyku C byla touto vstupní funkcí funkce s názvem main, která mohla také vracet jistou návratovou hodnotu funkce (v závislosti od toho, zdali byl kód v této funkci vykonán úspěšně či nikoliv). Práce strukturovaného programu tedy vypadala jako rozhovor mezi jednotlivými funkcemi: Funkce mohly mezi sebou komunikovat, přičemž si navzájem poskytovali výsledky své činnosti. Každá funkce obsahovala jeden, nebo i několik příkazů, které byly provedeny záhy poté, co byla tato funkce aktivována.

 

V programátorské hantýrce se pro aktivaci funkce zažil ekvivalentní termín volání funkce.

 

Strukturované programování bylo zcela jistě úspěšnou programátorskou koncepcí. Připomeňme, že na této koncepci stavěly i další programovací jazyky, například Basic a Pascal. Ačkoliv strukturované programování bylo úspěšné, mělo několik negativních znaků, které se objevily zejména při programování rozsáhlejších aplikací (ti, kteří programovali v jazyku Basic na 8bitových počítačích mi dají zcela jistě za pravdu). Pokud se zeptáte programátory na otázku, co jich napadne jako první při zmínce o strukturovaném programování, dostanete různé odpovědi. Jedni vám řeknou, že strukturované programování se vlastně „jaksi“ kryje s programovacím jazykem C, zatímco jiní budou hovořit o funkcích a jejich prototypech. Možná, že najdete i takové programátory, kteří vám strukturovanou koncepci programování charakterizují jako tu „ne objektově orientovanou“.

 

Bohužel, nemáme dostatek prostoru a potažmo ani času, abychom teorii strukturovaného programování zkoumali příliš do hloubky. Je však takřka definitivní pravdou, že strukturovanému programování chyběl právě ten objektový pohled na svět.

 

 

Základní teze objektově orientovaného programování

 

Vycházejme ze základní teze, podle které měly počítače simulovat reálný život, to znamená pracovat s předměty, neboli objekty a simulovat procesy, které lze s těmito objekty realizovat. Ačkoliv dodnes vlastně nevíme, jak náš skutečný svět vznikl, nemůžeme popřít existenci doslova miliard objektů, kterými jsme denně obklopeni. Tyto objekty můžeme třídit podle mnoha kritérií, například podle jejich hnutelné povahy na hnutelné (auto, počítač, televize) a nehnutelné (budovy, domy, stavby), případně životnosti (objekty živé a neživé). Zkoumáním objektů, které se ve světe nacházejí a zákonitostí, kterým tyto objekty podléhají, se zabývají přírodní vědy, zejména matematika, fyzika, chemie, biologie a další.

 

Podle objektově orientované koncepce by počítač měl simulovat objekty a jejich vzájemné vztahy ve svém vlastním, zcela virtuálním světě. Abychom mohli uskutečnit proces „konverze“ objektů reálného světa do jejich virtuálních protějšků, musíme se podívat na terminologii objektově orientované koncepce programování, jakožto i na další znaky, které jsou pro tuto koncepci charakteristické.

 

 

Objektově orientovaná koncepce programování

 

Pokud máme hovořit o objektově orientované koncepci programování, můžeme se v zásadě vybrat dvěma směry:

 

  1. Prvý směr je spíše teoretický, protože představuje takzvanou všeobecní koncepci OOP. Podle všeobecní koncepce objektově orientované programování není nutné, aby byl vznik objektu podložen existencí jisté entity, která určuje charakteristické vlastnosti daného typu objektu.

 

  1. Druhý směr bychom mohli nazvat jako „ten praktičtější“, protože představuje koncepci OOP tak, jak ji chápou současné programovací jazyky, zaměřené na objektově orientované programování. V těchto jazycích je zapotřebí vždy před tvorbou objektů jistého typu vytvořit entitu, která bude tyto objekty generovat. Této entitě se říká třída.

 

Ačkoliv je všeobecní koncepce objektově orientovaného programování opravdu zajímavá, nebude se s ní na tomto místě zabývat. Důvodem je zejména místy až přílišná teoretičnost, a také poněkud nízká míra použití této koncepce v praktickém programování pomocí současných programovacích nástrojů. Zaměříme se proto na druhý pohled na OOP koncepci, který vám představí objektově orientované programování tak, jak jej známe v dnešních časech.   

 

 

Třída a objekt

 

Třída je základní jednotkou, na které je postavena celá koncepce OOP. Třídu si můžete představit jako „továrnu na objekty“. Třída přesně popisuje, jaká bude vnější i vnitřní struktura objektu a rovněž objektu nařizuje aspekty jeho chování v jistých situacích. Zjednodušeně bychom mohli třídu přirovnat ke konstrukčním plánům automobilu, které precizně definují a charakterizují všechny součástky, z nichž se bude automobil skládat. Definice vlastností součástek vychází z požadavků interakce automobilu s vnějším prostředím. Důraz je kladen zejména na kompletní zastoupení všech potřebných elementů, které vytvářejí jednotný celek – objekt. Podobné požadavky, jaké jsou vyžadovány v automobilovém průmyslu, musejí být splněny i v průmyslu počítačovém.

Je důležité, abyste si zapamatovali, že třída je v OOP tím pomyslným základním kamenem, na němž spočívají další aspekty objektově orientovaného programování. Pokud máme připravenou třídu, můžeme ji použít na tvorbu objektů dané třídy. Objekt, neboli instance třídy, je ztělesněním třídy ve virtuálním světe počítače – zajímá tedy podobnou roli jako prototyp auta, který byl vyroben podle jistých konstrukčních plánů. Objekt po svém zrození působí jako samostatná entita, což znamená, že může provádět mnohé programové operace, vytvářet další objekty, nebo navazovat komunikaci se vzdálenými objekty.

 

Každý objekt je charakteristický svými vlastnosti a metodami. Vlastnosti objektu definují charakteristiky objektu a lze je ve většině případů kvantifikovat. Na druhou stranu, metody představují akce, která je objekt schopen realizovat. Abychom si vysvětlili pojmy vlastnosti a metody v praxi, uvažujme třeba o automobilu. Automobil je objekt, u kterého můžeme nalézt nepřeberné množství vlastností, jakými jsou například výkon, objem motoru, spotřeba na sto kilometrů, počet dveří a další. Všimněte si, že všechny uvedené vlastnosti můžeme kvantifikovat, ovšem lze identifikovat i takové vlastnosti, kvantifikace kterých je poněkud těžší (například chemické složení karoserie). Automobil svůj název dostal podle toho, že je schopný automatického pohybu v okamžiku, kdy vodič sešlápne plynový pedál. V této chvíli automobil uskuteční akci – pohne se kupředu. Takováto akce se v OOP nazývá metoda. Samozřejmě, že automobil umí provádět i jiné metody, resp. akce, třeba couvání, změnu směru na základě polohy volantu a další.

 

Pro programátory, kteří teprve začínají studovat koncepci objektově orientovaného programování, bývá zvyčejně nejtěžší rozeznat objekt a třídu. Pokud se i vy dostanete do situace, kdy budete přemýšlet nad určitou entitou a v duchu se rozhodovat, zdali jde o třídu nebo její instanci (objekt), zkuste nalézt vlastnosti zkoumané entity. Pokud se vám podaří nalézt jakoukoliv vlastnost, s největší pravděpodobností se pohráváte s objektem, protože třída jako taková vlastnostmi nedisponuje.

 

Každý objekt disponuje jistým životním cyklem, který je ohraničen vytvořením objektu a jeho likvidací. V rámci svého životného cyklu existuje objekt v paměti počítače, je tedy aktivní a může zcela flexibilně reagovat na podněty, které vznikají v počítačovém programu. Je nutné poznamenat, že vývojem programovacích jazyků se značně odlišoval charakter správy vzniklých objektů. Tradiční programovací jazyky, jako například jazyk C++ umožňovaly jednoznačně explicitní vytváření a odstraňování objektů z počítačové paměti (používaly se zde speciální operátory: new pro vytvoření objektu a delete pro likvidaci objektu). Tímto pádem byla správa životního cyklu objektu zcela v rukou programátora. Dnešní programovací nástroje, které pracují na báze platformě .NET Framework pracují s automatickou správou objektů v paměti (softwarová služba, která sleduje všechny objekty a likviduje ty nepotřebné, se nazývá Garbage Collection).

 

 

Právě jste dočetli Téma měsíce. 

 

Jestliže se chcete dozvědět více informací o programování ve Visual Basicu .NET, neváhejte a navštivte také další sekce rubriky Visual Basic. A jakáže je dnešní nabídka?

Seriál Začínáme s VB .NET

Charakteristika logických operátorů AndAlso a OrElse.

Programátorská laboratoř

Generování chybových výjimek

Vytváření formulářů libovolných tvarů

Ovládací prvek ProgressBar