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

OOP - principi programiranja

[es] :: PHP :: OOP - principi programiranja

Strane: 1 2

[ Pregleda: 7803 | Odgovora: 34 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

krksi
PHP Developer
Beograd

Član broj: 281484
Poruke: 22
95.180.40.*



Profil

icon Re: OOP - principi programiranja14.03.2011. u 05:58 - pre 124 meseci
Cekajte bre ljudi, pa nema razloga za ljutnju, ovde smo da razmenimo misljenja a ne da se prepucavamo. Svako ima svoje, i to svi moramo da postujemo, ali nekad nije lose cuti ni drugo, jer tu uvek ima prostora za dalji napredak.

Posto mitke voli primere, vraticu se na primer vrlo brzo, nego pre toga da razjasnim nesto, posto vidim da sam lose shvacen.

Citat:

Ti si se slozio sa krksijem koji je rekao:

Citat:
Tacno je da se broj klasa drasticno povecava, ali zato kasnije mnogo manje imas problema sa izmenama.

Vidis kontradiktornost?


Objasnjenje: imas jednu klasu koja ima kilometarski kod. Ona radi sve i svasta, tj obavlja vise zadataka. Sta se desava ako tebi treba samo deo koda iz te klase, recimo za neku obradu, kako ces da ga iskoristis? Odgovor: nikako. Zar nije bolje tu klasu razbiti na manje, recimo 5-6 klasa i svakoj dodeliti neku odgovornost. Te manja klasa mozes ponovo da upotrebljavas ako ti zatreba neka funkcionalnost koja je u njima. Lako mozes i da ih menjas, jer su ne zavisne medjusobom. Eto, u ovoj situaciji si dobaio 5-6 puta vise klasa nego ranije, ali barem ti se kod nece ponavljati i neces morati da radis copy-paste. (Ovo je samo jedan od mnogo primera zasto klasa treba razdvajati i to da to nije skup bespotrebnih klasa i da se tako sistem ne pretrpava)

a sada idemo na primere:

Citat:

Ponovicu se: najlakse je dodavati i dodavati i dodavati... I lako je prepisivati definije sa neta; sve ovo sam ja vec procitao ranije, zaista nema potrebe da radis copy&paste. Nisam najpametniji na svetu, to je sigurno, ali dok ne vidim na prakticnom primeru da je nesto bolje od toga kako radim, necu koristiti. A moji uslovi su jednostavni: API da bude sto manji, da izmena bude sto laksa, da klasa bude sto manje jer necu dupliranje funkcionalnosti... Nisam zahtevan, zaista. Na primeru, molim te.


posto mislis da samo prepisujemo sa definicije sa neta, a nema primera iz prakse evo i njih:

prvo. nisi uradio ono sto sam te pitao u vezi sa datumima. Kako mislis da na svakom razicitom mestu pikazes razlicit datum formatiranja ?
To je primer iz tvoje prakse, a ja sam samo korisnik koje je to trazio da uradis. Zanima me resenje tvog problema jer vidim da ti je formata datuma kruto vezan.

Code (php):

public function getCreatedAt()
          {    
               $date = new DateTime($this->created_at);
               return $date->format(Settings::getInstance()->getDateFormat()) ;
          }
 


samo molim te, nemoj ponovo da mi odgovotis da se to nece nikad desiti, nego me samo zanima kako bi ti to najbezbolnije resio.

drugo.
Citat:
Interno; Song poziva getID3 paket. Mozda ce jednog dana koristiti getID4-turbo-mega-ultra paket, nije nimalo bitno jer ja i dalje menjam samo jednu jedinu metodu. Ne dodajem nista, ne menjam kontrolere, ne menjam druge modele.


a sta ako ti korisnik zahteva da u zavisnosti od toga da li ljudi uploaduju pesmu is Srbije ili ostatka sveta koristis getID3 ili getID4 ? Recimo, ako je korisnik iz Srbije, da se koristi getID3, a ako nije, onda getID4.
p.s. Mozda sam malo dao glup razlog, ali ne ulazi u to, samo me zanima kako bi resio to, posto si se i ovde "kruto" vezao za odredjeni paket?
i ovde odgovor "to se nikad nece desiti" je ne prihvatljiv, jednostavno me zanima tvoje misljenje :)


trece.
Navescu ti problem koji sam ja imao u praksi. Naime, stvari stoje ovako: Postoji klasa automobil koja ima svoju cenu i njen izgled je ovakav:

Code (php):

class Automobil{
       
        private $cena;
       
        public function getCena(){
            return $this->cena;
        }
    }
 


ovo sam takodje resavao, da ne mislis da ima neke veze sa prethodnim primerom gde se pominju brisaci i akumulator :)
naravno, klasa nije bas izgledala ovako, bilo je tu jos dosta atributa i drugih stvari, ali ja sam samo zeleo da pojednostavim sve to i da prikazem problem.

e sad, kasnije sam dobio zahtev da taj automobil moze da se "nabudzi" alarmom. Korisnik ima mogucnost da vidi cenu samo automobila, a takodje moze da vidi cenu automobila sa alarmom (znaci zbir obe). To mu treba omoguciti. U ovom primeru, on moze da dobije samo cenu automobila. Kako bi ovo resio ?

 
Odgovor na temu

krksi
PHP Developer
Beograd

Član broj: 281484
Poruke: 22
95.180.40.*



Profil

icon Re: OOP - principi programiranja14.03.2011. u 06:40 - pre 124 meseci
a da, zaboravio nesto da pitam _korso_-a:

predlozio si onaj link sa knjigama o DDD. Tamo vidim dve zanimljive sa zanimljivim naslovima

Domain-Driven Design
Tackling Complexity in the Heart of Software
by Eric Evans

Applying Domain-Driven Design and Patterns
by Jimmy Nilsson

pa me zanima tvoje misljenje kakve su? (mislim ako si ih preporucio verujem da su ok, nego koja je po tebi bolja :) )
nisam procitao ni jednu ni drugu, pa zato pitam.
 
Odgovor na temu

_korso_

Član broj: 82797
Poruke: 163
*.adsl-a-4.sezampro.rs.



+1 Profil

icon Re: OOP - principi programiranja14.03.2011. u 07:57 - pre 124 meseci
Citat:
krksi:
predlozio si onaj link sa knjigama o DDD. Tamo vidim dve zanimljive sa zanimljivim naslovima

Domain-Driven Design
Tackling Complexity in the Heart of Software
by Eric Evans

Applying Domain-Driven Design and Patterns
by Jimmy Nilsson

pa me zanima tvoje misljenje kakve su? (mislim ako si ih preporucio verujem da su ok, nego koja je po tebi bolja :) )
nisam procitao ni jednu ni drugu, pa zato pitam.

Ovu od Eric Evansa sam procitao 65% i citam je kada imam vremena. Knjiga nije bas laka za "svariti". Takodje skoro da i nema primera samog koda. Ima UML-a i tako neku custom skicu.
Inace kada prodres u sustinu, knjiga stvarno vredi. Pisana je vrlo jasnim jezikom, barem meni, ali u nekim trenucima je tesko pohvatati neke stvari.
Jednostavno takva je materija.
Zadnjih 40% su i najkomplesniji. I jos nesto, knjiga bi trebalo da se cita bez preskakanja, kao roman. Tako da moja preporuka definitiivno - vredi svakog procitanog slova :)
Drugu nisam citao, ona je bogatija primerima u C#, cini mi se.

Dakle kako je Eric Evans, prakticno otac DDD, imas moju preporuku za njegovu knjigu.

Imas ovde njegove prezentacije na istu temu.
http://www.infoq.com/presentations/strategic-design-evans
U komentarima na ovom linku imas i drugi deo.

Inace ovde imas i skracenu verziju knjige http://www.infoq.com/minibooks/domain-driven-design-quickly. Mada ne bih preporucio jer samo su skracivanjem dobili na tome da se sam koncept razume jos teze.

Kako sam negde procitao ovu knjigu smatraju biblijom pravog OOPa :) Tako bar kazu drugi.
Nadam se da sam bio od pomoci.
 
Odgovor na temu

krksi
PHP Developer
Beograd

Član broj: 281484
Poruke: 22
95.180.40.*



Profil

icon Re: OOP - principi programiranja14.03.2011. u 08:26 - pre 124 meseci
Da da, jesi i te kako :)
Procitacu i ja tu knjigu kada budem malo uhvatio vremena.
U svakom slucaju hvala za savete i linkove :)
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.dynamic.sbb.rs.



+395 Profil

icon Re: OOP - principi programiranja14.03.2011. u 08:53 - pre 124 meseci
Citat:

Ako sam dobro razumeo; 'neka' klasa (nije vazno koja) treba da isparsira .ini fajl, posalje je Settings-u, a ona zatim vraca te parsovane vrednosti? Zar ne vidis koliko je to suvisnog koda za obicnu konfiguraciju?
Citat:
Eventualno da imas factory za SettingsIni, SettingsDB ... koji imaju u pozadini neku abstract klasu Settings.

Settings klasa nasledjuje BaseIni klasu. Ako hocu da jednog dana to bude .txt file, napravicu novu BaseTxt klasu, Settings ce nju da nasledjuje a ceo API ostaje isti. Poenta: ako hocu da izmenim nacin kako Settings radi, izmenicu samo settings.


IMHO , pogresan pristup.
Poenta je da Settings ostane settings i da nista ne menjas .
Njega ni ne treba da interesuje odakle su podaci dosli vec samo da daje vrednosti.
Ako hoces citanje configa iz txt-a ili baze pravis klase koje se samo tim bave : citaju parsiraju i prosledjuju vrednosti dalje.
kao sto ti je i _korzo_ pomenuo a to je fokusirati klasu da se bavim jednim zadatkom ili jednom vrstom zadatka ,
i menjati je onda kada se eventualno taj zadatak iz korena promeni .

Mozda malo vise koda u startu ali na duze staze lakse odrzavanje dodavanje samo novih klasa/implementacija kroz postojecu arhtekturu.

Ti si navikao na neke sablone u svojim projektima koje radis i to je ok (keep it simple & straightforward ) i naravno ne odstupas od njih (a i sto bi ? :)
ne "komplikujes kod " ni milimetar tamo gde ne treba , ali to nije pravi OOP koji uporno proklamujes silnim nasledjivanjem
i metodama bez parametra praveci tako monolitne i autonomne klase/objekte koje ne poznaju spoljni svet,
jer objekti medjusobno komuniciraju i medjusobno mogu da budu manje ili vise zavisni kroz svoje parametre metoda ili clanice promenljive .







Viva lollapalooza
 
Odgovor na temu

VladaSu

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



+213 Profil

icon Re: OOP - principi programiranja14.03.2011. u 17:14 - pre 124 meseci
U potpunosti se slazem @deerbeer
Vidim da ovde navodite da akumulator ne treba da bude svestan brisaca i da tako treba programirati OOP.
Brisaci trebaju da budu svesni akumulatora i struje koju akumulator daje, a opet akumulator treba da bude svestan brisaca kao potrosaca da bi znao kada ce se potrositi i koliko potrosaca na njemu
je prikacano da bi znao da li ce da crkne. Uostalom sta je akumulator bez brisaca i sta su brisaci bez akumulatora? Nista.

Kod OOP kao sto @deerbeer kaze objekti mogu a najcesce i moraju da budu svesni spoljnog sveta. Dobro receno, spoljnog sveta.

OOP ne znaci kreiranje objekata koji ne zavise od drugih objekata. OOP ne znace metode bez parametara i nasledjivanje. Ovako nesto nikada nigde nisam ni video ni procitao sem ovde na forumu.

Ako je covek objekat onda su njegova visina i kilaza varijable u okviru klase.
Ako covek trci uz vetar onda brzina vetra nikako ne moze biti promenljiva u okviru klase covek vec moze biti samo parametar metode BrzinaTrcanja.

Takodje nema sanse da kada pisem nesto Settings:: da uvek pisem i getInstance...


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

krksi
PHP Developer
Beograd

Član broj: 281484
Poruke: 22
95.180.40.*



Profil

icon Re: OOP - principi programiranja14.03.2011. u 19:32 - pre 124 meseci
@VladaSu
Hm, moram da priznam da si me malo zbunio :)
Slazes se u razmiljanju sa deerbeer-om a konstatno govoris suprotno od njega, cak sta vise, tvoje razmisljanje i nema dodirnih tacaka sa njegovim. Mada, postoji mogucnost da te i ja nisam dobro razumeo, ali ipak mislim da jesam.
 
Odgovor na temu

Miroslav Ćurčić
ex mVeliki
Novi Sad

Član broj: 19034
Poruke: 1118
*.dynamic.isp.telekom.rs.



+19 Profil

icon Re: OOP - principi programiranja14.03.2011. u 20:29 - pre 124 meseci
Moram da priznam da su ove OOP diskusije (prepucavanja) Mitketa, Gorana, korsa, krksija i ekipe verovatno najkvalitetnije PHP teme u poslednje vreme.

Razmena iskustava advanced developera je NEPROCENJIV izvor znanja, i početnicima i naprednijim programerima.

Ako je neko od vas naleteo na konkretan, zanimljiv, problem i našao najbolji način da ga reši, i ima volje da to iskustvo podeli s ostalima, treba mu biti zahvalan na tom trudu.

Meni lično nikad nije bio problem da promenim svoj stav o nečemu ako mi neko argumentovano dokaže da sam grešio, a ako ne uspe uvek sam odgovarao "više sreće sledeći put" jer možda je čovek u pravu ali ne ume da objasni.

Na žalost ove teme često odu na stranputicu "čiji je veći", neumesno zaključujući "ti se tvrdoglavo držiš....".

Pozivam vas da malo smirite strasti. Naravno da će onaj ko iznosi svoje iskustvo biti izložen analizi, i naravno da će da ga brani, ali to mora razložno i bez emocija.

Kao najčešći razlog za razvodnjavanje diskusije nalazim u pokušaju da prenesete više iskustava od jednom, gde prvo jedan korisnik napadne jednu stvar, pa se ubaci drugi za drugu stvar itd. Ova tema kako je naslovljena, je previše uopštena. Ako ćemo diskutovati o singletonu pokrenite zasebnu temu, ako neko ima stav o DI, nasleđivanju,... nek pokrenu zasebnu temu jer ovako prerasta u gomilu načetih i nedovršenih diskusija. Evo ja ću sad pokrenuti jednu konkretnu temu.

"The quieter you become, the more you are able to hear."
Blog | PowerCMS
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
..178.212.adsl.dyn.beotel.net.

Sajt: norway.dakipro.com


+190 Profil

icon Re: OOP - principi programiranja14.03.2011. u 23:46 - pre 124 meseci
E ovo sam hteo i ja da napisem doslovce od reci do reci, i par puta sam poceo da pisem ali tako volje i energije nisam imao da je to cudo jedno.
Hvala Miroslave
 
Odgovor na temu

Jbyn4e

Član broj: 422
Poruke: 6049
*.ptt.rs.



+256 Profil

icon Re: OOP - principi programiranja15.03.2011. u 07:23 - pre 124 meseci
Potpuno se slazem, lepo je napokon videti KVALITETAN dijalog na ES, davno ga nije bilo.

Mitke, nemoj prestati, zanimljivo je cuti "pro et contra" dijalog, zasto nesto da ili ne. Ono sto mi je posebno zanimljivo da su clanovi koji su se ukljucili u raspravu sa vrlo malo poruka na ES, i to mi daje nadu u ove forume, koji su vec odavno izgubili mnogo od svog kvaliteta (narocito od uvodjenja madzone-a, razumem ja potrebu za vecim brojem poseta, ali srozavanje je... vise nego ocigledno).

Kad sve ostalo zakaže, pročitaj uputstvo...
 
Odgovor na temu

krksi
PHP Developer
Beograd

Član broj: 281484
Poruke: 22
95.180.40.*



Profil

icon Re: OOP - principi programiranja15.03.2011. u 09:00 - pre 124 meseci
Tako je, ovo ne bi tebalo da dovede do toga da batalimo diskusiju ili jos gore da se izvredjamo.
Mislim da bi svako trebao da da svoje misljenje i da iznese neke cinjenice o njemu (sto mi zapravo i jesmo cinili).
E sad, sto je Mitke na jednoj strani u razmisljanju, a mi na drugoj, nama ne garantuje da smo mi upravu niti da je Mitke pogresio u svom pristupu. Jednostavno, do sada su teorija i praksa bili na nasoj strani, ali to takodje ne znaci da je i to najbolje resenje, mozda on vidi nesto sto mi ne vidimo. Zato i mislim da je jako korisno da se svi ukljucimo u diskusiju i dijalog. Jednostavno, mene zanima kako bi Mitke resio ona tri problema svojim pristupom, ja licno ne vidim resenje, mozda on vidi, i mozda je ono i bolje od DI i LC.

p.s.
Svi su mislili da je Tesla lud iz razloga sto ga niko nije shvatao i mislili su da prica gluposti, medjutim, ispostavilo se da su svi pogresili, a on je bio u pravu.

Zato bih i voleo pored standarnog i opste prihvacenog razmisljanja o DI i LC da cujem i nesto novo, kako to neko "treci" vidi, jer moze da se desi da je i u pravu.
Ukoliko se Mitketovo razmisljanje ispostavi kao ispravno i ukoliko je bolje od do sada utvrdjenih koncepara, vrlo radu cu mu se pridruziti i poceti da radim kao on. Upravo iz tog razloga mislim da svako treba da iznese svoje vidjenje jer uvek moze nesto novo da se nauci (koliko god programer bio (ne)iskusan).
 
Odgovor na temu

VladaSu

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



+213 Profil

icon Re: OOP - principi programiranja15.03.2011. u 11:19 - pre 124 meseci
Citat:
krksi: @VladaSu
Hm, moram da priznam da si me malo zbunio :)
Slazes se u razmiljanju sa deerbeer-om a konstatno govoris suprotno od njega, cak sta vise, tvoje razmisljanje i nema dodirnih tacaka sa njegovim. Mada, postoji mogucnost da te i ja nisam dobro razumeo, ali ipak mislim da jesam.


Ne znam sta je suprotno. Mozda sam trebao da kazem da akumulator treba da bude svestan potrosaca a ne brisaca, a da li je taj potrosac brisac ili nesto drugo to nije bitno.
Vec sam negde naveo kako ja vidim OOP.
.....
Objektno programiranje znaci da mozes da kreiras x objekata istovremeno koji ce se u zavisnosti od spoljasnjih uslova ponasati drugacije.

Npr pravis igricu gde imas 8 trkaca na 100 metara. Svakom zadas pocetne parametre: brzinu, ubrzanje, kilazu, varijacije tempa trcana, zavisnost od vremenskih uslova,
bioritam itd. Mozes da zadas x parametara svakom sprinteru. Kada trka pocne svaki sprinter ce se drugacije ponasati u zavisnosti od pocetnih parametara.
Ti te parametre mozes da menjas u realnom vremenu u zavisnosti od pocetnih i trenutnih spoljasnjih parametara.
Ovo znaci da ti imas 8 objekata.

Mozes da izvedes od klase Sprinter dve nove klase Men_Sprinter i Women_Sprinter gde ces imati jos koji razliciti parametar ili cak
mozes da uradis override neke funkcije jer ce recimo zene drugacije reagovati na hladnije vreme a muski drugacije na toplije vreme.
Ako imas samo jednog trkaca i gde je svejedno da li je musko ili zensko onda isto to mozes da napises u procedurama.

A ako ti je i sam stadion odnoso staza za trcanje neki objekat sa svojim parametrima onda objekti Sprinter mogu medjusobno da menjaju parametre jedni drugima.
Tipa Sprinter A utice negetivno na Sprintera B, Sprinter C losije trci ako u startu nije medju prva 3 Sprintera itd....
Staza moze da ima svoje parametri: nadmorsku visinu, vremensku zonu, vlaznost vazduha itd, sto opet moze da utice na Sprinter objekat.
Svaka staza ima svoje parametre, konstantne i promenljive i svaki sprinet ce se na svakoj stazi drugacije ponasati.

Onda Spriner moze da ime interface Covek gde su obavezna parametri kilaza, starost, pol itd. Taj interface moze/mora da ima i sudija i novinar i gledalac na tribinama.


Nije ovo iskljuciva primena ali ovo sa settings je moguce odraditi preko procedura, ali je bolje odraditi preko klase zbog lakseg odrzavanja, tj ako ces ti rasclaniti neki proces
na vise klasa a te klase ce uvek biti jedan te isti objekat onda je to procedura napravljena kroz klase.
Ali ovaj primer sa trkacima nema sanse da se odradi preko procedura.

Negde sam i procitao da je OOP nastao bas zbog ove potrebe jos pre 30-40 godina jer neke stvari nisu bilo moguce napraviti se proceduralno a kao "sporedna pojava"
pojavio se mnogo citljiviji kod, fleksibilniji, laksi za odrzavanje i brzi za pisanje jer je bilo moguce lako koristiti delove koda iz jednog programa u drugom programu.

U temu bi trebao da se ukljuci neki programer koji nije poceo i zavrsio programiranje u php-u jer u nekim drugim jezicima OOP je "opipljiviji".



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

krksi
PHP Developer
Beograd

Član broj: 281484
Poruke: 22
95.180.40.*



Profil

icon Re: OOP - principi programiranja15.03.2011. u 11:58 - pre 124 meseci
@VladaSu

Onda te nisam lepo razumeo

Citat:
Vidim da ovde navodite da akumulator ne treba da bude svestan brisaca i da tako treba programirati OOP.
Brisaci trebaju da budu svesni akumulatora i struje koju akumulator daje, a opet akumulator treba da bude svestan brisaca kao potrosaca da bi znao kada ce se potrositi i koliko potrosaca na njemu
je prikacano da bi znao da li ce da crkne. Uostalom sta je akumulator bez brisaca i sta su brisaci bez akumulatora? Nista.


Ja sam razumeo da hoces da kazes da brisaci i akumulator treba da imaju cvrstu vezu, tj. da akumulator ima referencu na brisac i/ili obratno.
 
Odgovor na temu

VladaSu

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



+213 Profil

icon Re: OOP - principi programiranja15.03.2011. u 12:05 - pre 124 meseci
Ah, ne. Trebaju da imaju relativno cvrstu vezu baterija i potrosac. A aukumulator i brisac da se ne poznaju. Samo sam malo uprostio.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

krksi
PHP Developer
Beograd

Član broj: 281484
Poruke: 22
95.180.40.*



Profil

icon Re: OOP - principi programiranja15.03.2011. u 12:07 - pre 124 meseci
da da, skontao sam sta si hteo da kazes
 
Odgovor na temu

[es] :: PHP :: OOP - principi programiranja

Strane: 1 2

[ Pregleda: 7803 | Odgovora: 34 ] > FB > Twit

Postavi temu Odgovori

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