1. Objektinis programavimas: kas tai ir kodėl?

Pradėkime iškart nuo svarbiausio klausimo - kas yra objektinis programavimas? Tai yra programavimo būdas ar "filosofija", kuri taikoma ne tik PHP kalboje, o bendrai programavime - tai būdas suskirstyti projekto kodą taip, kad jis būtų paremtas objektais. Kol kas nelabai aišku, ar ne? Na, ne viskas iš karto.

Pažiūrėkime konkrečiau. Rašant kodą PHP kalba be objektinio programavimo (geriausias pavyzdys - WordPress), visas projektas paremtas funkcijomis, kurios išdėstytos skirtinguose failuose. Ir jūs tiesiog kviečiate reikalingas funkcijas - pvz get_post() ar comment_form(). Tai gali būti patogu mažesniame projekte, bet jam augant - susiduriame su dviem augančiomis problemomis:

  • Didėja tikimybė, kad tokia pati funkcija jau egzistuoja kitame faile - ir reikia galvoti įvairius skirtingus funkcijų pavadinimus, prefiksus ir pan.
  • Tiesiog sunku surasti reikalingą funkciją - nors šiuolaikiniai IDE redaktoriai leidžia patogiai ieškoti, bet vis tiek mintyse projektas tampa vis didesne painiava.

Taigi, objektinis programavimas padeda spręsti šias dvi problemas, suskirstant kodą į atskiras "skiltis", vadinamas klasėmis. Jos kuriamos pagal prasmę - sakykime, funkcijų rinkinys reikalingas vartotojams apdoroti, gali būti patalpintas į klasę Users, o funkcijoms darbui su straipsniais gali būti sukurta klasė Articles. Ir tada, kai mums reikia kažką padaryti su straipsniu ar su vartotoju, mes kreipiamės į tą konkrečią klasę, žinodami jos pavadinimą ir nesipainiodami.

Bet tai ne vienintelė tokio atskyrimo priežastis ir privalumas. Žvelgiant globaliai, vieni projektai naudoja kituose projektuose parašytą kodą - ypač šiuolaikiniame PHP pasaulyje, kai atsirado Composer, padedantis patogiai tvarkyti su svetimomis klasėmis (tiksliau, klasių paketais). Laikantis principo DRY ("Don't Repeat Yourself"), prieš rašant kažkokį kodą, verta patikrinti, ar jis jau nebuvo kažkieno parašytas, ir ar mes negalime to panaudoti. Tai jeigu kodas suskirstytas klasėmis, mes galime paimti tą kodą kaip visiškai atskirą gabaliuką ir įterpti į savo projektą, nesirūpindami dėl konfliktų su mūsų kodu (nebent klasės pavadinimas sutaps su kažkuria mūsų klase, bet ir tam yra sprendimų). Tuo pačiu ir skaityti/suprasti svetimą kodą yra nepalyginamai lengviau, kai viskas sudėliota į lentynėles.

Taip pat objektinis programavimas savyje turi eilę savybių, leidžiančių projekto kodą suskirstyti dar sumaniau ir patogiau - apie tai ir kalbėsime šiame kurse. Paveldėjimas, inkapsuliacija, abstrakčios klasės - visa tai kol kas skamba labai bauginančiai, bet su kiekviena pamoka atsivers vis naujos galimybės, o jūs patys nuspręsite, kaip ir kur jas panaudoti.

Gera objektinio programavimo iliustracija yra šis namas - su OOP pagalba galite apibrėžti, kokios savybės būdingos visiems namams (kaip brėžinyje viršuje), o tada pagal tas taisykles kurti atskirus konkrečius namus, kurie savo ruožtu galės skirtis vienas nuo kito (kaip namai paveiksliuko apačioje).

Pasikartosiu, objektinis programavimas yra ne apie PHP kalbą, tad išmokę jo pritaikymą šioje kalboje, suprasite pagrindus ir galėsite daug lengviau perprasti kitas programavimo kalbas - kai kurios iš jų veikia TIK objektinio programavimo pagrindu.

Ir paskutinė priežastis naudoti OOP yra labai žmogiška - nes visi rimtesni programuotojai tai naudoja. Tai jeigu norėsite dirbti prie solidesnių projektų ar su solidesniais žmonėmis - be objektinio programavimo nė pro kur.

Mąstymo pakeitimas

Taip pat noriu jus nuteikti rimtesniam darbui. Objektinis programavimas, kaip sakiau, padeda visą kodą sudėlioti į lentynėles. Bet, norint pasiekti tokį tikslą, reikia dėlioti tvarkingai. O tam tenka mąstyti giliau, nei tiesiog rašant "hello world" kodą, kuris veiks iš bet kur.

PHP kalba yra ypatinga tuo, kad labai lengva parašyti nesąmoningą ir struktūriškai netvarkingą kodą, kuris vis tiek veiks. Nėra kompiliatorių, kurie "šauktų" kad toks ir toks kodas netvarkingas - blogiausiu atveju gauname "Fatal error" naršyklėje. Taigi, norint taikyti objektinio programavimo filosofiją, reikia įprasti pačiam mąstyti giliau, "architektūriškai" nuo pat pradžių, kad nereikėtų po to lentynėlių perdėlioti.

Objektinis programavimas kažkiek panašus į namo statybos procesą - turime nusibrėžti bent minimalų brėžinį ir struktūrą, o tik tada pradėti statybas. Priešingu atveju statybos gali kažkiek "sektis", bet arba pakeliui pamatysite, kad reikia perdaryti pamatus, arba galiausiai viskas sugrius.

Na, pasiruošę? Tada kitoje pamokoje jau nersime į realią medžiagą ir kalbėsime apie tai, kas yra klasės ir objektai.