Jump to content
php.lv forumi

par OOP izmantošanu funkciju vietā


zxspectrum

Recommended Posts

Sāku pārdomāt, vai tiešām nekad nespēšu saprast, kas ir OOP.

 

Lasot šo nodaļu, konkrēti http://php.lv/f/index.php?showtopic=530

vienu brīdi domāju, ka nu jau sākšu saprast... bet nekā. Labi, paraugs ar Hello World ir skaidrs, bet jēga tam visam?

 

Varbūt var lūgt vismaz aptuveni iebīdīt man domāšanu vajadzīgā virzienā?

 

Vienu brīdi, kad bija apriebušies daudzie un dažādie kvēriju varianti manā kodā, nolēmu uztaisīt funkciju, kurai varētu pesūtīt parametrus, un, atkarībā no tiem, funkcija vērstos pie konkrētas tabulas ar select, insert into vai delete kvēriju, paņemtu attiecīgos fields, atlasītu ar where, uzliktu limit utt.

 

Funkciju gan uztaisīju, bet parametru kaudze, ko piesūtīt, jāraksta 5 rindās un pašam sajūk.

 

Varbūt tieši te bija labāk imantot klases? Lasu topikus - saka, katrai tabulai jātaisa sava klase. Kāda tad jēga?

Par conection būtu skaidrs - tur nekas nevar mainīties.

 

Bet par tādu universālu klasi, ko varētu zmantot, lai nebūtu jāraksta kvērijs ar fetch assoc un do while izvadi desmitiem reižu - kā to šai gadījumā varētu realizēt?

 

Jau iepriekš paldies par norādēm uz manuāli. Ja būtu palīdzējis, neprasītu te...

 

Pilnu kodu man nevajag, tikai aptuveni pašu būtību iesākumam. Paldies arī tiem, kas atbildēs tikai tāpēc, lai parādītu, ka ir lieli speciālisti.

Edited by zxspectrum
Link to comment
Share on other sites

Tie, kas saka, ka katrai tabulai vajag savu klasi, to nedomā tā, ka tu tur saliksi primitīvas insert/delete/get metodes, bet gan tajās realizēsi biznesa loģiku. Tb tajās tu ieliksi ko vairāk par pliku datu dzīšanu šurpu turpu - kautkādu validāciju, datu aptrādi, pārbaudi ar db, datu dabūšanu no saistītajām tabulām.. Jo katrā tabulā glabājas cita veida dati, tāpēc darbības jāveic citādas. Interfeisa līmenī tu ar šādām klasītēm darbosies nevis padodot SQL kverijus vai to daļas, bet gan metodes veidosi atbilstoši veicamajām darbībām, piem grāmatai - getAuthors($bookId), kas dabūs tā autorus no piesaistītās tabulas.

 

Ne vienmēr tas, protams, izrādās efektīvākais veids. Citreiz izdevīgāk uzrakstīt universālāku sql klasīti, kurai padosi sql teikumu fragmentus stringā/arrayā. Taču šādas universāla klasīte katram patīk savādākā veidā, tb pēc gaumes. To katrs "īsts programmētājs" raksta savu :)

Link to comment
Share on other sites

ja iesākts runāt par orm, tad jāpiemin hibernate (http://www.hibernate.org/)- etalons vai propel (http://sourceforge.net/projects/propel/) ~ tas pats priekš php. ja ne uzreiz lietot viņus, tad paskatīties idejas līmenī kas tie ir un idejiski kā viņus izmanto palīdzēs izdomāt kādas klases ar php savam projectam sataisīt.

Link to comment
Share on other sites

Tas viss atiecas pagaidām uz tā saukto datu slāni. Tak oop labumi ir daudz plašāki :) OOP ļauj strukturēt visu programmu loģiskajās vienībās un slāņos, kas uzlabo gan programmas struktūras saprašanu, gan atvieglo izmaiņu veikšanu vajadzības gadījumā. Kā visplašāk pazīstamo var pieminēt model-view-controller paternu. Ideālā gadījumā mēs varam mainīt jebkuru no trīs slāņiem, neaiztiekot pārējos...

Nu, un protams OOP ir koda daudzkārtējā izmantošana. Atkal ņemot to pašu mvc, mēs rakstam kaut kādas bāzes klasses, kuras realizē vai definē katra slāņa interfeisu un savstarpējo viņu darbību, un izmantojam tās visos savos projektos, pierakstot klāt tik atsevišķas specifiskas lietas. Uz šī bāzes tiek realizēti vairums freimvorku...

Tak foruma ietvaros ir diezgan nereāli izskaidrot kāpēc tieši oop ir labs. Var ieteikt tik lasīt par šo tēmu, piem. četru bandas "Projektēšanas patternus", vai par php5 "PHP 5 Objects, Pattens and Practice", Matt Zandstra. Nu, un ietekmējoties no lasītā, mēģināt pašam ko rakstīt tādā stilā. Iesākumā liksies dīvaini, bet tad smadzenēs kaut kas noklikšķēs, un vairs citu programēšanas stilu lietot negribēsies ;)

Link to comment
Share on other sites

Tas nu gan nav tiesa, ka negribēsies. Ja cilvēks tiešām ir ieinteresēts programmēšana un skaista/ērta/"laba" koda rakstīšanā, tad iepazīstot kādu funkcionālo programmēšanas valodu (Haskell, ML, vai kādu Lisp-veidīgo), domas par to kā ir jāprogrammē "pareizi" atkal pavērsīsies par 180 grādiem uz otru pusi. Es arī agrāk ticēju, ka OOP stils ir the ultimate veids kā rakstīt programmas, ka nekas labāks nevar būt ;)

Link to comment
Share on other sites

mani ari interesee apgut shada stila programmesanu, varbut vel kadas labas literaturas pieejamas? No kaa pashi smelaties idejas? Vienkarsi jutu ka veidojot lielakas lietas, viss kods saak kluut pa murgu, tapec vajadzetu iemacities veidot atseviskus moduljus, kur katrs ir daudzmaz neatkarigs.

 

P.S. četru bandas "Projektēšanas patternus"

Taa vins ari saucas?

Edited by Blitz
Link to comment
Share on other sites

OOP ir domāšana un koda strukturizācija nevis rakstīšanas stils (sarakstam visas funkcijas klasēs)

un apgūt viņu var tikai un vienīgi praktizējot un lasot gudras grāmatas.

 

man arī vēl daudz kas neiebrauc :)

 

četru banda - The Band of Four. četri čuvaki sarakstījuši ļoti labu grāmatu par patterniem

Link to comment
Share on other sites

ar php ir grūti iemācīties labu oop rakstīt, jo php atļauj pārāk daudz. pamācies/paspēlējies ar javu vai objective-c, kaut vai tā pat prieka pēc un lai saprastu ko var ar objectiem izdarīt. pēc katra pabeigtā javas gabaliņa man skaidrāk paliek kā labāk organizēt objectus iekš php.

Link to comment
Share on other sites

nēnu tas, ka php ļauj par daudz - sajūtu nepārtraukti. būtu efektīvāk apgūt to visu pasākumu, ja piemēram visi objekta variabļi būtu private utt. mazas lietas. pagaidām, ja īpaši neko nenorāda tad visu var izmantot visur un tad arī rodas jautājums - a kāda velna pēc rakstīt visu oop :)

 

oop nedaudz sāk pielekt pēc bakstīšanās ar javascript - bet tikai minimāli.

 

a ar javu vai objective-c nav kur spēlēties...

Link to comment
Share on other sites

hmnc, kā nav kur spēlēties?

 

A postē topikus tu kur? Uzliec java sdk, un taisi apletus - skaties webā un mācies :)

 

C++ tikat ātri ir uzliekams (tas pats gcc pa brīvu nāk un spēlējies cik vien patīk līdz vemšanai)

 

Un vispār pirms kodēt ar OOP, jāapgūst "programming patterns" kā tādi. Ja nemāki normāli kodēt ar f-jam, ar objektiem vēl sūdīgāk ies.

 

Piemēram daudz linux softi ir ar plain-c un tur ir ko pamācīties!

Link to comment
Share on other sites

Domā iesācējam labāk sākt ar kautko tādu, kur var visu dajebkā sazinkā izdarīt? Vai tomēr konkrēti piespiež rakstīt un lietot vajadzīgos keywordus vajadzīgajās vietās?

Kā tu domā, kurā gadījumā viņš [ātrāk] sapratīs, ko katrs keywords nozīmē?

Link to comment
Share on other sites

×
×
  • Create New...