• 40 odgovora
  • 10.856 pregleda
Re: Lokalna kopija! 23.08.2003. u 12:24 · pre 282 meseci #21
Citat:
Dragi Tata:
Code:

void DoDrawRect(const Rectangle& theRect);


Beneficija: mala dobit u performansama (nema kopiranja objekta).


Naravno, ko god je malo ozbiljnije kodirao u C++-u ce tu funkciju tako napisati... Tacnije, ko zeli da programira na malo visem nivou. Nista ne bih imao protiv da se prosledi pokazivac na objekat!
Potpis
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
Re: Lokalna kopija! 23.08.2003. u 13:41 · pre 282 meseci #22
Citat:
Dragi Tata:
Zašto mislite da funkcija DoDrawRect treba da bude članica klase?


Sad, pošto su drugi odradili advocacy :) mogu da nastavim da se ježim na knjigu iz edicije * za 21 dan (* ovde čitati kao bilo šta, pa i c++ :) ). DoDrawRect treba da bude članica _neke_ klase koja se bavi crtanjem, dakle ne nužno klase Rectangle, recimo pod firmom da se onda Rectangle može tumačiti na različite načine: kao skup tačaka koje treba spojiti pravim linijama ili kako skup tačaka koje treba koristiti kao vođice za neki spline ili šta već.

Da odgovorim na tvoje pitanje drugim pitanjem: zašto je u datom kodu DoDrawRect van klase, a recimo DrawShape unutar klase? Zašto je odabrao prenošenje po vrednosti sa kopiranjem objekta kada to nije dobar način da se objekat prenese? Zašto je postavio nepostojeću default granu u onaj switch? Da li je napomenuo koji su mogući problemi pri tome?

Čini mi se da je autor proizvoljno rascepkao kod kako bi pokazao nekoliko koncepata; pritom je međutim ilustrovao i par čudnih odluka u vezi sa dizajnom koda. Posmatram i u svetlu onog prethodnog jako čudnog koda sa pamćenjem koordinata, gde ne samo što duplira podatke već i dizajnom klase dozvoljava korisniku da duple podatke izvede iz sinhronizma.

Ako se sećate, pamćene su i koordinate gornje leve i donje desne tačke, kao i četiri vrednosti za krajnje koordinate -- što je prosto suvišno u tom primeru -- a još je dozvolio da se svaka od tih 6 vrednosti posebno zadaje tako da ja mogu, namerno ili nenamerno, da postavim vrednosti koje će mi dati nepostojeći pravougaonik -- a to dobar dizajn nikada neće dozvoliti. Sad, to sa dupliranjem podataka može da bude korisno u slučajevima kada želimo da amortizujemo troškove nekog računanja, recimo kada pri push-u uvećamo brojač elemenata na steku iako se broj elemenata uvek može sračunati prolaskom kroz kontejner koji ga implementira, ali dozvoliti da ispravnom upotrebom objekat može da dođe u neispravno stanje, to već nije kako treba.

Zaključak je da primere iz knjige verovatno treba uzimati sa zrnom soli -- ili da treba promeniti knjigu.

f
Re: Lokalna kopija! 23.08.2003. u 14:29 · pre 282 meseci #23
Dobro sad, pass by value je tu verovatno zato sto su tek u sledecem poglavlju pokazivaci. Pretpostavljam da ce posle da se vrati na primer i da kaze da je bolje sa pokazivacima i da ce na kraju da predje na reference. Odn. nadam se da je tako.

A ova default grana je svakako glupost koju je autor ocigledno prevideo. Mozda je pisao knjigu 21 dan ;)

Citat:

Posmatram i u svetlu onog prethodnog jako čudnog koda sa pamćenjem koordinata, gde ne samo što duplira podatke već i dizajnom klase dozvoljava korisniku da duple podatke izvede iz sinhronizma.


Da, secam se tog primera. I to je bilo iz C++ za 21 dan?

F
Potpis
... and the aliens sent an android down to earth, to slow down mankind's development
... and they named it Bill Gates.
Re: Lokalna kopija! 23.08.2003. u 15:49 · pre 282 meseci #24
Sve sto je receno (meni; a i dosta ostalog) je understood.

Hvala brchi i filmilu (ali i ostalim ucesnicima u diskusiji, jer su se mogli cuti razliciti, zanimljivi stavovi).

Sto se tice kvaliteta knjige; i sam sam malo ustuknuo pred njenim naslovom prilikom kupovine (delim filmilovo misljenje o takvim naslovima), ali sam je na kraju (paradoxalno) verovatno zbog njega i kupio, ocekujuci da cu tako u razmerno kratkom roku ovladati nekim bazicnim konceptima C++ i OO, obzirom da ne nameravam da se na tome zaustavim.

Kakva je da je, sad sa pola puta nema nazad. Uostalom to je jedna od samo 2 (opseznije) prevedene knjige koje su na raspolaganju. (Mislim da je na pocetnickom nivou (gde je za razumevanje osnovnih koncepata vazan svaki zarez), bolje da knjiga bude prevedena, osim ako se pocetnik ne sluzi engleskim jezikom kao maternjim.)

However, nadam se da ce posluziti za upoznavanje sa C++ i OO, a za posle cemo da vidimo.
Postoji pri tom (ocigledno) i opasnost pogresnog usmerenja, ali tu se eto uzdam u Vase sugestije, koje su mi i do sada bile od velike pomoci.


Pozdrav
Re: Lokalna kopija! 23.08.2003. u 18:50 · pre 282 meseci #25
Elem, nisam znao da su Scott Meyers i Herb Sutter nikakvi autoriteti za programera kao što je Leka. Moraćemo da predložimo Bjarnetu da ih izbaci iz komisije za standardizaciju C++a i da umesto njih ubaci Leku :)

Uglavnom, poenta je sledeća: za razliku od nekih drugih programskih jezika, u C++u nije obavezno, pa čak ni poželjno trpati svu funkcionalnost u klase. Postoje neka "kruta pravila":

- virtuelne funkcije su uvek članice
- unarni operatori su uvek članovi
- binarni operatori ne treba nikad da budu članovi (mada sintaksa to omogućava)
- funkcije kojima je neophodan pristup podacima članicama (očigledno) moraju da budu članice.

Van toga, sve je stvar procene (ne "ukusa"). Šta vodi kodu koji je lakši za održavanje, proširivanje, razumevanje?

Recimo, ako se javi potreba da uvedemo neku operaciju nad objektima klasa A i B. Da li ćemo tu operaciju staviti u klasu A, u klasu B, da li ćemo napraviti neku treću klasu (medijator) C ili ćemo jednostavno da napišemo funkciju ne-članicu? Zavisi od procene i konkretnih okolnosti. Ali ne od ukusa. Pitanje ukusa je npr, gde stavljate vitičaste zagrade i da li koristite tabove ili spejsove za identaciju. Odluka da li se neka operacija implementira kao članica ili ne može imati posledice na kvalitet dizajna, a samim tim i na troškove proširivanja/menjanja/održavanja koda, a to više nije stvar "ukusa".
Potpis
IOCC
Re: Lokalna kopija! 23.08.2003. u 18:58 · pre 282 meseci #26
Citat:
brcha:
Apsolutno nema nikakve razlike da li se koristi referenca ili se poziva funkcija clanica. ...


Da ne bismo skretali priču na optimizaciju, samo da napomenem da sam performanse pomenuo u kontekstu slučajeva kad je funkcija ne-članica (prosleđivanje po vrednosti vs po referenci), a da nisam uopšte razmatrao slučaj kad je funkcija članica.
Potpis
IOCC
Re: Lokalna kopija! 23.08.2003. u 19:04 · pre 282 meseci #27
Citat:
filmil:

Da odgovorim na tvoje pitanje drugim pitanjem: zašto je u datom kodu DoDrawRect van klase, a recimo DrawShape unutar klase? Zašto je odabrao prenošenje po vrednosti sa kopiranjem objekta kada to nije dobar način da se objekat prenese? Zašto je postavio nepostojeću default granu u onaj switch? Da li je napomenuo koji su mogući problemi pri tome?



Ako želiš da kažeš da je primer fundamentalno loše odrađen, tu ćemo da se složimo. Rasprava je samo oko toga da li bi guranje te funkcije u (bilo koju) klasu unapredilo dizajn.
Potpis
IOCC
Re: Lokalna kopija! 23.08.2003. u 19:09 · pre 282 meseci #28
Citat:
Dragi Tata:
- virtuelne funkcije su uvek članice
- unarni operatori su uvek članovi
- binarni operatori ne treba nikad da budu članovi (mada sintaksa to omogućava)
- funkcije kojima je neophodan pristup podacima članicama (očigledno) moraju da budu članice.

Van toga, sve je stvar procene (ne "ukusa"). Šta vodi kodu koji je lakši za održavanje, proširivanje, razumevanje?


Ok, slazem se, "ukus" je malo glupa rec. Ja sam pod "ukusom" i "osecajem" podrazumevao procenu.

Sto se tice binarnih operatora, oni se mnogo logicnije i lepse pisu kao friend funkcije nego kao clanice. Usput, slazem se sa pravilima.
Potpis
... and the aliens sent an android down to earth, to slow down mankind's development
... and they named it Bill Gates.
Re: Lokalna kopija! 23.08.2003. u 19:10 · pre 282 meseci #29
Citat:
Dragi Tata:
Citat:
brcha:
Apsolutno nema nikakve razlike da li se koristi referenca ili se poziva funkcija clanica. ...


Da ne bismo skretali priču na optimizaciju, samo da napomenem da sam performanse pomenuo u kontekstu slučajeva kad je funkcija ne-članica (prosleđivanje po vrednosti vs po referenci), a da nisam uopšte razmatrao slučaj kad je funkcija članica.


Ok, jasno je da pass by value ovde ne valja. A i ona moja "optimizacija" nema bas mnogo smisla jer par clktckova vise ili manje ne cini prolece
Potpis
... and the aliens sent an android down to earth, to slow down mankind's development
... and they named it Bill Gates.
Re: Lokalna kopija! 23.08.2003. u 19:18 · pre 282 meseci #30
Citat:
brcha:
Ok, slazem se, "ukus" je malo glupa rec. Ja sam pod "ukusom" i "osecajem" podrazumevao procenu.


Interesantno je da upravo čika Bjarne govori o dizajnu programa koristeći iste termine: practice, patience, taste. Ne bih baš da se zaletim u parafraziranju, ali ono čega se sećam (i ako ima interesovanja pokušaću da pronađem i iscitiram) da je o dizajnu programa govorio u krajnje subjektivnim kategorijama poput gore pomenutih.

f
Re: Lokalna kopija! 23.08.2003. u 19:29 · pre 282 meseci #31
Citat:
filmil:
Interesantno je da upravo čika Bjarne govori o dizajnu programa koristeći iste termine: practice, patience, taste. Ne bih baš da se zaletim u parafraziranju, ali ono čega se sećam (i ako ima interesovanja pokušaću da pronađem i iscitiram) da je o dizajnu programa govorio u krajnje subjektivnim kategorijama poput gore pomenutih.


Da, ali rec "ukus" moze pogresno da se shvati. A ta procena ne moze da bude nesubjektivna jer ne moze da postoji tacan algoritam procenjivanja. Odnosno, procena je stvar znanja, iskustva, osecaja i ukusa.

Ajde, ako nadjes link, posalji ga.
Potpis
... and the aliens sent an android down to earth, to slow down mankind's development
... and they named it Bill Gates.
Re: Lokalna kopija! 23.08.2003. u 19:51 · pre 282 meseci #32
Citat:
brcha:
Ajde, ako nadjes link, posalji ga.


U pitanju je odlomak knjige C++ programming language, tako da ću morati da sačekam da se otvori biblioteka... :)

f
Re: Lokalna kopija! 23.08.2003. u 19:55 · pre 282 meseci #33
Hajde da odstupim još mao pa da dopustim da u nekim slučajevima izbor dizajna može i da bude stvar ukusa. Međutim, ako zbog "ukusa" dobijemo klase kao što je gorepomenuta CWnd, onda smo napravili grešku koja može da košta $$$$, a onda možemo da popijemo otkaz i onda se priča o ukusu završava.

Uglavnom, nadam se da više niko ne smatra da su funkcije ne-članice apriori greška u dizajnu.
Potpis
IOCC
Re: Lokalna kopija! 24.08.2003. u 15:59 · pre 282 meseci #34
Citat:
Dragi Tata:
Elem, nisam znao da su Scott Meyers i Herb Sutter nikakvi autoriteti za programera kao što je Leka. Moraćemo da predložimo Bjarnetu da ih izbaci iz komisije za standardizaciju C++a i da umesto njih ubaci Leku :)


Nemanja, shvati da se prosto nasa misljenja ne poklapaju i zivi sa tim. :) Smatram da je "dobra programerska" praksa individualna stvar, za razliku od tebe i tebi slicnih koji mislite da ce Vas neke "face" nauciti dobroj programerskoj praksi.

Zasto mislim da je programerska praksa individualna stvar? - Zato jer programer u svom zivotu moze da radi na razlicitim tipovima projekata. Programer koji celog zivota radi biznis aplikacije ce raditi prema dobro definisanim sablonima. Programer koji mora da radi na malo visem nivou, a licno je programer nizeg nivoa ce u nekim svojim projektima koji su po pravilu nizeg nivoa da koristi raznorazne precice, cake kojih se C++ programeri klone, a samim tim ih kasnije cak i ne "kapiraju". Nije ni cudo da nekad naidjem na C++ programera koji se totalno izgubi u C++ kodu koji je napisao C programer. I ko ce meni da da za pravo kada kazem "e to ne treba da se radi tako, vec to uradi ovako?" ? Ja prosto smatram da cak ni Bjarne nema, niti sme da ima, tu moc. - Dok kod radi posao za koji je napisan, sve je okej.

Znam, znam, pocece se prica o tome "a koliko vremena treba nekom drugom programeru koji slucajno treba da nastavi tu gde je prethodni stao?"... Za razliku od drugih kojima ovo mozda ne pada na pamet, ja bih rekao prosto da taj drugi programer nije dostigao nivo prvog programera - jer razmislja sablonski. Cak stavise, otisao bih u krajnost i rekao da su takvi programeri malo "brainwashed"...
Potpis
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
Re: Lokalna kopija! 24.08.2003. u 17:56 · pre 282 meseci #35
Lepo, svi imamo svoje mišljenje.

Setih se jedne izreke koja u prevodu glasi "Razlika između Boga i C++ programera je ta što Bog zna da nije C++ programer" :)
Potpis
IOCC
Re: Lokalna kopija! 24.08.2003. u 21:13 · pre 282 meseci #36
Nisam mogao da odolim

Citat:

This joke was told at a Yourdon seminar by Julian L. Morgan.

Question: What is the difference between an object methodologist and a terrorist?
Answer: You can negotiate with the terrorist.

Re: Lokalna kopija! 25.08.2003. u 04:22 · pre 282 meseci #37
Citat:
leka:
Znam, znam, pocece se prica o tome "a koliko vremena treba nekom drugom programeru koji slucajno treba da nastavi tu gde je prethodni stao?"... Za razliku od drugih kojima ovo mozda ne pada na pamet, ja bih rekao prosto da taj drugi programer nije dostigao nivo prvog programera - jer razmislja sablonski. Cak stavise, otisao bih u krajnost i rekao da su takvi programeri malo "brainwashed"...


Leko, ne mogu da se složim sa tobom. Da bih ja koristio Qt, ne moram da radim u Trolltech-u, već samo moram da znam kako da ga iskoristim za svoje potrebe. Znači, uopšte ne zalazim u to koliko ja (ili bilo ko drugi) znam o C-u i C++-u ili o bilo kom jeziku, već pričam samo o tom nastavljanju programiranja. Jedna od, po meni, najznačajnijih karakteristika OO programiranja je to što mogu i moram objekat da gledam kao BlackBox. Odn. uopšte me ne zanima šta se dešava u objektu, dokle god on putem svojih metoda izvršava ono što mu je rečeno. To omogućava da bez ikakvog znanja o strukturi neke biblioteke mogu da je iskoristim. Ne kažem da poznavanje unutrašnje strukture objekata škodi, ali ne sme da bude presudno u korišćenju objekta. Ovo sve se ne odnosi samo na OO programiranje, nego na mnogo još štošta iz realnog sveta!

Pozdrav
F
Potpis
... and the aliens sent an android down to earth, to slow down mankind's development
... and they named it Bill Gates.
Re: Lokalna kopija! 27.08.2003. u 11:47 · pre 281 meseci #38

Citat:

[ ... ] there can be no cookbook method for creating good software. Detailed "how-to" descriptions can exist for specific well-understood kinds of applications but not for more general application areas. There is no substitute for intelligence, experience and taste in programming.


Bjarne Stroustrup, "The C++ Programming language", second edition, pp 362, section 11.1, Addison-Wesley Longman, ISBN 0-201-53992-6
Re: Lokalna kopija! 28.08.2003. u 18:33 · pre 281 meseci #39
I na kraju se vracamo na ono sto pricam od pocetka, a to je da je dizajn programa in the real world jedna neegzaktna i subjektivna stvar. Neke opste principe je naravno moguce formalizovati, ali na kraju sve je to stvar ukusa, koji se izmedju ostalog formira i iskustvom.
Re: Lokalna kopija! 28.08.2003. u 19:54 · pre 281 meseci #40
Opet se ne slažem. Kvalitet dizajna se da lako "izmeriti" količinom vremena (novca) potrošenim za održavanje (proširivanje) sistema. Prošle godine sam imao prilike da krpim neki RPC sistem koji je naš tadašnji "guru" (otpušten u međuvremenu) sklepao - otišlo je skoro pola godine dok ga nisam očistio od bagova. Tip je koristio gomilu nekih globalnih promenljivih u višenitnom okruženju - recept za propast. Da je malo manje sledio svoj ukus, a više čitao o dizajnu višenitnih aplikacija, nikad ne bismo došli u tu situaciju.

Programiranje (u širem smislu te reči) nije umetnost, već inženjerska disciplina kao i svaka druga.
Potpis
IOCC
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme