1. diel - Úvod do objektovo orientovaného programovania v PHP
Vitajte u prvej lekcie kurzu objektovo orientovaného programovania v PHP. Sekciu Jednoduchý dynamický web v PHP už máme zaradom. V tomto on-line kurzu sa naučíme objektovo programovať a hlavne objektovo myslieť. Je to niečo trochu iné, než sme robili doteraz a webovú aplikáciu už nebudeme chápať skript s príkazmi, ktoré interpret vykonáva zhora nadol.
Prečo programovať objektovo
Znalosť objektovo orientovaného programovania v PHP je absolútne kľúčová, pretože umožňuje tvoriť architektúru webových aplikácií (oddeliť výstup HTML od logiky) a používať komponenty tretích strán. Vyvíjať vážnejšie projekt bez objektov je pracnejšie, náročnejšie a výsledok bude vždy nekvalitné.
Objektovo orientované programovanie (ďalej len OOP) nevzniklo náhodou, ale je dôsledkom vývoja, ktorý k nemu smeroval. Jedná sa o moderné metodiku vývoja softvéru, ktorú podporuje väčšina programovacích jazykov. Častou chybou je, že sa ľudia domnievajú, že OOP sa využíva iba pri písaní určitého druhu programov a inak je na škodu. Opak je pravdou - OOP je filozofia, je to nový pohľad na funkciu programu a komunikáciu medzi jeho jednotlivými časťami. Malo by sa používať vždy, či už robíme malú utilitku alebo zložitý databázový systém. OOP nie je len technika alebo nejaká odporúčaná štruktúra programu, je to hlavne nový spôsob myslenia, nový náhľad na problémy a nová éra vo vývoji softvéru.
Aby sme porozumeli výhodám, ktoré nám OOP prináša, pozrieme sa krátko do histórie nato, ako sa programovalo skôr.
Evolúcia metodík
Medzi tým, ako sa programovalo pred 40tich rokmi a ako sa programuje dnes, je veľký rozdiel. Prvé počítače neboli zariadené 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šie a zložitejšie 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é 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ápte ako smer myslenia). My si ich tu popíšeme.
1. Strojový kód
Program bol len súbor 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). Toto paradigma bolo čoskoro nahradené.
Program sčítající dve čísla (83 a -2) by vyzeral napr. Takto:
2104 1105 3106 7001 0053 FFFE 0000
Ako vidíte, programovať v strojovom kóde určite nie je to pravé a aj taká banalita má mnoho riadkov.
2. Neštruktúrované paradigma
Neštruktúrovaný prístup je podobný assemblerům, ale inštrukcie sú pomenované heslami, čiže je čiastočne ľudsky čitateľný. Prístup na nejakú dobu umožnil vytvárať komplexnejšie programy. Bolo tu však stále veľa úskalí: 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 bola 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ť pre vývoj zložitejších programov.
Náš príklad by vyzeral v ASM takto:
ORG 100 LDA A ADD B STA C HLT DEC 83 DEC –2 DEC 0 END
Uvedomme si, že obrovské rozšírenie počítačov za posledných niekoľko dekád má na svedomí rast dopytu po softvéru a logicky tiež rast dopytu po programátoroch. Iste existujú ľudia, ktorí dokážu bez chyby písať programy v ASM alebo iných nízkych jazykoch, ale koľko ich je? A koľko si asi za takú nadľudskú prácu účtujú? Je potreba písať programy tak, aby aj menej skúsení programátori dokázali písať kvalitné programy a nepotrebovali k tvorbe jednoduchej utilitky 5 rokov praxe.
3. Štruktúrované programovanie
Štruktúrované programovanie je prvý paradigma, ktoré sa udržalo dlhšiu dobu a naozaj chvíľu postačovalo pre vývoj nových programov. Programujeme pomocou cyklov a vetvenia. To je v podstate to, kam sme sa doteraz dostali.
Program možno rozložiť logicky do funkcií, to sme si už tiež vyskúšali. U štruktúrovaného programovania hovoríme o tzv. Funkcionálne dekompozícii. Problém sa rozloží na niekoľko podproblémů a každý Podproblém potom rieši určitá funkcie s parametrami.
Nevýhodou je, že funkcia vie len jednu činnosť, keď chceme niečo iné, musíme napísať novú. Neexistuje totiž spôsob, ako vziať starý kód a len trochu ho modifikovať, musíme písať znovu a znovu - vznikajú zbytočné náklady a chyby. Túto nevýhodu možno č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. dát medzi funkciami a začne dochádzať k nekontrolovateľným problémom. Bez objektov sa tiež veľmi zle tvorí nejaká architektúra, ktorá je u webových aplikácií veľmi dôležitá. Celý program sa potom skladá zo stoviek nezapouzdřených funkcií a zle sa udržiava. 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ú na toľko, že sa program už neoplatí rozširovať. Zástupcovia tohto prístupu sú napríklad jazyky C a Pascal. PHP je takým hybridom, kde sa tento prístup tiež objekvuje. Je to vďaka tomu, že jazyk vznikol v čase, keď OOP ešte nebolo rozšírené.
Náš príklad by vyzeral takto:
{PHP}
function secti($a, $b)
{
return $a + $b;
}
$c = secti(83, -2);
echo($c);
{/PHP}
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 zapouzdřit určitú funkcionalitu do modulov. Stále však neexistuje spôsob, ako už napísaný kód modifikovať a znovu využiť.
Ako už som sa zmienil na začiatku článku, niekedy sa uvádza, že sa jednoduché programy majú písať neobjektové, teda štruktúrovane. Nie je to však pravda. Keď vynecháme fakt, že porušujeme filozofiu OOP ako takú, nikdy nemôžeme vedieť, či sa tento program neuchytia az malej utilitky sa nestane niečo vážnejšieho. 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 metódam písania kódu sa prezýva "spaghetti code" pre ich neprehľadnosť (pretože špagety sú zamotané).
Objektovo orientovaný prístup
Jedná sa o filozofiu a spôsob myslenia, dizajnu a implementácia, kde kladieme dôraz na znovupoužitelnost. Prístup nachádza inšpiráciu v priemyselnej revolúcii - vynález základných komponentov, ktoré budeme ďalej využívať (napr. Keď staviame dom, nebudeme si páliť tehly a sústružiť skrutky, proste je už máme hotové).
Poskladanie programu z komponentov je výhodnejšie a lacnejšie. Môžeme mu veriť, je otestovaný (o komponentoch sa vie, že fungujú, sú otestované a udržiavané). Ak je niekde chyba, stačí ju opraviť na jednom mieste. Sme motivovaní k písania kódu prehľadne a dobre, pretože ho po nás používajú druhí alebo my sami v ďalších projektoch (priznajme si, že človek je od prírody lenivý a keby nevedel, že sa jeho kód bude znovu využívať, nesnažil by sa ho písať kvalitne ).
Znalosti, ktoré sme sa doteraz naučili, samozrejme budeme používať ďalej. Náš kód budeme iba inak štruktúrovať a to do komunikujúcich objektov.
Ešte si len pre ilustráciu ukážme opäť náš príklad, tentoraz v objektoch. Funkcia spočítaj už nebude niekde voľne poletovať, ale bude patriť objektu sčítačka, ktorý je jednou z komponentov našej aplikácie.
{PHP}
class Scitacka
{
public function secti($a, $b)
{
return $a + $b;
}
}
$scitacka = new Scitacka();
$c = $scitacka->secti(83, -2);
echo($c);
{/PHP}
Kód vám zatiaľ asi nič moc nehovorí. Napravíme to v nasledujúcej lekcii, Prvý objektová aplikácie v PHP , kedy si všetko podrobne vysvetlíme a vytvoríme si svoju prvú objektovú aplikácii