Thread View: de.comp.lang.c++
10 messages
10 total messages
Started by Kay Hayen
Tue, 30 Jan 1996 00:00
Objekt Hierachie, wie am besten ?
Author: Kay Hayen
Date: Tue, 30 Jan 1996 00:00
Date: Tue, 30 Jan 1996 00:00
43 lines
2532 bytes
2532 bytes
Hallo Leute.
In meinem derzeiten Projekt ( ueber den Inhalt darf ich nichts andeuten,
sonst werde ich wohlmoeglich auch von Ulrich angeflamt :-) habe ich eine
Klasse "Kartendaten", von dieser Klasse gibt es maximal nur eine Instanz
mit einer Lebenszeit ueber fast das gesamte Programm.
Die Daten, die diese Klasse verwaltet aehneln sich so sehr, dass ich eine
Klasse "Kartenobjekt" eingefuehrt habe, deren Ableitungen dann member von
Kartendaten sind. Die Konstruktoren dieser Ableitungen von Kartenobjekten
werden vom den Konstruktoren von Kartendaten aufgerufen.
Dann erfolgt aber IMO ein Stilbruch, denn die "Kartenobjekte" muessen auf
Memberfunktionen von "Kartendaten" zugreifen und dazu muss ich jedem
Konstruktor einer Zeiger auf die "Kartendaten" mitgeben, was ich nicht als
sehr elegant empfinde.
Sollte ich den Konstruktor von Kartendaten eher in zwei Teile aufspalten
und Initialisierungen der Unterobjekte in eine direkt nach dem Kostruktor
aufzurufende Memberfunktion "Init" verlegen ? Die Kartenobjekte koennten
dann ueber einen globalen Zeiger auf die Kartendaten zugreifen ? Den
koennte ich auch schon im Konstruktor setzen, aber Seiteneffekte von
Konstruktoren finde ich noch uneleganter.
Muesste ich letztlich doch Kartendaten zu einem Riesenobjekt machen, das
ich unuebersichtlich faende? Es gibt da naemlich Seedaten, Bergdaten,
Flussdaten, Walddaten, Stadtdaten, ....
Mls, Kay
PS: Ich hoffe keine C++ inhaltlichen Aspekte angesprochen zu haben und
wenn ich meine Meinung dazu sagen duerfte: Ich kann Ulrichs Position
verstehen, es gibt viele Fragen, die hier tatsaechlich sehr fehl am Platze
sind, aber die Netzstruktur ist nunmal nicht sehr uebersichtlich, da wird
sich immer jemand in dieses Brett "verirren" und Fragen stellen, die nicht
hierhergehoeren. Waere es nicht freundlicher, wenn moeglich zu antworten
und dann auf bessere Orte fuer Fragen zu dem Thema hinzuweisen ?
--
** *Kurze* Signaturen sind die besten **
Re: Objekt Hierachie, wie am besten ?
Author: Benjamin Baermann
Date: Thu, 01 Feb 1996 14:27
Date: Thu, 01 Feb 1996 14:27
26 lines
1723 bytes
1723 bytes
In <61qhJjBCr5B@devil.edition.bonbit.org> kay@edition.bonbit.org (Kay Hayen) writes: >Sollte ich den Konstruktor von Kartendaten eher in zwei Teile aufspalten >und Initialisierungen der Unterobjekte in eine direkt nach dem Kostruktor >aufzurufende Memberfunktion "Init" verlegen ? Die Kartenobjekte koennten >dann ueber einen globalen Zeiger auf die Kartendaten zugreifen ? Den >koennte ich auch schon im Konstruktor setzen, aber Seiteneffekte von >Konstruktoren finde ich noch uneleganter. Hm. Wenn diese Klasse wirklich nur ein Objekt hat, auf das von ueberall drauf zugegriffen wird, finde ich es nicht schlimm es einfach (und dreckig) global zu machen. Natuerlich ist das nicht die reine objektorientierte Schule, aber doch relativ intuitiv und uebersichtlich also in diesem Fall wohl vorzuziehen, oder? Ich hatte dieses Problem auch schon oefter, und hab eigentlich immer diese Loesung gewaehlt. Eine andere Moeglichkeit waere vielleicht die Oberklasse friend zu den kleinen zu deklarieren. Ist aber eher unuerbersichtlicher, oder? Gruesse, Benni -- http://www.uni-frankfurt.de/~benni/hello.html "1024 Byte bilden ein Megabyte" aus einer Schrift des Bundesministerums fuer Wirtschaft zur "Informationsgesellschaft"
Re: Objekt Hierachie, wie am besten ?
Author: Ralf W. Stephan
Date: Fri, 02 Feb 1996 10:11
Date: Fri, 02 Feb 1996 10:11
38 lines
1548 bytes
1548 bytes
Kay Hayen writes:
> ...Kartendaten, Kartenobjekte...
Ich versuchs mal (man nehme Cline/Lomow:"C++ FAQs" zur Hand...).
FAQ 382: How is a static data member similar to a global variable?
A static data member is like a global variable with a funny name
that needn't be public.
If your class has a static data member, there is only one copy
of that datum even if there are many instances of the class. ...
-------------------------------------------------
class Kartendaten {...};
class Kartenobjekte
{
public:
static Kartendaten data;
// diverse gemeinsame Members
};
class Seedaten : public Kartenobjekte {...}; //etc.
-------------------------------------------------
Ansprechen von Kartendaten geht dann von außen mit
Kartenobjekte::Kartendaten.member() und von den Kartenobjekte-Members
aus mit data.member().
> ... Waere es nicht freundlicher, wenn moeglich zu antworten
> und dann auf bessere Orte fuer Fragen zu dem Thema hinzuweisen ?
Das Beste wäre wohl, regelmäßig einen kurzen, freundlichen Hinweis
zu posten, und den Rest den Göttern zu überlassen. Sigh...
ralf
--
PGP: 1024/0xA713ECE9 2047/0xC8E605F5
Re: Objekt Hierachie, wie am besten ?
Author: Ullrich von Bassewitz
Date: Fri, 02 Feb 1996 21:03
Date: Fri, 02 Feb 1996 21:03
28 lines
1805 bytes
1805 bytes
Kay Hayen (kay@edition.bonbit.org) wrote:
> PS: Ich hoffe keine C++ inhaltlichen Aspekte angesprochen zu haben und
> wenn ich meine Meinung dazu sagen duerfte: Ich kann Ulrichs Position
> verstehen, es gibt viele Fragen, die hier tatsaechlich sehr fehl am Platze
> sind, aber die Netzstruktur ist nunmal nicht sehr uebersichtlich, da wird
> sich immer jemand in dieses Brett "verirren" und Fragen stellen, die nicht
> hierhergehoeren. Waere es nicht freundlicher, wenn moeglich zu antworten
> und dann auf bessere Orte fuer Fragen zu dem Thema hinzuweisen ?
Ich habe das eine Zeitlang so gemacht, ich habe eine Zeitlang die Leute auch
per Mail darauf hingewiesen. In letzter Zeit haben die Off-Topic Postings
aber so ueberhand genommen, dass ich beschlossen habe, diese Diskussionen
oeffentlich zu fuehren, damit die potentiellen Poster von morgen das
mitbekommen und sich gleich Gedanken ueber die Gruppenwahl machen ohne dass
ich zuerst eine private Diskussion per Mail mit ihnen fuehre.
Zur Beruhigung fuer alle:
Ich habe nicht vor, das bis in alle Ewigkeit fortzufuehren. Sobald sich die
Anzahl der Off-Topic Postings wieder auf ein ertraegliches Mass vermindert
hat, werde ich auch wieder privat mit den Leuten darueber diskutieren.
Gruss
Uz
--
Ullrich von Bassewitz uz@ibb.schwaben.com
Re: Objekt Hierachie, wie am besten ?
Author: Joachim Zobel
Date: Sun, 04 Feb 1996 10:19
Date: Sun, 04 Feb 1996 10:19
44 lines
2510 bytes
2510 bytes
kay@edition.bonbit.org (Kay Hayen) wrote: >Hallo Leute. >In meinem derzeiten Projekt ( ueber den Inhalt darf ich nichts andeuten, >sonst werde ich wohlmoeglich auch von Ulrich angeflamt :-) habe ich eine >Klasse "Kartendaten", von dieser Klasse gibt es maximal nur eine Instanz >mit einer Lebenszeit ueber fast das gesamte Programm. >Die Daten, die diese Klasse verwaltet aehneln sich so sehr, dass ich eine >Klasse "Kartenobjekt" eingefuehrt habe, deren Ableitungen dann member von >Kartendaten sind. Die Konstruktoren dieser Ableitungen von Kartenobjekten >werden vom den Konstruktoren von Kartendaten aufgerufen. Wieso Member? Eine Liste von Kartenobjekten, die alle nur über das Kartenobjekt-Interface angesprochen werden, waere eine bessere Lösung. >Dann erfolgt aber IMO ein Stilbruch, denn die "Kartenobjekte" muessen auf >Memberfunktionen von "Kartendaten" zugreifen und dazu muss ich jedem >Konstruktor einer Zeiger auf die "Kartendaten" mitgeben, was ich nicht als >sehr elegant empfinde. Ist aber ok. Solltest du aus irgendwelchen Gründen plötzlich mehrere Kartendaten benötigen, zahlt es sich aus. >Sollte ich den Konstruktor von Kartendaten eher in zwei Teile aufspalten >und Initialisierungen der Unterobjekte in eine direkt nach dem Kostruktor >aufzurufende Memberfunktion "Init" verlegen ? Die Kartenobjekte koennten >dann ueber einen globalen Zeiger auf die Kartendaten zugreifen ? Den >koennte ich auch schon im Konstruktor setzen, aber Seiteneffekte von >Konstruktoren finde ich noch uneleganter. Lesen die Kartenobjekte nur über diesen Zeiger (const machen!)? Das waere ok, wenn sie schreiben und dadurch untereinander Informationen austauschen, kannst du leicht einen Wartungsalptraum bauen. Das Problem hast du allerdings auch wenn jedes Kartenobjekt seinen eigenen Kartendaten-Pointer hat. Joachim "Man faengt Forellen mit der Hand, indem man zuerst ihr Vertrauen gewinnt und es dann missbraucht." Robert A. Heinlein
Re: Objekt Hierachie, wie am besten ?
Author: Kay Hayen
Date: Tue, 06 Feb 1996 00:00
Date: Tue, 06 Feb 1996 00:00
69 lines
2843 bytes
2843 bytes
Hallo Leute,
ralf@ark.franken.de (Ralf W. Stephan) meinte am 02.02.96
zum Thema "Re: Objekt Hierachie, wie am besten ?":
>Kay Hayen writes:
>> ...Kartendaten, Kartenobjekte...
>
>Ich versuchs mal (man nehme Cline/Lomow:"C++ FAQs" zur Hand...).
>
> FAQ 382: How is a static data member similar to a global variable?
> A static data member is like a global variable with a funny name
> that needn't be public.
> If your class has a static data member, there is only one copy
> of that datum even if there are many instances of the class. ...
>
>-------------------------------------------------
>class Kartendaten {...};
>
>class Kartenobjekte
>{
>public:
> static Kartendaten data;
> // diverse gemeinsame Members
>};
>
>class Seedaten : public Kartenobjekte {...}; //etc.
>-------------------------------------------------
>
>Ansprechen von Kartendaten geht dann von außen mit
>Kartenobjekte::Kartendaten.member() und von den Kartenobjekte-Members
>aus mit data.member().
Oh, oh, ich habe ne Weile gebraucht, um mitzubekommen, dass Du so
praktisch die Hierachie umdrehtst. Das ist erstmal eine tolle Idee, nur
wie spreche ich dann von Kartendaten aus die Seedaten an ? Kartendaten
sollte ja eine gemeinsame Schnittstelle zu allen Kartenobjekten werden.
Koennte ich da einfach eine Aufteilung von Kartendaten vornehmen. Also
weiter die Kartenobjekte in dem Konstruktor einer auesseren Kartendaten
Klasse erzeugen, aber den Zugriff ueber eine den Kartenobjekten gemeinsame
Kartendaten_Shell Klasse, friend von Kartendaten, laufen zu lassen. Die
muesste ja nur einmal initialisiert werden.
Nur wenn ich verschiedene Instanzen von Kartendaten haben wollte, wie
bekomme ich es dann hin, dass ich den Kartenobjekten darin dann auch
andere Kartendaten_Shell Instanzen zuweise ?
Ansonsten danke ich Dir fuer diesen Loesungshinweis, die letzte Frage
bliebe aber noch zu klaeren.
Mls, Kay
--
[...]
class Mensch Ich( "Kay Hayen", "Kay@Edition.bonbit.org", ... );
class Leser *Du;
[...]
if (( You->Nett() == TRUE ) || ( You->Konstruktiv() == TRUE )) {
Ich.Gruss( Du );
Ich.Sage( Du, "Antworte mal wieder...." );
} else {
Ich.Sage( Du, "Tschuess." );
}
Re: Objekt Hierachie, wie am besten ?
Author: Kay Hayen
Date: Tue, 06 Feb 1996 00:00
Date: Tue, 06 Feb 1996 00:00
86 lines
4172 bytes
4172 bytes
Hallo Leute,
a2597420@athena.rrz.uni-koeln.de (Joachim Zobel) meinte am 04.02.96
zum Thema "Re: Objekt Hierachie, wie am besten ?":
>kay@edition.bonbit.org (Kay Hayen) wrote:
>
>>Hallo Leute.
>
>>In meinem derzeiten Projekt ( ueber den Inhalt darf ich nichts andeuten,
>>sonst werde ich wohlmoeglich auch von Ulrich angeflamt :-) habe ich eine
>>Klasse "Kartendaten", von dieser Klasse gibt es maximal nur eine Instanz
>>mit einer Lebenszeit ueber fast das gesamte Programm.
>
>>Die Daten, die diese Klasse verwaltet aehneln sich so sehr, dass ich eine
>>Klasse "Kartenobjekt" eingefuehrt habe, deren Ableitungen dann member von
>>Kartendaten sind. Die Konstruktoren dieser Ableitungen von Kartenobjekten
>>werden vom den Konstruktoren von Kartendaten aufgerufen.
>
>Wieso Member? Eine Liste von Kartenobjekten, die alle nur über das
>Kartenobjekt-Interface angesprochen werden, waere eine bessere Lösung.
Die Kartendaten Klasse soll doch eigentlich dieses Interface sein. Mit
Member habe ich mich sicher falsch ausgedrueckt, was ich exakt meine ist
je ein Pointer auf die Erben von Kartenobjekt in der Klasse Kartendaten.
>>Dann erfolgt aber IMO ein Stilbruch, denn die "Kartenobjekte" muessen auf
>>Memberfunktionen von "Kartendaten" zugreifen und dazu muss ich jedem
>>Konstruktor einer Zeiger auf die "Kartendaten" mitgeben, was ich nicht als
>>sehr elegant empfinde.
>
>Ist aber ok. Solltest du aus irgendwelchen Gründen plötzlich mehrere
>Kartendaten benötigen, zahlt es sich aus.
Tja, ich hoffe, es ist doch irgendwie moeglich. Ralf hat in einem anderen
Posting eine Moeglichkeit aufgezeigt, aber ich verliere IMO allerdings
die Option mehere Instanzen von Kartendaten haben zu koennen.
Geht es nicht doch irgendwie ? Anscheinend wohl nicht, aber vielleicht
gibt es noch andere Ideen. Sonst werde ich mich fuer oder gegen mehere
Instanzen entscheiden muessen.
>>Sollte ich den Konstruktor von Kartendaten eher in zwei Teile aufspalten
>>und Initialisierungen der Unterobjekte in eine direkt nach dem Kostruktor
>>aufzurufende Memberfunktion "Init" verlegen ? Die Kartenobjekte koennten
>>dann ueber einen globalen Zeiger auf die Kartendaten zugreifen ? Den
>>koennte ich auch schon im Konstruktor setzen, aber Seiteneffekte von
>>Konstruktoren finde ich noch uneleganter.
>
>Lesen die Kartenobjekte nur über diesen Zeiger (const machen!)? Das
>waere ok, wenn sie schreiben und dadurch untereinander Informationen
>austauschen, kannst du leicht einen Wartungsalptraum bauen.
Ich schreibe natuerlich nicht direkt in die Strukturen, sondern benutze
Member-Funktionen, alles andere waere wohl extrem unuebersichtlich.
>Das Problem hast du allerdings auch wenn jedes Kartenobjekt seinen
>eigenen Kartendaten-Pointer hat.
Stimmt. Mensch sollte immer vermeiden, direkt an der Kontrolle von
Funktionen einer Klasse in deren Daten zu schreiben. Die Klassen sollen
doch die Daten kapseln, so sind Fehler aber schwer zu entdecken, bei
groesseren Umstellungen muss dann auch noch der ganze source durchgegangen
werden, um Aenderungen zu machen, anstatt nur eine Klasse. Alptraum wird
es dann, wenn an wenigen Stellen die Aenderungen vergessen wurden....
>Joachim
Danke auch fuer Deine Tips, Kay
--
[...]
class Mensch Ich( "Kay Hayen", "Kay@Edition.bonbit.org", ... );
class Leser *Du;
[...]
if (( You->Nett() == TRUE ) || ( You->Konstruktiv() == TRUE )) {
Ich.Gruss( Du );
Ich.Sage( Du, "Antworte mal wieder...." );
} else {
Ich.Sage( Du, "Tschuess." );
}
Re: Objekt Hierachie, wie am besten ?
Author: Joachim Zobel
Date: Fri, 09 Feb 1996 03:27
Date: Fri, 09 Feb 1996 03:27
38 lines
2269 bytes
2269 bytes
kay@edition.bonbit.org (Kay Hayen) wrote: >Hallo Leute, >a2597420@athena.rrz.uni-koeln.de (Joachim Zobel) meinte am 04.02.96 >zum Thema "Re: Objekt Hierachie, wie am besten ?": >>kay@edition.bonbit.org (Kay Hayen) wrote: >>Lesen die Kartenobjekte nur über diesen Zeiger (const machen!)? Das >>waere ok, wenn sie schreiben und dadurch untereinander Informationen >>austauschen, kannst du leicht einen Wartungsalptraum bauen. >Ich schreibe natuerlich nicht direkt in die Strukturen, sondern benutze >Member-Funktionen, alles andere waere wohl extrem unuebersichtlich. >>Das Problem hast du allerdings auch wenn jedes Kartenobjekt seinen >>eigenen Kartendaten-Pointer hat. >Stimmt. Mensch sollte immer vermeiden, direkt an der Kontrolle von >Funktionen einer Klasse in deren Daten zu schreiben. Die Klassen sollen >doch die Daten kapseln, so sind Fehler aber schwer zu entdecken, bei >groesseren Umstellungen muss dann auch noch der ganze source durchgegangen >werden, um Aenderungen zu machen, anstatt nur eine Klasse. Alptraum wird >es dann, wenn an wenigen Stellen die Aenderungen vergessen wurden.... Kapseln hilft in der Situation, die ich im Kopf habe, wenig. Ich habe zweimal verkettete Listen von Objekten geschrieben, die abgearbeitet werden und dabei den Zustand des Listenobjektes ändern. Bei beiden bin ich froh, wenn ich sie nicht aendern muss. Das Boese sind die vielen verschiedenen (schlecht dokumentierten, ja.. seufz) Zustände dieses Listenobjekts. Das hat aber vieleicht wenig mit deinem Problem zu tun. Joachim "... ein Geschlecht erfinderischer Zwerge, die fuer alles gemietet werden koennen." - Bertolt Brecht - Das Leben des Gallilei
Re: Objekt Hierachie, wie am besten ?
Author: Ralf W. Stephan
Date: Fri, 09 Feb 1996 12:30
Date: Fri, 09 Feb 1996 12:30
19 lines
1170 bytes
1170 bytes
Kay Hayen writes: > Oh, oh, ich habe ne Weile gebraucht, um mitzubekommen, dass Du so > praktisch die Hierachie umdrehtst. Das ist erstmal eine tolle Idee, nur > wie spreche ich dann von Kartendaten aus die Seedaten an ? Kartendaten > sollte ja eine gemeinsame Schnittstelle zu allen Kartenobjekten werden. Na wenn Du von A B und von B A ansprechen willst, dann muß ich gestehen, daß mir nur noch der Rat einfällt, Deine Hierarchie nochmal zu überdenken. Von Hierarchie kann dann nämlich keine Rede mehr sein. Oder eins der Hauptobjekte muß aufgeteilt werden. Vielleicht gibt es irgendwo fertigen Code, von dem Du was abschauen kannst? Viel Glück, ralf -- PGP: 1024/0xA713ECE9 2047/0xC8E605F5
Re: Objekt Hierachie, wie am besten ?
Author: Haiko Emmel
Date: Sun, 11 Feb 1996 22:54
Date: Sun, 11 Feb 1996 22:54
41 lines
1698 bytes
1698 bytes
benni@hera.rbi.informatik.uni-frankfurt.de (Benjamin Baermann) wrote:
>Hm. Wenn diese Klasse wirklich nur ein Objekt hat, auf das von ueberall
>drauf zugegriffen wird, finde ich es nicht schlimm es einfach (und
>dreckig) global zu machen. Natuerlich ist das nicht die reine
>objektorientierte Schule, aber doch relativ intuitiv und uebersichtlich
>also in diesem Fall wohl vorzuziehen, oder?
hallo banni,
ich finde diese situation ist ein typischer anwendungsfall fuer
singleton-klassen. hast du dir schon mal das design-pattern-buch der
gang-of-four angeschaut? das sinngleton-pattern stellt sicher, dass
von einer klasse nur ein einziges objekt erzeugt werden kann. durch
eine statische klassenmethode kann man auf dieses objekt zugreifen.
vorteil: rein objektorientiert und schont den globalen namensraum.
class Singleton
{
public:
static Singletin *getInstance();
private:
Singleton() {...}
static Singleton *theInstance;
};
Singleton *Singleton::theInstance=NULL;
Singleton *Singleton::getInstance()
{
if (!theInstance)
theInstance=new Singleton;
return theInstance;
}
gruss haiko
p.s. kann es sein, dass wir uns von einer chippy-sendung im hr kennen?
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads