Article View: nl.comp.programmeren
Article #519Re: problemen in Visual C++
From: Sjoerd Schreuder
Date: Mon, 19 May 2003 16:47
Date: Mon, 19 May 2003 16:47
79 lines
4696 bytes
4696 bytes
Jo Vermeulen wrote:
>
> Sjoerd Schreuder wrote:
> > Overigens is het slordig om m_pDna, m_pC, m_pJ en m_pV niet te
> > initialiseren in de constructor.
>
> Die initialiseer ik in de derived classes van interface, maar je hebt
> gelijk, dat kan ik evengoed hier doen.
Des te minder je overlaat aan derived classes, des te minder er fout kan
gaan. Verder voorkom je je daarmee dat dezelfde code op diverse plaatsen
komt te staan.
Mijn richtlijn is om afgeleide klassen zo min mogelijk vertrouwen.
Eigenlijk vertrouw ik geen enkele code buiten de huidige klasse.
Dan spoor je bugs veel sneller op omdat de hoeveelheid code die b.v. bij
m_pDna kan veel beperkter is. I.p.v. een protected m_useStandardInput zou
ik dan ook een function "bool UseStandardInput() { return m_useStandardInput; }"
maken en m_useStandardInput private maken. Dan weet je zeker dat niemand
die waarde kan veranderen buiten jou om.
> > Ook het gebruik van "using namespace std;" in een header is niet zo
> > handig.
>
> Ik gebruikte eerst std::cout en std::vector enz., maar Visual
> Studio versie 6 kan daar niet mee overweg. Daarom dat we dus
> genoodzaakt waren om using namespace std; te gebruiken.
Vreemd. Ik gebruik ook Visual Studio 6.0 en ik heb nog nooit
last gehad met std::cout en std::vector. Ik heb wel een recente service
pack geinstalleerd; misschien ligt het daaraan?
> > Verder lijkt het erop dat een File en een Dictionary steeds met
> > elkaar verband houden. Waarom heb je geen aparte klasse voor die
> > combinatie?
>
> Hoe bedoel je? We lezen de dictionary's idd in van een file ja (wordt
> meegegeven aan de constructor).
Ik bedoel dit:
string m_cFile;
string m_jFile;
string m_vFile;
Dictionary *m_pC;
Dictionary *m_pJ;
Dictionary *m_pV;
Het lijkt er erg op dat m_cFile en m_pC bij elkaar horen,
netzoals m_jFile en m_pJ en m_vFile en m_pV.
Ik zou het omzetten in:
string_and_Dictionary m_C;
string_and_Dictionary m_J;
string_and_Dictionary m_V;
alhoewel ik een betere naam dan "string_and_Dictionary" zou zoeken.
Nog een opmerking: waarom die "useStandardInput" variabele?
En daarnaast heb je ook een m_inputFile; mij lijkt het dat
altijd slechts een van de twee wordt gebruikt. Geef gewoon een stream mee,
dan kun je bij de aanroep beslissen of je std::cin of std::fstream gebruikt.
Verder zou ik de klasse splitsen. Een interface klasse met alleen
de puur virtuele functies, en een afgeleide klasse die alle
protected spul bevat. De interface naar buiten en de interface naar
de afgeleide klassen zijn daarmee netter gescheiden. En misschien wil
jij (of iemand anders) ooit wel een afgeleide klasse maken die wel de
interface implementeerd, maar niets heeft aan al dat protected spul.
Eigenlijk komt het erop neer dat een klasse slechts een ding moet doen.
Doordat je je op een ding concentreert, kun je dat ene ding veel beter
doen. Deze klasse doet een tiental dingen. Bovenstaande opmerkingen zijn
allemaal suggesties om een deel van die functionaliteit in een aparte klasse
onder te brengen. Het lijkt in eerste instantie overkill, maar je code
wordt er in het algemeen netter en beter begrijpbaar van. Mits je de juiste
opsplitsing kiest, en daar komt wat ervaring bij kijken. Maar dat is dan
ook een van de kenmerken van een goede OO programmeur: de juiste opsplitsing
in klassen kiezen.
Sjoerd Schreuder
Technical Details
Message-ID:
<3EC90A9B.351ACE0D@wanadoo.nl>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-06!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!newsfeed00.sul.t-online.de!t-online.de!newsfeed.freenet.de!news2.euro.net!postnews1.euro.net!news.wanadoo.nl!not-for-mailReferences:
<baanpv$2hff$1@nl-news.euro.net> <3EC8E7AA.58E90275@wanadoo.nl> <baaq6e$2ikv$1@nl-news.euro.net>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: 107324,56acb9c9578c3917 X-Google-Attributes: gid107324,public X-Google-Thread: fcea4,56acb9c9578c3917 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2003-05-19 09:48:08 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-06!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!newsfeed00.sul.t-online.de!t-online.de!newsfeed.freenet.de!news2.euro.net!postnews1.euro.net!news.wanadoo.nl!not-for-mail Message-ID: <3EC90A9B.351ACE0D@wanadoo.nl> Date: Mon, 19 May 2003 18:47:23 +0200 From: Sjoerd Schreuder <sa_schreuder@wanadoo.nl> X-Mailer: Mozilla 4.7 [en] (WinNT; I) X-Accept-Language: en MIME-Version: 1.0 Newsgroups: nl.comp.programmeren,be.comp.programming Subject: Re: problemen in Visual C++ References: <baanpv$2hff$1@nl-news.euro.net> <3EC8E7AA.58E90275@wanadoo.nl> <baaq6e$2ikv$1@nl-news.euro.net> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 79 Organization: Wanadoo NNTP-Posting-Date: 19 May 2003 16:48:06 GMT NNTP-Posting-Host: vuurmuur.geodan.nl X-Trace: DXC=H3K2>=@XebTkcG^V_L;2UY:C^^8E:oBL[>lFN?aCDeJ[@Y^814\f>TXTWKXQ@@nTIZPXgM9UOC?e\lmZYDPDN=2]Wb<LF^n>ZRR5J>>^IYo7MP X-Complaints-To: abuse@wanadoo.nl