Hallo,
Ik zit met een programmatorisch probleempje.
De situatie is als volgt: ik en een andere programmeur ontwikkelen samen een applicatie.
Het deel dat ik ontwikkel en het deel dat hij ontwikkelt zijn perfect gescheiden, hij maakt enkel nu en dan een aanroep naar mijn deel om data door te geven. Nu hebben we de structuur van die klassen die we gebruiken om de data door te geven reeds afgesproken en in headerfiles gezet.
Bij de ontwikkeling van mijn deel zou het echter heel erg handig zijn om functionaliteit toe te voegen aan die klassen. Ik wil echter niet dat ik de methodes die ik toevoeg aan de klassen terecht komen in de gedeelde headerfiles.
Ik dacht dan om overerving te gebruiken. De gedeelde klassen bevatten enkel de declaraties van de data die uitgewisseld moet worden. We maken dan elk afgeleide klassen die onze implementatie specifieke methodes en extra variabelen bevatten. Door de afgeleide klasse terug te casten naar de basisklasse (die enkel de data bevat en niks meer), kunnen we de data simpel uitwisselen tussen de delen.
Aan mijn kant kan ik door wat pointer magic die data dan in mijn afgeleide klasse krijgen.
De gedeelde headerfiles blijven dan mooi sober, en alle implementatie specifieke zaken bevinden zich in de bestanden van de uitgebreide klasse.
Erg leuk in theorie, maar het probleem is dat een klasse ook een andere klasse als attribuut kan hebben, en dat maakt het allemaal erg ingewikkeld ...
Mijn idee was dus:
Als je nu het volgende hebt:
Dan wordt het al héél wat ingewikkelder en viezer ...
Moet je dan in de uitgebreide klasse een 2de attribuut bla2 aanmaken of zo van de 2de uitgebreide klasse? Pff ...
Ik ben allicht niet goed bezig en kan wel wat advies gebruiken over hoe deze situatie het beste aan te pakken ... Alle advies is welkom.
Ik zit met een programmatorisch probleempje.
De situatie is als volgt: ik en een andere programmeur ontwikkelen samen een applicatie.
Het deel dat ik ontwikkel en het deel dat hij ontwikkelt zijn perfect gescheiden, hij maakt enkel nu en dan een aanroep naar mijn deel om data door te geven. Nu hebben we de structuur van die klassen die we gebruiken om de data door te geven reeds afgesproken en in headerfiles gezet.
Bij de ontwikkeling van mijn deel zou het echter heel erg handig zijn om functionaliteit toe te voegen aan die klassen. Ik wil echter niet dat ik de methodes die ik toevoeg aan de klassen terecht komen in de gedeelde headerfiles.
Ik dacht dan om overerving te gebruiken. De gedeelde klassen bevatten enkel de declaraties van de data die uitgewisseld moet worden. We maken dan elk afgeleide klassen die onze implementatie specifieke methodes en extra variabelen bevatten. Door de afgeleide klasse terug te casten naar de basisklasse (die enkel de data bevat en niks meer), kunnen we de data simpel uitwisselen tussen de delen.
Aan mijn kant kan ik door wat pointer magic die data dan in mijn afgeleide klasse krijgen.
De gedeelde headerfiles blijven dan mooi sober, en alle implementatie specifieke zaken bevinden zich in de bestanden van de uitgebreide klasse.
Erg leuk in theorie, maar het probleem is dat een klasse ook een andere klasse als attribuut kan hebben, en dat maakt het allemaal erg ingewikkeld ...
Mijn idee was dus:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| /*
* De sobere klasse (enkel datacontainer eigenlijk) die gebruikt wordt om data
* uit te wisselen tussen de twee delen.
*/
class Basisklasse
{
public:
int data;
}
/*
* De uitgebreide klasse die extra functionaliteit/attributen bevat voor het
* gebruik binnen mijn deel.
*/
class Uitgebreide_klasse : public Basisklasse
{
public:
Uitgebreide_klasse();
Uitgebreide_klasse(Basisklasse b) // Cast constructor
{
*((Basisklasse*)this) = b; // Pointer magic
};
~Uitgebreide_klasse();
int extra_data;
void extra_methode();
...
} |
Als je nu het volgende hebt:
code:
1
2
3
4
5
6
| class Basisklasse
{
public:
int data;
Tweede_basisklasse bla;
} |
Dan wordt het al héél wat ingewikkelder en viezer ...
Moet je dan in de uitgebreide klasse een 2de attribuut bla2 aanmaken of zo van de 2de uitgebreide klasse? Pff ...
Ik ben allicht niet goed bezig en kan wel wat advies gebruiken over hoe deze situatie het beste aan te pakken ... Alle advies is welkom.
[ Voor 9% gewijzigd door DieterVDW op 14-03-2006 16:31 ]