Jump to content
php.lv forumi

Procedural vs. OOP


aika

Recommended Posts

Tā kā jau zināmu laika sprīdi nespēju atrast argumentus šajā cīņā par labu OOP Nu vot nesanāk. Iespējams ka saturīga saruna pie alus kausa ar labu OOPistu līdzētu, taču ...

Šodien iegūglēju šādu sarunu:

http://stackoverflow.com/questions/716412/why-use-php-oop-over-basic-functions-and-when

un no tās aizgāju līdz:

http://www.virtuosimedia.com/dev/php/procedural-vs-object-oriented-programming-oop

Kas mani pārsteidza - komentāros to, kas apd1rš OOP ir dāaauz vairāk nekā to, kas aizstāv :) Esot gan tāds teiciens, ka ar muļķiem strīdas tikai muļķi ... bet man no tā vieglāk nepaliek. Tā arī nesaprotu/nespēju sevi piespiest sākt OOPisties :)

Visos OOP slavināšanas piemēros kods sanāk garāks, koda lasīšana nesaprotamāka, sintakse ačgārnāka utt

 

Padalies kādā brīdī TU sāki OOPisties un kas tevi uz to piespieda! Skaidrs ka par OOPistu nepiedzimst, visi ir izauguši no procedūrām. Tad kāds kuram ceļš bijis, kāda dzīves klizma līdzējusi un kā?!

Link to comment
Share on other sites

1) Autoload. Man šķiet, ka autoload ir viena no skaistākajām PHP lietām, kas ļauj ātri rakstīt kodu. Tev nav jādomā, kur kā, ko esi inclūdojis, tas viss notiek tieši tad un tikai tad, kad tu izmanto attiecīgo klasi. Tas gan paātrina aplikācijas darbību, jo netiek ielādētas un inicializētas liekas bilbiotēkas, gan padara koda rakstīšanu ātrāku, jo nav pat jādomā, vai attiecīgā klase ir pieejama (inklūdota).

 

2) Loģiskāka aplikācijas struktūra. Objekti ļauj labāk strukturēt kodu, parametri, kas pieder objektam, ir tikai objektam, tie nejaucās kopā ar neko citu.

 

3) Mantošana. vari uzrakstīt vispārēju objektu, piemēram Controller, kurš dara visu to, ko vajag visiem kontroleriem un tad vienkārši katru kontroleri rakstīt tā, ka tas manto šo:

class Controller_Index extends Controller {
}

Un tam pievienot tālāk papildus tikai to funkcionalitāti, kas attiecas uz attiecīgo kontroleri.

 

4)Vesela kaudze paternu, kas ļauj rakstīt modulāru un viegli saprotamu un menidžējamu kodu:

strategy paterns - filtriemu un dažādām lietām lietām ,kur vajadzīgs rakstīt dažādus algorimus, kas strādā ar noteiktām struktūrām,

chaining paterns - ērtam, īsai, bet tai pašā laikā universālam pierakstam,

utt.

 

5)maģiskās metodes. Ļauj tev rakstīt klases, kuras darbojas līdzīgi kā, piemēram, masīvi, bet ļauj tev pielik papildus funkcionalitāti.

Piemēram, tu vari uztaisīt ORM modeli, kur klases instancei piekļūst kā masīvam, bet tai pašā laikā šīm darbībām piešķirt papildus funkcionalitāti:

 


class User extends Model{
 function onset_name($val){
return 'Mr. '.$val;
 }
}

$user = new User();
$user->loadById();
$user['name']='Jonh';
$user->update(); // updeito 'Mr. John';

Link to comment
Share on other sites

Kapeec lai katra klase nebuutu savaa failaa? o_O Tieshi tas jau padara visu struktureetu. Katra klase atbild par kaut ko savu - taadeelj vinja ir nodaliita atsevishkjaa klasee un taadeelj vinja ir savaa failaa. Tu tachu funkcijas (cerams) arii strukturee kaut kaa kopaa nevis samet visu chupaa. Piedevaam deelj autoload tev nevajag uztraukties par to ka ir 100 faili, jo manuaali tev vinjus inkluudot nevajag shaa vai taa.

Link to comment
Share on other sites

vai 1 punkts neparedz katru klasi savā fiziskā failā??!! Baigais mess...

LOL, mess ir tūkstošiem rindiņu gari faili.

Tāpat svarīgi saprast, ka klase sastāv no daudz metodēm, parametriem. Piemēram, vienkārša mysql db klase var būt kā viena klase, kas atrodas vienā failā, man parasti klases ir vidēji no 50 līdz 200 rindiņu garas. Ja klase sanāk garāka, ir skaidrs, ka ir mess un ir jāizdomā, ka šādu funkcionalitāti abstrahēt un sadalīt2 vai variākās funkcionālās daļā.

Klases tieši ir jādala pa failiem, jo to automātiski paredz koda atkārtota lietojamība. Vajag jaunā projektā no vēca kaut ko, iekopē tos failus, vai pat moduļus, ja tā organizēta struktūra un izmanto, nevis ej cauri failiem, meklē, kur sākas, kur beidzas kāda funkcionalitāte un mēģini to iekopēt, saorganizēt no jauna.

Bez tam, ja tu inklūdo lielus faius ar daudz lieku funkcionalitāti, tad tas aplikāciju noteikti padara pāris reizes lēnāku.

 

3punkts - nu funkcija jau arī var izsaukt funkciju, inclūds saturēt inclūdu utt...

Bet, ja tev ir 2 dažādas funkcionalitātes, kas manto no vienas? Piemēram, tev ir 2 modeļi User un Posts un abi manto funkcionalitāti no Model. Tad tavā gadījumā, kad tu inklūdosi to mantoto funkcionalitāti? Ja abos gadījumos, tad inklūdosies dubultā, vai jātaisa speciāls čeks, kurš čeko, kas ir inklūdots, kas nav un tas atkal padara aplikāciju lēnu.

Link to comment
Share on other sites

Manuprāt, OOP noliek tikai tie, kas nav strādājuši komandā. Pamēģini uzminēt un atrast, vai kāds jau funkciju ar tādu pašu funkcionalitāti kā tev vajag, jau ir/nav uzrakstījis, un kurā failā tā īsti atrodas. Ir gadījies redzēt, kā uzpeld 5 dažādas funkcijas ar vienu un to pašu funkcionalitāti, no kurām 3 pat atradās vienā un tajā pašā failā.

Link to comment
Share on other sites

Funkcijās,lai cik labi tās nebūtu uzrakstītas,visbiežāk sanāk dublēt vienas un tās pašas darbības un ir grūti sekot DRY principam.Vienā skriptā to tik izteikti nejūt,bet ziepes sākas,kad tas ir jāpielāgo jau citam projektam.Tad visai ātri rodas déjà vu sajūta kad viens un tas pats ir jāraksta atkal un atkal. OOP tādā ziņā sabliež vienos vārtos: Uztaisa vienu bāzes klasi,un tik extendo uz nebēdu tikai tās metodes,kurās kaut kas mainās.Ātrumu nevar salīdzināt ar to jātni,kas būtu bliežot visu vienā putrā +arī neticu ka šādi programmējot regulāri nerodas vēlme,lai vairāki variabļi būtu brīvi redzami/pieejami jebkurā no funkcijām.Izmantot globāļus,vai mētāt parametros no vienas uz otru ir mazohisms manuprāt,kad ir iespēja to visu daudz ērtāk izdarīt.

 

Edit: kamēr rakstīju postu,izrādas tas jau tika uzrakstīts :D

Edited by 404
Link to comment
Share on other sites

ook, jūtu uz ko velk. un kkur jau manīju šo frāzi: OOP ir jēga tur kur tam ir jēga. Skaidrs ka piemēram 10 lapu statiskai lapelei ar vāju CMS nav jēgas urbties OOP. Nav jēga lietot klasi DB conectam, ja to var procedūrā uzrakstīt 1 rindiņā. Problēma tamā, ka aprakstot kas tas OOP ir, tiek lietotas vienkāršas situācijas. Tad loģiski rodas jautājums- kāpēc sarežģīt vienkāršo. :) Acīmredzot OOPisties sāk tad kad ar procedūrām tā esi sap1sies, ka vairāk nevar :)

P.S. par failu kaudzi - i get it.

Link to comment
Share on other sites

ook, jūtu uz ko velk. un kkur jau manīju šo frāzi: OOP ir jēga tur kur tam ir jēga. Skaidrs ka piemēram 10 lapu statiskai lapelei ar vāju CMS nav jēgas urbties OOP. Nav jēga lietot klasi DB conectam, ja to var procedūrā uzrakstīt 1 rindiņā. Problēma tamā, ka aprakstot kas tas OOP ir, tiek lietotas vienkāršas situācijas. Tad loģiski rodas jautājums- kāpēc sarežģīt vienkāršo. :) Acīmredzot OOPisties sāk tad kad ar procedūrām tā esi sap1sies, ka vairāk nevar :)

P.S. par failu kaudzi - i get it.

Arī tā nav.

Arī īsu projektu var uzrakstīt izmantojot skaistu FW, kas veidots OOP stilā un rakstīt OOP un, ja mācēsi to lietot, rezultātu tik un tā sasniegsi ātrāk un pat to mazo lapiņu pēc pāris mēnešiem varēsi uzturēt daudz vieglāk.

Salīdzinājam tas būtu tā, cilvēks sākumā iemācās rāpot, tad iet. Ja tev veikals atrodas 500m no mājām, tad rāpojot tu sap....ies, bet aiziet varēsi bez problēmām. Protams, ja tev veikals atrodas tavā kāpņu telpā, tad var arī līdz viņam aizrāpot, bet pat šijā gadījumā, ja būsi iemācījies iet, tev būs vieglāk.

Tāpēc mans ieteikums ir iemācīties beidzot staigāt.

Link to comment
Share on other sites

Patīk šī atbilde no "staķa":

 

> They don't really have pros and cons at all, IMO. They're simply different approaches to the same problems.

Tā nu gluži nav ar.

Ja mēs attiecinām uz konkrētas problēmas risināšanu un šijā gadījumā tā būtu, web aplikāciju izstrāde, atkļūdošana, labošana, uzturēšana un pilnveidošana, tad mēs varam viennozīmīgi sarakstīt kaudzi pros and cons.

Link to comment
Share on other sites

eee, es pareizi saprotu - OOP viena no pamatdomām ir veidot nevis universālas 'funkcijas' (uz ko tiecas procedūristi) bet specifiskas maksimāli vienkāršas konkrēta rezultāta funkcijas, kuras maksimāli ērti izsaukt?

 

 

P.S. nu sry veči... skatos login tutoriāli (

) 2 daļa, 15mitā minūte, clases fails jau 100 rindas, vēl pat nesam verificējuši useri ...

nu ziniet - pāriet uz OOP ir kā no kartingiem pārsēsties Formulā1 - varbūt arī ātri un jaudīgi, bet nu sagatavošanās/iemācīšanās/treniņi utt ļooooti sarežģīti un ilgi.

 

P.P.S - noskatījos un ziniet ... sapratu! A to visos tekstos kkādi abstrakti piemēri par suņiem vai mašīnām, a te konkrēti ko vajag un kā vajag. Un sapratu, ka implementēt šo kodu jebkurā manā lapā man aizņems 4 rindas koda un viens file copy. :)

Edited by aika
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...