1. diel - Úvod - Evolúcia metodík
Vitajte pri prvej lekcii kurzu Objektovo orientovaného programovania vo VBA. Nadväzujeme na znalosti kurzov Základy Microsoft VBA a VBA pre Excel. V tomto on-line kurze Objektovo orientovaného programovania vo VBA sa naučíme objektovo programovať a hlavne objektovo myslieť. Je to niečo trochu iné, než sme robili doteraz. Samotný program už nebudeme chápať ako niekoľko riadkov príkazov, ktoré interpret vykonáva zhora nadol.
V dnešnom VBA tutoriále sa pozrieme do histórie, ako sa programovalo skôr. Je to totiž dôležité na to, aby sme pochopili, prečo OOP vzniklo. Bude reč o evolúcii metodík.
Medzi tým, ako sa programovalo pred 40 rokmi a ako sa programuje dnes, je veľký rozdiel. Prvé počítače neoplývali veľkým výkonom a aj ich softvér nebol nijako zložitý. Vývoj hardvéru je však natoľko rýchly, že sa počet tranzistorov v mikroprocesoroch každý rok zdvojnásobí. (Moorov zákon).
Bohužiaľ, ľudia sa nedokážu rozvíjať tak rýchlo, ako sa rozvíja hardvér. Stále rýchlejšie počítače vyžadujú stále zložitejší a zložitejší softvér (resp. ľudia toho chcú po počítačoch stále viac a viac). Keď sa v jednej chvíli zistilo, že okolo 90 % softvéru je vytvorených s oneskorením, s dodatočnými nákladmi, alebo zlyhalo úplne, hľadali sa nové cesty, ako programy písať. Vystriedalo sa tak niekoľko prístupov, presnejšie sa im hovorí paradigma (chápajme ako smer myslenia). My si ich tu popíšeme.
Strojový kód
Program bol len súborom inštrukcií, kde sme nemali žiadnu možnosť pomenovávať premenné alebo zadávať matematické výrazy. Zdrojový kód bol samozrejme špecifický pre daný hardvér (procesor). Táto paradigma bola čoskoro nahradená.
Neštruktúrovaná paradigma
Neštruktúrovaný prístup je podobný assemblerom. Ide o súbor inštrukcií, ktorý sa vykonáva zhora nadol. Zdrojový kód už nebol závislý od hardvéru a bol lepšie čitateľný pre človeka. Prístup na nejaký čas umožnil vytvárať komplexnejšie programy.
Boli tu však stále mnohé úskalia. Jediná možnosť, ako urobiť niečo
viackrát, alebo ako sa v kóde vetviť, bol príkaz GOTO
.
GOTO
nám umožňuje "skákať" na jednotlivé miesta v programe.
Miesta boli predtým špecifikované číslom riadku
zdrojového kódu, čo je samozrejme nepraktické. Keď do kódu vložíme nový
riadok, čísla prestanú súhlasiť a celý kód je rozbitý. Neskôr vznikla
možnosť definovať tzv. návestie. Takto sa obchádzala napr.
absencia cyklov. Takýto spôsob písania programov je samozrejme veľmi
neprehľadný a čoskoro prestal postačovať na vývoj zložitejších
programov.
Uvedomme si, že obrovské rozšírenie počítačov za posledných niekoľko dekád má na svedomí rast dopytu po softvéri a logicky aj rast dopytu po programátoroch. Iste existujú ľudia, ktorí dokážu bez chyby písať programy v assembleri alebo iných nízkych jazykoch, ale koľko ich je? A koľko si asi za takú nadľudskú prácu účtujú? Je potrebné písať programy tak, aby aj menej skúsení programátori dokázali písať kvalitné programy a nepotrebovali na tvorbu jednoduchej utilitky 5 rokov praxe.
Štruktúrované programovanie
Štruktúrované programovanie je prvou paradigmou, ktorá sa udržala dlhšiu dobu a naozaj chvíľu postačovala na vývoj nových programov. Programujeme pomocou cyklov a vetvenia. To je v podstate to, kam sme sa doteraz dostali.
Pri štruktúrovanom programovaní hovoríme o tzv. funkcionálnej dekompozícii. Problém sa rozloží na niekoľko problémov a každý problém potom rieši určitá funkcia s parametrami. Nevýhodou je, že funkcia vie len jednu činnosť. Keď chceme niečo iné, musíme napísať novú funkciu. Neexistuje totiž spôsob, ako vziať starý kód a len ho trochu modifikovať, musíme písať znova a znova. Vznikajú zbytočné náklady a chyby.
Túto nevýhodu je možné čiastočne obísť pomocou parametrizácie funkcií (počet parametrov potom ale rýchlo narastá), alebo použitím globálnych premenných. S globálnymi dátami vzniká však nové nebezpečenstvo - funkcie majú prístup k dátam ostatných. To je začiatok konca. Nikdy totiž neustrážime, aby niekde nedošlo k prepísaniu globálnych dát medzi funkciami a začne dochádzať k nekontrolovateľným problémom.
Celý program sa potom skladá z nezapuzdrených blokov kódu a zle sa udržuje. Každá úprava programu zvyšuje zložitosť. Program potom nutne dôjde do stavu, kedy náklady na pridávanie nových funkcií vzrastú natoľko, že sa program už neoplatí rozširovať. Zástupcovia tohto prístupu sú napríklad jazyky C, Pascal alebo QBasic.
Medzi štruktúrovaným programovaním a objektovo orientovaným programovaním existoval ešte medzičlánok, tzv. modulárne programovanie, ktoré nám umožňuje zapuzdriť určitú funkcionalitu do modulov. Stále však neexistuje spôsob, ako už napísaný kód modifikovať a znova využiť.
Ako už bolo spomenuté na začiatku článku, niekedy sa uvádza, že sa jednoduché programy majú písať neobjektovo, teda štruktúrovane. Nie je to však pravda. Keď zabudneme na fakt, že porušujeme filozofiu OOP ako takú, nikdy nemôžeme vedieť, či sa tento program neuchytí az malej utilitky sa nestane niečo vážnejšie. Potom opäť nutne dospejeme do stavu, kedy program nebude možné ďalej rozširovať a budeme ho buď musieť zahodiť alebo celý prepísať s pomocou OOP.
Neobjektovým spôsobom písania kódu sa prezýva "spaghetti code" pre ich neprehľadnosť (pretože špagety sú zamotané).
V budúcej lekcii, Úvod do objektovo orientovaného programovania vo VBA , si uvedieme úvod do objektovo orientovaného programovania vo VBA. Vysvetlíme si historické okolnosti vzniku OOP a tiež pojmy trieda, atribút, metóda a zapuzdrenie.