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

Uopšteno o dizajnu klasa

[es] :: C/C++ programiranje :: C/C++ za početnike :: Uopšteno o dizajnu klasa

[ Pregleda: 3294 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

icobh
Igor Pejašinović
Network Admin
Navigo SC d.o.o.
Banja Luka

Član broj: 18738
Poruke: 1319
*.inecco.net.

Sajt: www.nsc.ba


+4 Profil

icon Uopšteno o dizajnu klasa25.11.2007. u 18:37 - pre 199 meseci
Kao početnik u dizajniranju i programiranju klasa u C++, imam nekoliko nedoumica vezanih za klase uopšteno. Zato sam složio par pitanja na datu temu:

1. Zanima me, kada bih pisao klasu koju bi trebao da čita neki drugi programer, bolji sigurno, kakav bi stil pisanja trebao primjeniti, da bih ostavio pozitivan utisak? Osim standardnog pravila, da ono što ne mora da se i ne piše, da li postoji još nešto, čisto estetske prirode? Ono, da li pisati private ili public na početku? I ako bih prvo pisao private članice klase, da li navoditi ono private ili ne?

2. U čemu se sastoji Idiot Proof zaštita kod klasa? Mislim, vidio sam da se konstruktor kopije može zaobići ukoliko se radi prenos podataka po adresi. Kako to spriječiti i o čemu ostalom treba voditi računa prilikom pisanja klase?

3. Zašto se ovaj code ne može kompajlirati u Dev-C++ sa MinGW kompajlerom? Vidim da je problem konstruktor kopije, no zanima se kako na BCC-u 5.5 prolazi kao od šale a uz to i radi...

P.S. Ako postoji neka tema koja se približno bavi ovim pitanjem, možete me preusmjeriti...
I ♥ ♀

Ovaj post je zlata vrijedan!
Prikačeni fajlovi
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Uopšteno o dizajnu klasa25.11.2007. u 18:52 - pre 199 meseci
Za pocetak pogledaj ove linkove:
http://geosoft.no/development/cppstyle.html
http://geosoft.no/development/cpppractice.html
... i naravno, reference (ostale izvore) koje pominju na kraju dokumenta.

(i imaj u vidu da se na svaku tacku posebno moze diskutovati sa argumentima i za i protiv)

E sad, ako radis u nekom timu na projektu koji je odmakao, mislim da je ipak dobra praksa prihvatiti stil koji je vec aktuelan. Nisam siguran da ce "ispravljanje krive Drine" biti prihvaćeno sa odobravanjem.

P.S.
Na primer, jedna od mojih gresaka (kad sam se prvi put osvrnuo) bilo je totalno razicito imenovanje osobina/metoda u odnosu na ostatak ekipe. Ja na jedan način, svi ostali na drugi :)
 
Odgovor na temu

Nemanja.Ciric
web dizajner/programer, Niteoweb
Novi Sad/Subotica

Član broj: 163398
Poruke: 63
*.ns.ac.yu.

Jabber: serj.cobain@gmail.com


Profil

icon Re: Uopšteno o dizajnu klasa26.11.2007. u 19:24 - pre 199 meseci
Odmah ću da se ogradim i da kažem da sam hobi programer i da opet malo programiram van faksa. Nikada nisam radio za neku firmu, tako da se sve što ti govorim ovde zasniva na komentarima asistenata i profesora na tu temu, ličnom (ograničenom) iskustvu i zdravom razumu.

1. Najbolji utisak ostavlja doslednost :). I komentari. Ako pišeš drugačije od svih ostalih to se još nekako da otrpeti, ali ako nemaš konvencija (sopstvenih ili naučenih) već kapitalizaciju objekata, klasa, metoda i konstanti radiš čas na jedan, čas na drugi način, ako prelom u novi red, korišćenje zagrada tamo gde može i ne mora, i uvlačenje (nazubljivanje) radiš čas ovako čas onako - svi će te mrzeti :). Neće moći da se snađu u tvom kodu nikako, a pitanje je da li ćeš moći i ti! Komentara treba da bude, opet i zbog tebe i zbog ostalih. Ne treba preterivati, ali ponekad je dobro napisati komentar i čak kada je nešto jasno, čisto da kada bi posle nekog vremena se vraćao na taj kod (radi debugovanja, ili upgrade-a) mogao brzo da vidiš šta je pesnik hteo da kaže :). Dakle, bilo kakav dosledan stil i komentari je moj savet.

2. Zašto bi naopako hteo da sprečiš zaobliaženja copy konstruktora i rad pokazivačima/referencama? Ne mogu da zamislim ni jednu situaciju gde bi želeo tako nešto da uradiš, ali ako bi baš želeo, uvek možeš da preklopiš ta dva operatora (* i &). Logika mi govori da kod pisanja klasa treba da obraćaš pažnju na: mogućnost greške (ja oduvek razmišljam u izuzecima - "šta bi bilo kada bi uradio ovo ili ono", ili, "kako da ga zeznem da ne uradi to što treba", ili se barem trudim, pokazalo se kao dobra praksa - recimo dobra praksa je uvek prglasiti operand ili funkciju za konstantne kada to jesu) i efikasnost (što manje redova koda, što jedonstavniji način funkcionisanja, što manje opterećenje resursa (recimo vraćanje vrednosti po referenci kada je to moguće)).

Private ne bih izbacivao ako želim da navodim prvo privatne podatke ili metode. Da, svi mi, ili barem većina, znamo da su podaci i metode podrazumevano privatne u klasi, a javne u struct, ali zar je tako teško napisati sedam znakova? Iz istog razloga preporučujem da se uvek pišu zagrade (recimo kada imaš samo jednu komandu u IF selekciji). Uz to, opet pravilo je da se privatnim proglašava samo ono što eksplicitno želiš da onemogućiš da se nasledi. U svim ostalim slučajevima (kada nasleđivanje date funkcije ili klase ne bi bilo nepoželjno) koristi se kvalifikator protected, iz prostog razloga što nikad ne možeš predvideti šta će se sve raditi sa tvojom klasom.
NĆirić
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.demon.co.uk.



+4 Profil

icon Re: Uopšteno o dizajnu klasa10.12.2007. u 11:04 - pre 199 meseci
Ukratko, nabavi ovu knjigu.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p6-47.bvcom.net.



+1064 Profil

icon Re: Uopšteno o dizajnu klasa21.12.2007. u 10:20 - pre 198 meseci
Citat:
icobh: Kao početnik u dizajniranju i programiranju klasa u C++, imam nekoliko nedoumica vezanih za klase uopšteno. Zato sam složio par pitanja na datu temu:

1. Zanima me, kada bih pisao klasu koju bi trebao da čita neki drugi programer, bolji sigurno, kakav bi stil pisanja trebao primjeniti, da bih ostavio pozitivan utisak? Osim standardnog pravila, da ono što ne mora da se i ne piše, da li postoji još nešto, čisto estetske prirode? Ono, da li pisati private ili public na početku? I ako bih prvo pisao private članice klase, da li navoditi ono private ili ne?


Izaberi neki od code guidelina i sledi. Ionako ako radis u timu ne biras ti nego kako vec ide.
Stil je najmanje bitan.

Citat:

2. U čemu se sastoji Idiot Proof zaštita kod klasa? Mislim, vidio sam da se konstruktor kopije može zaobići ukoliko se radi prenos podataka po adresi. Kako to spriječiti i o čemu ostalom treba voditi računa prilikom pisanja klase?


Tako sto ono ide u private stavljas u private , ono sto ide u public stavljas u public.
Nije mi jasno sta hoces reci sa time da se kopi konstruktor moze zaobici? Kopi se poziva
u odredjenim situacijama, zasto bi zeleo da to bude neophodno i u kom slucaju.Primer?

Citat:


3. Zašto se ovaj code ne može kompajlirati u Dev-C++ sa MinGW kompajlerom? Vidim da je problem konstruktor kopije, no zanima se kako na BCC-u 5.5 prolazi kao od šale a uz to i radi...




E sad dolazi ono glavno.
Koristis getchar i EXIT_SUCCESS makro. Fale ti cstdlib i cstdio headeri.
Kopi konstruktor nema potpis Skup(Skup&); vec Skup(const Skup&);

pa sad malo komentara o tvom programu.
Ukoliko imas jedno od destruktor,assignemnt operator,kopi konstruktor, pravilo je
da implementiras sva tri.
Gledaj da izbegavas da ispisujes poruke u funkcijama gde to nije mesto.
Ako vec moras bolje je da uzmes pokazivac/referencu na ostream
nego da hardkodujes na cout. Razumem da je ovo test program ali bez obzira.
Isto vazi za input.
Shodno tome hendlovanje gresaka odradi tako da f-ja vrati kod greske
ili ako se vec opredelis za exception-e, izbaci isti iz funckije, gde ces
po potrebi istu prikazati proverom return koda ili u catch bloku.
Navikni se da koristis const za parametre funkcija koje ne menjaju vrednost istih.
Isto vazi i za member funckije. Nek one koje ne menjaju vrednost member varijabli budu
i same const.
Funkcija broj_skupova bi trebalo da bude static ili friend zbog toga sto ne pristupa non static
member varijablama.
I na kraju, izbegavaj da komentarises ocigledne stvari.

Pozdrav!
 
Odgovor na temu

icobh
Igor Pejašinović
Network Admin
Navigo SC d.o.o.
Banja Luka

Član broj: 18738
Poruke: 1319
*.inecco.net.

Sajt: www.nsc.ba


+4 Profil

icon Re: Uopšteno o dizajnu klasa21.12.2007. u 13:50 - pre 198 meseci
Sad kad sam već u poodmaklom stadijumu studiranja jezika C++, mislim, ovog kojeg moram, ova moja pitanja mi dođu pomalo smiješna.

No, da kažem šta sam mislio. Prvo pitanje je bilo više šta bi bilo kad bi bilo, jer sam još od pravog posla daleko, mislim ovaj programerski + grupni rad itd...

Za drugo nisam siguran kako je to nama profesor rekao da se konstruktor kopije može izbjeći, uglavnom je nešto bilo tako, a pravo da kažem da nisam ni probao, jer uvijek iskrsne nešto drugo da probam i zaboravim stalno...

Treće sam uspio skontati zašto GCC neće da kompajlira a to je posljednji ISO standard po kome parametar unutar konstruktora kopije mora biti const.

Što se tiče getchar i EXIT_SUCCESS, mislim da nije problem jer rade i bez ovih nabrojanih headera. Komentare sam pisao za jednog kolegu, ali kad čovjek ne razumije, moraš mu malte ne nacrtati. Ali takav je dogovor. Ja njemu pokažem programiranje za 6 on meni predmete vezane za elektroniku i tako to šljaka...
I ♥ ♀

Ovaj post je zlata vrijedan!
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p6-47.bvcom.net.



+1064 Profil

icon Re: Uopšteno o dizajnu klasa21.12.2007. u 18:19 - pre 198 meseci
Citat:
icobh:

Što se tiče getchar i EXIT_SUCCESS, mislim da nije problem jer rade i bez ovih nabrojanih headera.



Znas kako. I Skup(Skup&); ti je radio na jednom kompajleru a na drugom nije.
Ovo dolazi iz tih c headera, sta ti garantuje da ce bas svaki kompajler vuci te headere
iz iostream?

Pozdrav!
 
Odgovor na temu

1jedini
Dejan Milosavljevic
BG

Član broj: 102721
Poruke: 74
*.cpe.vektor.net.



Profil

icon Re: Uopšteno o dizajnu klasa22.12.2007. u 10:26 - pre 198 meseci
Prema 12.1-10 a posebno 12.8-2 Skup( Skup& ) JESTE kopirajuci konstruktor ( copy constructor ).
AKA DDMM
 
Odgovor na temu

icobh
Igor Pejašinović
Network Admin
Navigo SC d.o.o.
Banja Luka

Član broj: 18738
Poruke: 1319
*.inecco.net.

Sajt: www.nsc.ba


+4 Profil

icon Re: Uopšteno o dizajnu klasa22.12.2007. u 11:53 - pre 198 meseci
Code:
12.1 - 8
A copy constructor for a class X is a constructor with a first parameter of type X& or of type const  X&.

Što znači da su oba slučaja tačna predstavljaju konstruktor kopije... Zanimljivo. Kad ja programiram za sebe, ja se držim onog: Što ne mora, to se i ne piše. Ali zapnem ovako sa GCC-om, u prvom trenutku ne znam gdje griješim. Znam, na BCC-u radi a ne GCC-u neće.
I ♥ ♀

Ovaj post je zlata vrijedan!
 
Odgovor na temu

Sephiroth?
Balkan @ net

Član broj: 79406
Poruke: 82
*.bi2.dlp247.bih.net.ba.



Profil

icon Re: Uopšteno o dizajnu klasa22.12.2007. u 12:16 - pre 198 meseci
Kad bi se svi compileri pridrzavali standarda ne bi bilo ovakvih pitanja :) Pokusavaj stavljati const na svako mjesto gdje si siguran da se nece mijenjati nista, samo ces omoguciti compileru da ti olaksa debugging.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p3-82.bvcom.net.



+1064 Profil

icon Re: Uopšteno o dizajnu klasa22.12.2007. u 20:37 - pre 198 meseci
Citat:
icobh:
Code:
12.1 - 8
A copy constructor for a class X is a constructor with a first parameter of type X& or of type const  X&.

Što znači da su oba slučaja tačna predstavljaju konstruktor kopije... Zanimljivo. Kad ja programiram za sebe, ja se držim onog: Što ne mora, to se i ne piše. Ali zapnem ovako sa GCC-om, u prvom trenutku ne znam gdje griješim. Znam, na BCC-u radi a ne GCC-u neće.


Nisam znao za ovo ;) U praksi nikada nisam video kopi konstruktor sa non const parametrom.
Problem je u tome sto temporary ne mozes bindovati na non const referencu.
Dakle, problem je u ovakvim recenicama: Skup tmp = a.unija(b);
a.unija(b) vraca temporary koji ulazi kao parametar za kopi konstruktor koji ima non const
referencu i tu je standardni kompajler duzan da javi gresku.
Samo sto u tvom primeru nemas nista slicno, pa mi sad uopste nije jasno zasto se kompajler
buni.

Pozdrav!




[Ovu poruku je menjao Branimir Maksimovic dana 22.12.2007. u 22:12 GMT+1]
 
Odgovor na temu

icobh
Igor Pejašinović
Network Admin
Navigo SC d.o.o.
Banja Luka

Član broj: 18738
Poruke: 1319
*.inecco.net.

Sajt: www.nsc.ba


+4 Profil

icon Re: Uopšteno o dizajnu klasa22.12.2007. u 23:16 - pre 198 meseci
^Nisam ni ja znao. Tek na preporuku od 1jedini, pogledao sam ova poglavlja u famoznom ANSI C++-u.
I ♥ ♀

Ovaj post je zlata vrijedan!
 
Odgovor na temu

Časlav Ilić
Braunšvajg, Nemačka

Član broj: 4945
Poruke: 565
*.pool.mediaWays.net.



+27 Profil

icon Re: Uopšteno o dizajnu klasa23.12.2007. u 10:30 - pre 198 meseci
Ako je klasa bibliotečka, ili se prosto puno koda oslanja na nju, obično treba da ima tačno jedan privatni član: d-pokazivač (ili neprozirni pokazivač, češirski mačak...)
 
Odgovor na temu

1jedini
Dejan Milosavljevic
BG

Član broj: 102721
Poruke: 74
*.cpe.vektor.net.



Profil

icon Re: Uopšteno o dizajnu klasa23.12.2007. u 13:16 - pre 198 meseci
Citat:
icobh: [code] Znam, na BCC-u radi a ne GCC-u neće.

Sa GCC-om ( V3.4.2 ) sa imao probleme oko overload-ovanja template funkcija. Pogledam standard a on lepo kaze da mogu. ...
Nemojte ovo da shvatite kao pamflet protiv GCC.
Veoma je dobar u pridrzavanju standarda, mada nekad omane.
Mislim da je vec bilo negde da za ovakve slucajeve treba provuci kod kroz vise njih pa videti sta koji kaze.
...

AKA DDMM
 
Odgovor na temu

Xarios

Član broj: 127199
Poruke: 118
*.tel.net.ba.



+1 Profil

icon Re: Uopšteno o dizajnu klasa26.12.2007. u 16:30 - pre 198 meseci
Konstruktor kopije se moze izbjeci ako koristis tehniku: predavanje argumenata(u tvom slucaju objekta kreiranog na steku ili slobodnom skladistu-gomili memorije) pozivajuce funkcije po refrenci (npr. sa pokazivacima) pozvanoj funkciji.

Ovo imas dobro objasnjeno u knjigi c++ za 21 dan. Poglavlje 9. Pronadji negdje na netu na engleskom ili pak se meni javi pa ti je mogu poslat.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Uopšteno o dizajnu klasa

[ Pregleda: 3294 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

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