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