Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.

[es] :: PHP :: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.

Strane: 1 2 3 4 5 6

[ Pregleda: 27965 | Odgovora: 101 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.09.05.2010. u 15:50 - pre 169 meseci
Ako pricamo o tih 12 instanci poziva koje planiras da izvedes bez parametara da "olaksas sebi zivot", to pretpostavlja da vojnik ima pokrivene sve scenarije odabrira jednog sredstva iz svih mogucih kombinacija raspolozivih state-ova magacina sredstava, zar ne.

Tvoji testovi, da bi bili kompletni, moraju da testiraju za sve upotrebne kombinacije magacina i svaki moguci odabrani alat. A ako testiras postupak ciscenja za svako moguce odabrano sredstvo to je isto kao da si testirao i parametrizovani metod za sve moguce ulazne parametre. Jel sad jasnije? Krateci testove ti si napravio pretpostavku kako ce magacin da izgleda i ako on ne izgleda tako imas netestiran scenario, zamazao si sefu oci sa "imam test" nad skrivenom metodom koja ne puca na tvom pretpostavljenom magacinu, a bagove, to nek resava kupac ili Q&A, jel tako? "Assumption is the mother of all fuckups"

Vidis interni state objekta je uvek parametar svakog instance metoda (predstavljeno kroz interni skriveni parametar, this npr) i tvoje testiranje mora da ukljuci taj state kao parametar. Dalje, da ti jos zakomplikujem zivot, u sorsu taj tvoj Clean() metod bi mogao da se refaktoruje na kod koji bira sredstvo i onda poziva Clean(sredstvo) specijalizaciju, sto te vraca na prvi korak. Dakle, ako nemas toliko testova, opet si zabusavao i koristio black-box prirodu metode da pokrijes potencijalne rupe Sto nas vodi ka trecem, testiranje i TDD takodje nije kompenzacija za dobar dizajn.

I da ja priupitam, zasto je ova tema u PHP forumu kad se tice teorije programiranja, zar nije AoP bolje mesto?



[Ovu poruku je menjao Goran Rakić dana 16.06.2010. u 01:45 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
*.dynamic.isp.telekom.rs.



+16 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.09.05.2010. u 21:50 - pre 169 meseci
Glavni problem je sto vecina ne shvata zasto uopste koristiti OOP. Naime, nije cilj OOP eto samo zato da bi pratili neke trendove vec da olaksa programiranje i buduce lako dogradjivanje i menjanje sajta ili programa.

Znači u suštini glavna poenta OOP je da se uoče lepo karakteristični objekti i da se lepo razvrstaju po klasama kako bi se izradio efikasan sajt sa što manje objekata i klasa.

Dobro odradjen oop je onaj da kad bilo sta hocete da dogradite ili promeniti dogradjujete to ili menjate samo na jednom mestu. Ako se desi da prilikom neke dogranje ili menjanja morate pisati na vise mesta onda niste dobro odradili OOP.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.09.05.2010. u 23:15 - pre 169 meseci
Ja ne znam za vas, ali meni se mozak isključuje čim vidim OOP primere na bazi automobila, vojnika itd. Uvek mi je bilo skroz strano da učim programerske koncepte na modelima koji najverovatnije nikad neće biti praktično modelirani i implementirani u nekom softverskom projektu (barem ne na taj način i sa tim i takvim metodama...) :)

Inače je zanimljiva tema, kako PHP programeri shvataju OOP... :)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 07:57 - pre 169 meseci
Ne budi toliko siguran, ja sam modelovao vojnike i oficire i subclasovao ih Kad sluzis vojsku programiranjem onda pises programe za vojsku Doduse kasarne nisam modelovao, ipak je to bio program za godisnje odmore i odsustva

A inace, da, zanimljivo je citati. Verovatno zato tema i nije u AoP, mislim da im se ne bi svideli odgovori koje tamo dobiju Ocigledno je da se OOP ovde dozivljava kao problem, ne kao bonus.

Citat:
@iizuzetan: Dobro odradjen oop je onaj da kad bilo sta hocete da dogradite ili promeniti dogradjujete to ili menjate samo na jednom mestu.

Pogresno, i programer-centricno, dobro odradjen OOP je onaj koji sto vernije modeluje realnu situaciju koju implementira program. Projektant mora da ima slobodu da menja model u skladu sa promenama zahteva, ti sa druge strane kao programer to treba da implementiras, zato je dobar refaktoring alat najbolji prijatelj jednog programera.


[Ovu poruku je menjao Goran Rakić dana 16.06.2010. u 01:44 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
*.dynamic.isp.telekom.rs.



+16 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 09:46 - pre 169 meseci
Po meni jedino sto se moze postici OOP je to da se jako efikasno organizuje nasledjivanje a funkcijskim programiranjem da bi ste ostvarili nasledjivanje trebate zvrsiti gotovo celu reorganizaciju programskog KOD-a.

Znaci ajde nabroj ti onda sta to moze OOP a sto ne moze funkcijsko programiranje, pa ce te onda i lakse shvatiti kad, gde, zasto i kako koristiti OOP.

[Ovu poruku je menjao Goran Rakić dana 16.06.2010. u 01:47 GMT+1]
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-3.sezampro.rs.



+395 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 10:09 - pre 169 meseci
Nasledjivanje jeste jedan od prednosti OOP-a ,ali uopste nije najvazniji i JEDINI ,
cak u nekim slucajevima razbija enkapsulaciju ako se zluopotrebljava i koristi nasiroko i na svakom mestu .

Sve veze izmedju objekata/ klasa koje organizujes u programu mogu se svesti na tri nacina :
IS - nasledjivanje
USING - jedan objekat koristi drugi kroz neku od svojih metoda
i HAS - jedan objekat sadrzi drugi i njegov 'zivotni vek' je odredjen prvim

U dobro organizovanim projektima prednost se uvek daje vise apstraktnim interfejsima i
kompoziciji objekata (USING i HAS vezama ) nego samom nasledjivanju .




Viva lollapalooza
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 10:13 - pre 169 meseci
OOP je OBJEKTNO orijentisano programiranje, ne NASLEDNO orijentisano programiranje
Ne-apstraktna sealed klasa koja nikog ne nasledjuje ali ipak implementira neki entietet je savrseno validno OOP. Ja razumem tvoj post, to je razmisljanje bazirano na lone-wolf praksi i teoriji koja kaze da je OOP code laksi za upgrade. Cinjenica medjutim je da se refaktorizacija koda obavlja veoma veoma cesto i da OOP tu ne pomaze apsolutno ni malo.


[Ovu poruku je menjao Goran Rakić dana 16.06.2010. u 01:48 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-3.sezampro.rs.



+395 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 11:04 - pre 169 meseci
Citat:

OOP je OBJEKTNO orijentisano programiranje, ne NASLEDNO orijentisano programiranje

E , a kad vidim negde klasa A nasledjuje B nasledjuje C nasledjuje D .. i jos ti kaze
neko da je to 'suvi' OOP digne mi se kosa na glavi :D
Viva lollapalooza
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 11:39 - pre 169 meseci
Pa nekad je tako i bilo, kad je OOP bio nova i hip stvar Sto vise nasledjivanja to bolje, ako moze i visestruko, jos bolje ako niko sem tebe ne razume to je premium bonus . Nasledjivanje je tada i vidjeno upravo kao spas za ono sto iizuzetan prica, sa ove distance naivno verovanje da ce modifikacije na base klasi automatski propagirati promenu ponasanja naslednika bez potrebe za dodatnim modifikacijama u naslednicima. Medjutim, to nije ispalo tako iz dva razloga, kao prvo to zahteva veoma poseban i rigorozan stil programiranja u kome je funkcionalnost naslednika uvek DODATAK na funkcionalnost baze i da se taj odnos nece menjati u buducnosti, takav monaski stil programiranja retko ko praktikuje i prilicno je rigidan za promene. Drugo, funkcionalno mnogo je realnija situacija u kome specijalizovani entitet ima neku funkcionalnost UMESTO funkcionalnosti bazne klase cime se uprkos naslednoj liniji prekida funkcionalna doslednost (prosto receno sve zavisi da li, kako i kada pozivas inherited metod, ako ne pozoves uopste nevazna je promena u bazi tj ako promena obuhvta i specijalizaciju mora da se iskodira posebno za svaku specijalizaciju). Ne kazem naravno da je nasledjivanje postalo irelevantno u OOPu, sta vise polimorfizam je i dalje veoma jak instrument u u potrebi klasnih hijerarhija za npr. agregatne operacije, kao target za template (generics) specijalizaciju, ORM alati i dalje mapiraju flat podatke u klasne hijerarhije, itd, itd. Medjutim suprotno uvrzenom verovanju, nasledjivanje nije uopste nesto sto smanjuje kod i njegovo odrzavanje, bili su neophodni refaktoring alati da popune tu supljinu.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 11:41 - pre 169 meseci
Citat:
mmix: I da ja priupitam, zasto je ova tema u PHP forumu kad se tice teorije programiranja, zar nije AoP bolje mesto?

Ja mislim da je ova tema sada u potpunosti otišla van domena PHP foruma...
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
195.252.79.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 12:18 - pre 169 meseci
Citat:
@iizuzetan: Dobro odradjen oop je onaj da kad bilo sta hocete da dogradite ili promeniti dogradjujete to ili menjate samo na jednom mestu.

Pogresno, i programer-centricno, dobro odradjen OOP je onaj koji sto vernije modeluje realnu situaciju koju implementira program. Projektant mora da ima slobodu da menja model u skladu sa promenama zahteva, ti sa druge strane kao programer to treba da implementiras, zato je dobar refaktoring alat najbolji prijatelj jednog programera.


Ne, iizuzetan je u pravu, 100%. Posto uvek dajem primere, evo ti jos jedan:
trenutno radim na programu i 5 objekata deli zajednicku metodu isRateable(). Ona treba da vrati true/false u zavisnosti od 3 parametra: stanje $_COOKIE-a, da li je korisnik ulogovan i da li postoji setovan tag rateable(nije bitno sta je).

I svuda gde se iscrtavaju zvezdice za glasanje, pre toga stoji
Code:

{if $object->isRateable()}
// iscrtaj zvezdice
{/if}...


Juce sam tu metodu prosirio da onaj koji je kreirao taj objekat, ne moze da glasa za njega. Gde sam to uradio? Pa samo u toj metodi isRateable; ostatak programa nisam ni pipnuo.
Kako sam to uradio? Tu metodu sam prosirio tako sto sam unutar nje ubacio sledeci kod:
Code:

return $this->rateable 
        && !isset($_COOKIE[strtolower(get_class($this)) . '_' . $this->id]) 
        && User::isUserLogged() 
        && $this->getUser()->id != User::getLogged()->id ;  // ovo je nova linija


Posto svi objekti vec imaju getUser(), ja sam dodao SAMO jednu liniju u isRateable() i sprecio da korisnik koji je kreirao Playlistu, Album, Song i Event glasa za njih.


Citat:
KAKO ce vojnik da uzme leafBlower iz magacina sredstava ako trenutno u njemu nema istih? Znaci postoji logika odabira koja ZAVISI od TRENUTNOG stanja magacina sredstava, samim tim STANJE magacina sredstava je tebi skriveni parametar za cleanLeaves(),


Da, naravno! Zato sam i rekao; vratice false ako ne moze da nadje metlu a u svoj errorStack moze da stavi i razlog zasto POSAO nije obavljen. Vec sam rekao ali ponovicu; kad pozovem Doctrine-ovu metodu isValid() , mene samo zanima da li je objekat validan ili ne. Ako me interesuje zasto nije, pitacu ga sa $soldier->getErrorStack(). Ili smatras da ni programer Doctrine ne zna OOP?



[Ovu poruku je menjao Goran Rakić dana 16.06.2010. u 01:50 GMT+1]
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 12:19 - pre 169 meseci
Pa dotice se donekle. Moji postovi i sluze da vam pokazu koliko je u stvari PHP daleko od koncepta OODa i uopste OOPa kao njegovog instrumenta. Nije mi cilj da omalovazavam PHP ali ni vi bas niste sigurnio sta vam to OOP donosi u PHP sto je tako fundmentalno drugacije i onda se hvatate za pojedinacne aspekte OOPa i promovisete ih iz posledice u uzrok i razlog zasto su vam neophodni. Pocnimo od toga koliko vas serijalizuje PHP objekte i deserijalizuje pri svakom pozivu? Koliko koristite polimorfizam u svojim PHP projektima?Imate li modele z svoje hijerarhije ili je sve onako odokativno ad-hoc?


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
195.252.79.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 12:43 - pre 169 meseci
Citat:
Pa nekad je tako i bilo, kad je OOP bio nova i hip stvar Sto vise nasledjivanja to bolje, ako moze i visestruko, jos bolje ako niko sem tebe ne razume to je premium bonus . Nasledjivanje je tada i vidjeno upravo kao spas za ono sto iizuzetan prica, sa ove distance naivno verovanje da ce modifikacije na base klasi automatski propagirati promenu ponasanja naslednika bez potrebe za dodatnim modifikacijama u naslednicima. Medjutim, to nije ispalo tako iz dva razloga, kao prvo to zahteva veoma poseban i rigorozan stil programiranja u kome je funkcionalnost naslednika uvek DODATAK na funkcionalnost baze i da se taj odnos nece menjati u buducnosti, takav monaski stil programiranja retko ko praktikuje i prilicno je rigidan za promene.


Evo, ja bas primenjujem taj monaski stil pisanja. Kod mene se objekti nasledjuju ovako:

class User extends BaseUser extends AbstractBaseModel extends Doctrine_Record itd...

dalje nisam gledao, niti me zanima. Da, znam da je gornja linija neispravna, ne mora niko da me opominje, to je samo primer nasledjivanja.

Sve zajednicke stvari za objekte drzim u toj AbstractBaseModel klasi. Bez parametara, metode tipa isRateable() rade savrseno za sve postojece i buduce klase. Ne ponavljam isti kod na 4 mesta vec ga drzim na jednom i samo ga tu menjam. E to je OOP; kad ja izmenim funkcionalnost dodavanjem samo jedne linije koda, na samo jednom mestu. Svaki programer moze da nastavi moj rad.


[Ovu poruku je menjao Goran Rakić dana 16.06.2010. u 01:51 GMT+1]
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
195.252.79.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 12:52 - pre 169 meseci
Citat:
mmix: Pa dotice se donekle. Moji postovi i sluze da vam pokazu koliko je u stvari PHP daleko od koncepta OODa i uopste OOPa kao njegovog instrumenta. Nije mi cilj da omalovazavam PHP ali ni vi bas niste sigurnio sta vam to OOP donosi u PHP sto je tako fundmentalno drugacije i onda se hvatate za pojedinacne aspekte OOPa i promovisete ih iz posledice u uzrok i razlog zasto su vam neophodni. Pocnimo od toga koliko vas serijalizuje PHP objekte i deserijalizuje pri svakom pozivu? Koliko koristite polimorfizam u svojim PHP projektima?Imate li modele z svoje hijerarhije ili je sve onako odokativno ad-hoc?


Svi smo tu da naucimo nesto novo.

Jel ono OOD greska u kucanju ili zaista jeste neka skracenica? Google mi ne vraca nista za PHP OOD.

Sto se tice serializacije: zasto bi neko, ikada, serializovao objekat? Koja je poenta toga?

Polimorfizam: ja ga ne koristim, ne treba mi.

Ovo za modele iz hijerarhije nisam razumeo. Da li mozes da mi malo uprostis pitanje?

Citat:

Nije mi cilj da omalovazavam PHP ali ni vi bas niste sigurnio sta vam to OOP donosi u PHP sto je tako fundmentalno drugacije


Ja znam zasto koristim OOP; radio sam proceduralno ranije (mracna vremena, ne zelim da pricam o tome ) ili koristio polovicni OOP; metode sa brdom parametara ali sam tako morao. Taj isti kod ni ja sad ne bih razumeo, a ne neko ko bi nastavio moj rad.

Sada pisem programe minimum 5 puta brze nego ranije, kod je daleko citljiviji, lako je prosiriv itd. Da, jeste malo sporiji, ali koga jos briga za dodatnih 100-200 ms po pozivu?
 
Odgovor na temu

bondja

Član broj: 10286
Poruke: 167
*.procreditbank.rs.



+3 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 13:22 - pre 169 meseci
Nebavim se PHP-om (Delphi, Java, C#) dodao bih:

OO kod je onaj kod kojeg imate veoma malo (tezi se 0) podataka koji se razmenjuju izmedju objekata.
Dakle sto manje parametara u procedurama, preko kojih bi se podaci razmenjivali.

Ako vec mora da postoji prenos/razmena podataka, onda koristi Design by Contract, Preconditions, Postconditions, tako da zastitite proceduru od poziva sa pogresnim vrednostima parametara.

Btw, favorizovati sadrzavanje naspram nasledjivanja, i na taj nacin obezbediti enkapsulaciju.

Pozdrav!
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 15:58 - pre 169 meseci
@mmix: Glede modeliranja vojnika; to sam i ja radio 6 meseci tamo, i mogu ti reći da ti model apsolutno ne odgovara realnom. U vojsci vojnik se ne predstavlja instancom, već brojem. :)

Citat:
mmix: Pa nekad je tako i bilo, kad je OOP bio nova i hip stvar :)

Treba biti korektan: OOP nikad nije bila nova i hip stvar. Postala je hip tek 10-15 godina nakon što je izmišljena, slično funkcionalnom programiranju.

@iizuzetan: Red je da prvo naučiš terminologiju. Ono što ti zoveš "funkcijsko" programiranje je zapravo imperativno ili struktuirano. Funkcionalno programiranje je nešto sasvim treće, koncept koji se bogu hvala još nije primio među PHP rajom, inače bi bilo ovoliko x2 bisera.

Citat:
bondja: OO kod je onaj kod kojeg imate veoma malo (tezi se 0) podataka koji se razmenjuju izmedju objekata.

I sam poziv metode je razmena podataka između objekata. Iako se donekle slažem da je najbolji kod onaj koji ne postoji, ipak ne bismo trebali da idemo u krajnost.
 
Odgovor na temu

Majestic
Zagreb

Član broj: 2903
Poruke: 117
*.adsl.net.t-com.hr.



+2 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 19:14 - pre 169 meseci
Lijepo vam je @mmx govori al necete ga slusati

Ja ne radim u PHPu nego u C# al cu malo rec neke osnove o OOPu.

OOP koristi sljedece --> naslijedivanje, enkapsulacija (ucahurivanje), polimorfizam (viseoblicje), nadjacavanje (override)
Za pocetak je potrebno shvatiti ove pojmove da bi uopce pricali o OOPu.

Principi:

1) Minimizirati dostupnost članskih varijabli i metoda klase
npr. private string ime;

2) Češće koristiti sadržavanje, manje nasljedivanje

Naslijedivanje:
- ponovno iskorištavanje postojeće funkcionalnosti
- postojeća funkcionalnost se proširuje kako bi se dobila nova
- osnovna klasa - nju se nasljeduje
- sadrži zajedničku funkcionalnost
Loše strane --> Mogući problemi kod učahurivanja (enkapsulacije) - implementacijski detalji osnovne klase vidljivi izvedenoj klasi
- izmjene osnovne klase utječu na izvedenu klasu
Sadrzavanje (agregacija ili kompozicija):
- ponovno iskorištavanje postojeće funkcionalnosti (eng. reuse)
- postojeća funkcionalnost se grupira i koristi u ostvarenju nove funkcionalnosti
- nova funkcionalnost se ostvaruje tako da se dijelovi posla delegiraju sastavnim elementima grupirane funkcionalnosti
Lose strane --> Puno objekata
Sučelja objekata moraju biti dobro definirana kako bi ih se moglo dobro iskoristiti prilikom grupiranja


3) Programirati u odnosu na sučelje, ne implementaciju

Sucelje --> Grupa metoda/svojstava koje klasa implementira
Druge klase znaju da mogu pozvati bilo koju metodu implementiranog sučelja neovisno o klasi koja je implementirala sučelje
Klasa može implementirati po volji mnogo sučelja
Metode sučelja predstavljaju pravi podskup svih metoda koje neka klasa implementira

Implementacija sucelja --> Klasa implementira metode sučelja
Klasa se na taj način obvezuje da će davati usluge (metode) implementiranog sučelja
Korisnici sučelja se ne oslanjaju na konkretne klase već na samo sučelje


4) Open/Closed Principle

- klase bi trebale biti otvorene za proširivanje, a zatvorene za modifikaciju
- trebalo bi težiti dizajnu klasa koji se neće morati mijenjati kada dodu zahtjevi za novom funkcionalnošću
- najbolji način za proširenje sustava je dodavanje nove funkcionalnosti, a ne mijenjanje postojeće funkcionalnosti
- postiže se uz pomoć apstrakcije, polimorfizma, nasljedivanja i sučelja

5) Liskov Substitution Principle

- funkcije koje koriste osnovnu klasu moraju raditi s izvedenim klasama bez da znaju o kojim se točno izvedenim klasama radi

6) Dependency Inversion Principle

- klase više razine ne smiju direktno ovisiti o klasama niže razine već i jedne i druge moraju ovisiti o apstrakcijama
- apstrakcije ne smiju ovisiti o detaljima
- detalji smiju ovisiti o apstrakcijama

7) Interface Segregation Principle

- klase ne bi smjele ovisiti o sučelju kojeg u potpunosti ne koriste

Nisam stavio primjere pa ce neke stvari biti teze shvatit ali ih mozete naci na netu. Ovo su u pricipu osnove OOPa.
Na ovo jos treba dodati oblikovne obrasce (design patterns) + aspektno orijentirano programiranje
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 19:19 - pre 169 meseci
Citat:
mitke013
Sve zajednicke stvari za objekte drzim u toj AbstractBaseModel klasi. Bez parametara, metode tipa isRateable() rade savrseno za sve postojece i buduce klase. Ne ponavljam isti kod na 4 mesta vec ga drzim na jednom i samo ga tu menjam. E to je OOP; kad ja izmenim funkcionalnost dodavanjem samo jedne linije koda, na samo jednom mestu. Svaki programer moze da nastavi moj rad.


Ovo isto postizes ako napises u jednom fajlu jednu funkciju i radis include tog fajla.

Mislim da se pravi oop moze postici kada se na jednoj stranici napravi vise puta isti objekat koji u razlicitim delovima koda dobijaju razlicite parametre i nezavisno i paralelno obavljaju poslove.
Ako na svakoj stranici kreiram objekte koji se ne ponavljaju ili se ponavljaju ali redosledno (kreiraj, odradi, zavrsi, kreiraj, odradi, zavrsi) onda se kod vrlo lako moze svesti na fajl sa skupom funkcija i par globalnih promenljivih.

Tesko je postici pravi OOP u php-u. Kada me neko pita sta je OOP najlakse mu objasnim na primeru excel tabele gde postoji mnostvo polja, redova i kolona i gde polje u zavisnosti od tipa moze da ima donekle razlicite funkcije i osobine i da funkcionise nezavisno od ostalog dela tabele.

Mislim da se OOP programiranje u php-u uglavnom svodi na citiljiviji kod a o samoj primeni OOP mislim da se moze samo delimicno iskoristiti.

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
*.dynamic.isp.telekom.rs.

Sajt: www.dcaric.com


+26 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 20:38 - pre 169 meseci
Citat:
mitke013:
trenutno radim na programu i 5 objekata deli zajednicku metodu isRateable(). Ona treba da vrati true/false u zavisnosti od 3 parametra: stanje $_COOKIE-a, da li je korisnik ulogovan i da li postoji setovan tag rateable(nije bitno sta je).

Ovaj primer gde 5 klasa nasleđuju baznu klasu sa metodom isRateable može da prođe u nekim jednostavnijim slučajevima, dok ćeš u drugim itekako narušiti arhitekturu.
Recimo razvijaš neki sistem gde korisnici mogu da ocenjuju entitete kao što su Audio Fajl, Video Fajl i Tekstualni Fajl unutar neke kategorije. Ali onda imaš uslov da video fajl možeš da oceniš samo ako prethodno nisi ocenio audio fajl. U tom slučaju Video Fajl treba da bude svestan eniteta Audio Fajl da bi implementirao svoj isRateable(), a to nije dobro, zar ne?

Citat:
mitke013:
Evo, ja bas primenjujem taj monaski stil pisanja. Kod mene se objekti nasledjuju ovako:

class User extends BaseUser extends AbstractBaseModel extends Doctrine_Record itd...

Prvo, jako je teško ispratiti takav kod jer trebam da znam šta je u BaseUser, šta je u AbstractBaseModel, šta u Doctrine_Record itd (otvaram i prolazim kroz 5 različitih fajlova).
Pretpostavljam da neka od ovih baznih klasa zna kako sebe da sačuva u bazi. Zanima me samo kako rešavaš transakcijsko čuvanje parent/child objekata.
Recimo imaš enitete Račun i Stavka. Šta se dešava ako neki programer početnik uradi Racun.Stavka[2].Save(), a Račun prethodno nije sačuvan u bazi?
Zanima me samo zbog tih silnih baznih klasa koje nasleđuju jedna drugu.
Znam da je primer nebulozan, ali nagledao sam se svega, pa ako već Stavka ima public metod Save...

[Ovu poruku je menjao Goran Rakić dana 16.06.2010. u 01:56 GMT+1]
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
195.252.79.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.10.05.2010. u 21:10 - pre 169 meseci
Basexxx klasa sadrzi samo definicije za taj objekat npr. imena kolona, pravila za validaciju itd. Nista posebno. Doctrine_Record je deo Doctrine ORM paketa. Tako da bi neko ko nastavi moj program morao samo da pogleda npr. klasu User i klasu AbstractBaseModel da bi dobio API. Ako ce da menja pravila za validaciju, onda samo menja BaseUser.

Citat:

Zanima me samo kako rešavaš transakcijsko čuvanje parent/child objekata.

Doctrine se sam brine da kad snimim neki objekat, automatski se snimaju i child objekti, naravno kroz mysql transakcije. Ako sam bio saban koji pre toga nije pozvao isValid() vec samo udarim save(), bacice mi exception.
PS: Doctrine uvek radi DEEP validaciju, po defaultu. Ko hoce moze da je iskljuci, ali zaista ne vidim razlog tome.


[Ovu poruku je menjao Goran Rakić dana 16.06.2010. u 01:58 GMT+1]
 
Odgovor na temu

[es] :: PHP :: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.

Strane: 1 2 3 4 5 6

[ Pregleda: 27965 | Odgovora: 101 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.