Tere,
kas keegi viitsiks mulle php algajale seletada, mis on nende abstract classide mõte. kus neid kasutama peaks?
|
1
|
|
|
|
|
4
|
Abstraktse klassi mõte on eemaldada "boilerplate" koodi ja "sundida" laiendavaid klasse kindlaid meetodeid implementeerima. Näiteks:
Koodis meil ei oleks mõtet teha Fruit objekti kuna me ei tea kuidas seda süüa. Me teame, et saame puuvilja süüa aga kuidas peab määrama konkreetne Puuvilja laiendus. Me ei saa küll objekti Puuvili tekitada aga me saame käsitleda iga Puuvilja laiendust (Õun ja Apelsin) käsitleda kui Puuvilja, sest me teame, et puuvilju on võimalik kuidagi süüa ja värvida seega ei pea täpselt teadma millise konkreetse Puuvilja laiendusega on tegu. |
||||||||
|
|
2
|
Ümbersõnastades mis egon ütles: Ülemklass on mõistlik abstraktsena defineerida siis kui sellest konkreetsete objektide loomine ei oma mõtet. Mitmetes OOP keeltes abstraktse klassi mõiste puudub, ning nendes defineeritakse seda sorti ülemklasse tihtipeale nõndaviisi:
Abstraktsete klasside tugi keele poolt annab võimaluse teha sedasama natukene lihtsamalt ja vigu (nagu implementeerimata jäänud meetodid) juba enne programmi jooksutamist automaatselt tuvastada. |
||||||
|
|
0
|
Alustuseks tasub sul endale selgeks teha, et mis erinevus on klassi ja instantsi mõistetel. Esimene neist on eeskiri mäluobjekti koostamiseks ja teine on reaalne mäluobjekt, mis on koostatud klassikirjelduse põhjal. Hea lugemine antud teemal on http://download.oracle.com/javase/tutorial/java/concepts/ mis räägib objektorienteeritud lähemise sisulisest poolest, ilma milleta pole tehnilise külje mõistmine lihtsalt võimalik. Abstraktsete meetodite olemasolul on PHP-s kaks põhilist eesmärki:
Oletame, et sa kirjutad tarkvara, mis elab kusagil serveris ja kogub regulaarsete ajaintervallide järel andmeid, ütleme näiteks, Eesti automüügiportaalides sisalduvate kuulutuste kohta. Iga automüügiportaal pakub oma kuulutuste loetelu erinevas formaadis. Kirvemeetodil lähemine oleks see, et sa lihtsalt kirjutad iga portaali jaoks eraldi PHP skripti ja võib-olla ka mõned funktsioonid. Niisugusel lahendusel on mitmeid puuduseid: iga skripti eraldi kirjutamiseks kulub sul mõtetult palju tööaega, vigu tekib rohkem kuna koodiridu on rohkem ja tulevikus on niisuguse segaduse täiendamine paras peavalu. Mõtekam on alustuseks läbi mõelda, et milline on see funktsionaalsuse ühisosa kõigi automüügiportaalide loetelu tõmbamisel, parsimisel ja kohalikku andmebaasi salvestamisel. Ilmselt on kattuvateks osadeks tõmbamine ja kohalikku andmebaasi salvestamine. Parsemise loogika oleks meie näiteks iga autoportaali puhul erinev, kuna oma kuulutuste loetelu pakub igaüks erinevas formaadis. Nii saab kuulutuste importija vormistada abstraktse klassina, kus reaalselt implementeeritud funktsioonid sisaldavad tõmbamise ja kohalikku andmebaasi salvestamist, parsemise osa jäetakse esialgu abstraktseks. Iga konkreetse autoportaali jaoks extendid sa oma abstraktset klassi ja implementeerid ainult loetelu parsemise, sest tõmbamist ja andmebaasi salvestamist juhtiv kood on sul juba olemas. Ehk et võtmesõnadeks on korduvkasutuse lihtsustamine, aja kokkuhoid ja selgelt struktureeritud programm. |
|||
|
|