✉️ Saņem šito visu e-pastā. Tā vietā, lai palaistu garām kaut ko no tā, ko es rakstu savā blogā, tagad vari pierakstīties un saņemt e-pastā visu, ko es te rakstu. Tas nav bieži.

← Uz sākumu

PHP && OOP

2003. gada 29. martā, 31 komentārs

Es tomēr uzskatu, ka OOP iekš PHP ir pārāk liels overheads.

Bez vērā ņemamas piepūles ir iespējams rakstīt arī procedurālu kodu, kurš būtu fleksibls, ērti lasāms, modificējams, papildināms, rejūzojams.

Tieši tāpat, kā bez vērā ņemamas piepūles (parasti tā arī sanāk) ir iespējams uzrakstīt pilnībā nesaprotamu, nekvalitatīvu un nekur nederīgu OOP kodu.

Protams, ka daudzi, izdzirdot abreviatūru OOP sāk agresīvi gūglēt pēc piemēriem. Šī ieinteresētība lielākoties beidzas pēc pirmās klases uzrakstīšanas.

Ja es iedomātos uzrakstīt SPP iekš OOP, tas nebūt nenozīmē, ka viss būs uzreizi object oriented. Tās būs tās pašas procedūras, funkcijas un dati, tikai sabāzti objektos. Un galu galā atgriežamies pie tā paša, ar ko sākām. Tikai šoreiz lepni "objektorientētu".

Un protams, tā vietā, lai kāds tev pastāstītu, kas, kā un kāpēc ir jādara, tevi nodirš, jo tu, redzies, nemāki objektorientēti programmēt. Tad nafig man to visu darīt, ja es labāk rakstu procedurāli un panāku to pašu efektu? Tieši to pašu efektu.

Patiesībā visu šo rakstu, jo vēlētos uzzināt, kur var palasīties par pašu OOP PHP kontekstā. Nē, man nevajag sintaksi, to visu es ellē ratā esmu lasījis ensimts reizes. Man nevajag klasi Pēcis un klasi Maija, kurām ir parent klases Tētis un Mamma.

Tas, ko es vēlos, ir step-by-step (kaut vai HOWTO formā) izstāstīts tas, kā jāplāno OO skripts, kā jāorganizē objekti, etc. Domāšanas veidu man, lūdzu. Metodiku man, lūdzu. Reālās dzīves reālos piemērus, nevis nodrāzto templeišu klasi man, lūdzu. OO man, lūdzu.

Pretējā gadījumā ejiet ieskrieties ar savu OOP.

Tu atbildi augstāk redzamajam komentāram. Atcelt

Gravatar jb4

2003. gada 29. martā, plkst. 14:20

es lasu http://www.phppatterns.com un tur saitees noraadiitos materiaalus, kaa arii http://www.xoops.org sourci

Gravatar waters

2003. gada 29. martā, plkst. 15:00

RTU 2ajaa kursaa ir tads izveeles priekshmets Ievads OOP, tajaa gan programmeet iipashi nemaaca, bet ideologjiju gan. Aatri gan tas priekshmets man beidzaas, bet kaa piemeeru mums vajadzeeja ieksh Rational Rose uztaisiit banku automaatu sisteemu, ar visaam proceduuraam kaa iznjem naudu, apskataas bilanci, etc.

Gravatar Arturs

2003. gada 29. martā, plkst. 15:17

Peikrītu, ka nevietā vai neveiksmīgi lietota OOP gadījumā neizpaužas nekāds OOP pārsvars pār procedurālo programmēšanu, taču, ja kāds ir ļoti papūlējies un uzrakstījis labu OOP kodu, tad tādu rejūzot (vai vienkārši lasīt) ir daudz patīkamāk un vienkāršāk nekā procedurālu kodu. Bez tam, nespēju iztēloties kā procedurālā programmēšanā realizēt kaut vai objektu saraksta analogu, respektīvi, ir lietas, kas principā ir iespējamas tikai OOP variantā.

Gravatar laacz

2003. gada 29. martā, plkst. 15:24

Quoting Arturs: Bez tam, nespēju iztēloties kā procedurālā programmēšanā realizēt kaut vai objektu saraksta analogu...

Kas ir objektu saraksts? Pirms OOP ieviešanas vai tad tādu neviens nebija realizējis?

Gravatar to waters

2003. gada 29. martā, plkst. 19:29

tas priekshmets bija ievads OOT ( objekt orienteetaa tehnologjija) .... hehzz pat nezinam, ko esam maaciijushies

Gravatar Smejmoon

2003. gada 30. martā, plkst. 12:05

hmm ... :) .. laacz man vispaar patiik Tava attieksme .. vispirms pret standartiem, tad pret unikodi, tad pret 00 ;-)

es teu varu kautkaa sarakstiit, izstaastiit, kaa es to domaaju .. kautgan pasham man oo tagad iipashi neinteresee .. dod zinju, ja incee .. :))

Gravatar Smejmoon

2003. gada 30. martā, plkst. 12:07

<-- cut :: "Pierakstos uz komentaariem..." -->

P.S. <-- cut :: "It"s a matter of thinking..." -->

Tur taas dubultaas peedinjas ieskreejushaas .. ja taas gjenereeja kods, tad ir gljuks :)

Gravatar misame

2003. gada 30. martā, plkst. 12:40

Arturs: nabadziņš... vāja gan tev iztēle. Diez, kā viņi vispār nodzīvoja līdz mūsdienām, kamēr bija vēl tikai C? :) Paskaidrošu - lai uztaisītu linkotu sarakstu OOP vispār nav nepieciešama. Varbūt OOP lietošana izskaistina kodu, bet tas arī viss. Linkots saraksts sastāv no nodēm, kam piemīt vērtība (Arturam - jā, šī vērtība tikpat labi var būt objekta instances pointeris, zinu) un norāde uz nākamo šāda paša tipa nodi. Waters: jā, tas ir piemērs no Rumbaugh grāmatas, ja būtu bijis jātaisa iekš Grade, nevis ieksh Roses, tad varētu netaisīt, jo jamais tur samplēs jau bija ;D

Gravatar Smejmoon

2003. gada 30. martā, plkst. 13:05

takš ...

PHP ir dažas problēmas, kas man nepatīk.

  • namespaces -
    1. globālā namespace
    2. funkciju lokālā
    3. objektu/klašu
    4. superglobālie masīvi ... kas vēl?

tie projekti, kuros netiek izmantoti objekti, bet globālā namespace, tiek piedrazoti ar prefiksiem ( mysql_magic_function, rdmbmsooaaee_magic_function).

pieagot mainīgo skaitam vienā namespace pieaug arī koda saprašanas kompleksitāte. man ir maza galva. (palīdziet latviskot http://smejmoon.lv/wiki/NameSpace)

Gravatar Smejmoon

2003. gada 30. martā, plkst. 13:12

  • mantošana (inheritance) -

procedūru stilā to nevar eleganti izveidot (sakiet, kā var). tas palīdz nedomāt par kautkādas funcionalitates realizēšanu, ko Tu jau kādreiz esi darījis.

Gravatar Smejmoon

2003. gada 30. martā, plkst. 13:18

citādi OO man ir vienkārši viens no moduļu viedošanas rīkiem. kā arī atbildības novelšanas veids.

nevis: kraasot(sienu, sarkanu) bet siena.kraasojies(sarkana)

Tagad rakājos un ieviešu savā kodā kautko no funkcionālās programmēšanas .. mūsdienās to tendenci sauc laikam Aspect-Oriented Programming ;->

Gravatar ulzha

2003. gada 30. martā, plkst. 14:15

Tas pats ocw.mit.edu software engineering - man likaas diezgan labs! Un tur jau arii references uz zinaatniekiem & publikaacijaam bija...

Gravatar misame

2003. gada 30. martā, plkst. 17:03

Ja drīkst, es mazliet vēl paspriedelēšu (jo sen nav gadījies kodēt kaut ko iekš PHP darba vajadzībām, tātad - amatieris). OO pieeju būtu vērts izmantot tad, kad ir dažādi pieejas veidi pēc būtības tam pašam objektam - tu nodrošini dažādus interfeisus, bet nedublē(netrīskāršo, nepieckāršo) kodu. Piemērs. Ieraksti(posti) iekš laacz.lv. Gribam, lai ierakstu varētu rediģēt iekš SPP admin frontenda, gribam, lai ieraksts parādītos pirmajā lapā 'īsajā versijā', gribam, lai parādītos pilns ieraksta teksts, gribam, lai ieraksts būtu atrodams arī RSSā. Skaidra lieta, ka visām šīm darbībām ir šis tas kopīgs - no kaut kurienes "ielasīties" un "izdrukāties". Attiecīgi veidojam klasi "ieraksts", kuram metode 'ielasies' (metode ielasies_no_mysql() būtu slikti, jo tad katra ieraksta ielasīšana būtu jauna selecta izpildīšana uz mysql, tātad -slikti. Līdz ar to vajadzētu kaut kādu citu klasi, kas būtu ierakstu tabula, kuru ielasa no mysqla [or whatever datu bāzes]). Nu, un pēc tam atliek tikai rakstīt augšā metodes kā publish_short(), publish_full(comments:boolean), publish_rss(), publish_edit() un tamlīdzīgas. Un tad jau metodes implementē pareizo outputa veidu - editošanai ieliek kaut kādu textboxi, RSSam saliek XML tagus utt utt. Pēc tam krāmējam to visu iekš post.h.php faila un includējam failu visur, kur vajag. Ja kādas metodes implementācija baigi gara, to var iznest vēl citā ārējā failā un includēt tikai tad, kad tiešām vajag (lai nemocītu parseri ar gariem koda gabaliem, ko jamais neizmantos). Rezultāts būs tāds, ka ieraksta klasi izmantojošajās lapās kods kļūs stipri vienkāršāks/īsāks, būs vieglāk neapmaldīties. Un būs nedaudz vairāk fleksibilitātes uz izmaiņām (piemēram, ieraksta klasei diezgan maz interesē, vai tiek izmantota mysql db vai kaut kāda cita, par to jau rūpējas viņas servisa klases) Ceru, ka šis bija par oop php kontekstā. PS. Bet ne-objektorientēti vienalga ir ĀTRĀK :PPPPP (vai vienkāršāk, tas cits jautājums)

Gravatar laacz

2003. gada 30. martā, plkst. 22:31

jb4, par PHP5 man ir savi uzskati, kuri ir gana neglaimojoši jamajam. Un vispār Zend'am.

Gravatar jb4

2003. gada 30. martā, plkst. 22:37

skaidrs, ka tev ir savi uzskati. klaaj valjaa.

Gravatar misame

2003. gada 30. martā, plkst. 23:45

laacz, vispār izklausās diezgan aizdomīgi - Tev jau ir viedoklis par kaut ko, kā nav. Un pie kam - negatīvs.

Gravatar jb4

2003. gada 31. martā, plkst. 00:39

misame, teksts uz tava ekraana, kas redzams zilaa kraasaa un pasviitrots ar vienu pikseli platu liiniju, tiek saukts par saiti.

novietojot peles kursoru virs shii kraasainaa teksta un vienlaiciigi ar labaas rokas raadiitaajpirkstu nospiezhot peles kreiso taustinju iespeejams ielaadeet ekraanaa jaunu izskatu, kuraa savukaart var smelties dziives gudriibas par to kas ir un kas nav.

augstaak redzamas triis hipersaites, patreneejies uz kaadu no taam.

Gravatar misame

2003. gada 31. martā, plkst. 08:06

jb4, jā, es palasījos arī tajās lapās, neuztraucies. Bet vienalga nesaprotu to, kāpēc kaut kas var nepatikt pirms tu vēl to esi palietojis. ;)

Gravatar laacz

2003. gada 31. martā, plkst. 08:44

Misame, man ir viedoklis (personīgs un neprofesionāls:) par to vīziju, kuru uzbūruši ir cilvēki, kuri stāstījuši par to, kas iekš php5 būs un kas ne.

Gravatar Smejmoon

2003. gada 31. martā, plkst. 13:19

jb4: mans viedoklis par php+00 nav mainiijies, jo manas domas par OO nav daudz mainiijushaas un PHP arii nav neko mainiijies :)

trenneejos noformuleeshanaa.

nedomaaju, ka php5 buus kaada panaceja ..

Gravatar Smejmoon

2003. gada 31. martā, plkst. 13:20

pietam, tas, ka ieksh to php tiek taisiits OO kods neko labu neliecina .. overhead radiisies (no kaa jau laacz baidaas) un kapeec tad vajadziigs ir vecais labais dirty hack php?

Gravatar Arturs

2003. gada 31. martā, plkst. 14:08

Objektu saraksta piemērs:

  1. Saraksts, kas sastāv no objektiem, kur katrs objekts apraksta telfona iekārtu (šo mierīgi var realizēt procedurālajā programmēšanā).
  2. Katra telefona iekārta var būt vai nu analogais telefons vai mobīlais - kaut kas šiem abiem varētu būt kopīgs, bet pamatā abiem atbilst dažādas metodes un dati.(šo joprojām var realizēt proc. prog., bet jau jāķēpājas).
  3. Mēs nevēlamies katru reizi interesēties vai telefons ir analogais vai mobīlais, ja jāizpilda funkcijas/procedūras, kas kopīgas abiem tipiem (šo, cik zinu, proc. prog. precīzi vairs nevar realizēt. Protams, vienmēr jau eksistē visādi apvedceļrisinājumi, bet būtu labi, ja kodu spētu lasīt ne tikai tā autors vien).

Gravatar laacz

2003. gada 31. martā, plkst. 14:13

Arturs, nu nez. Tas IMHO darās vienkārši.

Gravatar misame

2003. gada 31. martā, plkst. 14:44

Arturs: Tad priekš tam tiek uzrakstīta vienota funkcija, kas apskatās, vai dotais eksemplārs ir analogais vai mobilais un izpilda attiecīgo metodi.

Gravatar jannis

2003. gada 31. martā, plkst. 14:57

nu man saak skjist ka tas OOP noder tikai ljoti specifiskos gadiijumos. un vispaar - vai tieshaam ir jeega pielikt teiksmin klasses failu ar 275 smukaam rindinjaam, ko izsauc ar padsmit smukaam rindinjaam, ja to pashu var veikt arii ar kaadaam padsmit bik dirty rindinjaam, kuras, ja pacenshas, arii var pataisiit citiem saprotamas.

Gravatar Smejmoon

2003. gada 1. aprīlī, plkst. 14:48

visu to OO pasākumu realizācija tāpat notiek ar funciju tabulām un vēlnezko .. visu, kas ir rakstīts lietojot klasēs var uztaisīt savādāk.

abstrakcijas līmenis ir cits, nav jau runa par tehnisko realizāciju .. un vispār būtu labi koda piemērus :P

Gravatar Smejmoon

2003. gada 1. aprīlī, plkst. 15:03

laikam jau tur tā lieta, ka OO sāk atmaksāties pie lielākiem koda daudzumiem .. un tādus piemērus uzreiz nepadosi ..

Gravatar sorehead

2003. gada 23. maijā, plkst. 20:52

Par oop var daudz palasiities seit. Ja reiz tev ir veelme apguut oop pieeju. http://64.78.49.204/

Gravatar xFib

2004. gada 3. jūnijā, plkst. 20:25

Mums skolotāja, kā viņu tur sauca Nikiforova laikam, tieši jūs uzslavēja. Teica ka esot baigi centušies ;). Žēl ka mums sanāca tikai 2 lekcijas pie viņas :(.

Gravatar kautkas

2007. gada 1. janvārī, plkst. 23:30

Laba grāmata par OOP ir Thinking in C++. Tiesa, kā jau var nojaust pēc nosaukuma, runa nav par PHP, bet gan c++, bet vispār var attiecināt uz OOP kopumā.