Article View: be.comp.programming
Article #12136Re: classes maken
From: Bart.Vanhauwaert
Date: Mon, 10 Dec 2001 10:44
Date: Mon, 10 Dec 2001 10:44
63 lines
3729 bytes
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-mailReferences:
<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