🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #12136

Re: classes maken

#12136
From: Bart.Vanhauwaert
Date: Mon, 10 Dec 2001 10:44
63 lines
3729 bytes
Agaricus <Agaricuswebmail@yahoo.com> wrote:
> Nu is mijn vraag heel algemeen hoe begin je aan zoiets want "in het
> wilde weg" code schrijven zal hier zeker tot een slecht resultaat
> leiden.

Toch niet. 'In het wilde weg beginnen' is niet zo slecht als het lijkt.
Meestal geraak je op je eerste ruwe idee al redelijk ver. Na een tijdje
krijg je dan onherroepelijk het idee dat het werkelijk een warboel
is geworden. Je begint steeds meer te denken : als ik van in het begin
dat en dat had gekozen, dan zou het nu veel vlotter gaan. Wel :
dan gooi je gewoon alles (of een heel groot stuk) weg en begin je
opnieuw. Het lijkt inefficient maar is in werkelijkheid verschrikkelijk
effectief. Effectiever in ieder geval dan te proberen vanaf het
eerste moment over te designen.

Toch zijn er een aantal basistips bruikbaar, meer bepaald voor C++.
(Ik gebruik als voorbeeld het probleem van het maken van een
rekenmachine met oneindige precisie, die functies en variabelen
aankan)

1. Een klasse moet 1 wel gedefinieerd concept voorstellen uit je
probleem. Goed : RationaalGetal; Slecht : FunctieOfVariabele.

2. Probeer een klassedefinitie zo klein mogelijk te houden, maar
niet kleiner. Bijvoorbeeld : ipv RationaalGetal::NaarScherm() en
RationaalGetal::NaarString() te voorzien kan je misschien beter
de eerste laten vallen. Indien je later bijvoorbeeld je programma
van een grafische mode ipv textmode wil voorzien hoef je niet
alle NaarScherm te veranderen maar enkel de routine die strings
op het scherm zet.

3. Vergeet const niet. 

4. Altijd proberen klasses te hergebruiken uit je library. Verlies geen
tijd met zelf een string te willen programmeren, of een lijst of een
array. Gebruik gerust std::string, std::list of std::vector. Je leert
relatief weinig door die dingen zelf te willen schrijven. 

5. Indien je klasse geheugen alloceert
		a. alloceren in constructor, dealloceren in destructor
		b. altijd copy constructor voorzien
		c. indien je wil vergelijken, meer dan waarschijnlijk
		operator==(...) zelf schrijven
		d. altijd assignment operator zelf schrijven.
		(trouwens, een assignment operator test eerst of je niet
		aan jezelf aan het assignen bent.)

(enkel indien je virtual al gezien hebt)
6. Indien je een klasse van een virtuele member wil voorzien :
		a. altijd virtuele destructor
		b. in iets grotere projecten, (bijna) altijd virtuele 
		abstracte baseclass

7. protected: members zijn bijna altijd een teken van luiheid. Ofwel zijn
ze werkelijk voor iedereen vrij te veranderen, en dan kan je ze evengoed
public maken. Ofwel moeten er toch bepaalde constraints aan opgelegd
worden, en dan moet je ze private maken. Indien je twijfelt of iets
public, protected of private zou moeten zijn, maak het private.

cu bart

-- 
http://www.irule.be/bvh/
Technical Details
Message-ID: <nm32v9.lbi.ln@10.0.0.2>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!194.25.134.62!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!fu-berlin.de!skynet.be!skynet.be!louie!not-for-mail
References: <3c1371fa.4825396@news.chello.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,8431a2e9bb3e024
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2001-12-10 02:50:09 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!194.25.134.62!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!fu-berlin.de!skynet.be!skynet.be!louie!not-for-mail
Sender: - <bvh@ns1.irule.be>
From: Bart.Vanhauwaert@nowhere.be
Subject: Re: classes maken
Newsgroups: be.comp.programming
References: <3c1371fa.4825396@news.chello.be>
User-Agent: tin/1.4.4-20000803 ("Vet for the Insane") (UNIX) (Linux/2.2.17-21mdksecure (i686))
Date: Mon, 10 Dec 2001 11:44:39 +0100
Message-ID: <nm32v9.lbi.ln@10.0.0.2>
Lines: 63
NNTP-Posting-Host: 194.78.202.248
X-Trace: 1007981236 reader1.news.skynet.be 24135 194.78.202.248
X-Complaints-To: abuse@skynet.be