C++ Design Frage

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
jogix
Beiträge: 776
Registriert: 05.10.2002 20:08:16
Wohnort: Lampertheim
Kontaktdaten:

C++ Design Frage

Beitrag von jogix » 21.08.2003 17:54:52

Hidiho,

so, da wollen wir hier mal anfangen, etwas Leben in dieses Forum zu bringen... ;)

Ich bin gerade dabei C++ zu lernen und wie lernt man besser als zu üben.
Also setze ich eine Idee, die mir schon länger im Kopf rumgeht, mit C++ um, da es sich IMHO für dieses Projekt anbietet.
Es handelt sich um ein PBM Game, das sich ein wenig an "Gladius Et Pilum" anlehnt.

Nun zu meinem Design Problem.

Es gibt in dem Spiel diverse Produktionsstätten. Um das ganze flexibel zu halten und verschiedene Produktionsketten zu ermöglichen, möchte ich das ganze insofern modular aufbauen, daß man die Produktionsketten von extern einspeisen kann.

Meine Idee dazu ist, die Informationen über die Produktionsketten in Textfiles zu speichern und diese dann immer einzulesen, eine dafür geschaffene Klasse mit den Informationen zu füllen und dann im Spiel aus diesen Informationen die tatsächlichen Produktionsstätten zu bauen.

Klingt vielleicht ein wenig kompliziert, ich hoffe, man kann verstehen, wie ich das meine. Mal einige Codeschnippsle zum einfacheren Verständnis:

Code: Alles auswählen

class ProductionInformation {
   // Basisinformationen
};

class ProductionBuilding : public ProductionInformation {
   ProductionBuilding (const string name, const ProductionInformation& pi)
   // weitere Operationen
};
Zum Initialisieren der Produktionsketten sollen also die Daten aus den Textfiles in ProductionInformation gespeichert werden, wenn nun jemand eine Produktionsstätte baut, muß er den Typ angeben und bekommt letzlich eine ProductionBuilding zugewiesen.

Ist das ein einigermaßen sinnvoller Ansatz, um so ein Problem flexibel zu lösen, oder hat jemand eine Idee, wie man an dieser Stelle die Modularität besser umsetzen kann?
cheers,
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 21.08.2003 19:43:14

Du solltest Dir bei Gelegenheit 'mal das Buch "Design Patterns in C++" (auf dt. "Entwurfsmuster" IIRC...) 'mal anschauen.

Grundsätzlich denke ich das ist schon OK, man kann es aber natürlich immer auch anders machen...

Ich würde noch weiteres Subclassing im Auge behalten, um unterschiedliche Typen von Produktionsstätten mit Typen unterscheiden zu können, aber das kann man auch später noch machen...

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
jogix
Beiträge: 776
Registriert: 05.10.2002 20:08:16
Wohnort: Lampertheim
Kontaktdaten:

Beitrag von jogix » 21.08.2003 21:11:20

Hi,

das mit dem Subclassing habe ich mir auch schon überlegt, da es sich aber nur um Unterschiede an zwei Positionen handelt, finde ich das im Moment ein wenig zu heftig. Letzlich macht das etwa nur 3-5% der Klasse aus - das kann man dann schon mal mitschleppen.

Werde mir das Buch mal bei Gelegenheit reinziehen - aber erstmal sollte ich wohl generell C++ richtig lernen und verstehen, dann kann man immernoch an den Feinheiten feilen ;)
cheers,
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 21.08.2003 23:15:43

Auf jeden Fall solltest Du C++ einigermassen im Griff haben, bevor Du Dir das Design Patterns Buch antust... Das ist nicht gerade leichter Tobak (sehr abstrakt), aber IMO unendlich wertvoll...

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 22.08.2003 07:20:30

Einer der DesignPatterns geschrieben hat(erich gamma, landsmann), ist heute Entwickler von Eclipse(grosses Projekt), und dort werden keine Patterns verwendet. Da dort jetzt XP angewendet wird macht es nicht viel Sinn Monate über Patterns zu brüten wenn man die am schluss auch wieder überschreibt.
Ich würde das grunddesign vorgeben, und den Rest adhoc machen >> mehr zu schreiben, weniger zu zeichnen, und imo lustiger ;)


happy hacking
manuel

Benutzeravatar
Bert
Beiträge: 3751
Registriert: 16.07.2002 14:06:52
Wohnort: Dresden
Kontaktdaten:

Beitrag von Bert » 22.08.2003 10:21:36

Ich gestehe zwar, mich noch nicht mit extrem Programming befaßt zu haben, denke aber, das die Beschäftigung mit Pattern auf alle Fälle keine rausgeworfene Zeit sind. Allerdings ist das wirklich ein etwas fortgeschrittenes Thema, und bestimmte Nasätze versteht man vielleicht erst, (ging mir so) wenn man ein entsprechendes Problem selber hatte. Pattern sind ja im Prinzip nichts weiter als eine Kategoriesierung von Problemen mit Lösungsbeschreibungen. Man kann da eine Menge Erfahrungen absaugen.

Zum Problem: Ich würde die Informationsklasse nicht als Basisklasse nehmen, sondern als eigenständige Klasse. Eventuell auch als eigene Hierarchie.. Aber dazu kenn ich Dein Problem nicht genug. Da Du die Produktionsstätten ja zur laufzeit, je nach Textdatei erbauen willst, würde suich hierfür vielleicht ein Factory Pattern anbieten..

Zu Pattern giebts eine Menge auch im Netz. Einfach mal Googlen. Ich kann Dir auch ein paar Links geben, wenn Du willst.
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de

Benutzeravatar
jogix
Beiträge: 776
Registriert: 05.10.2002 20:08:16
Wohnort: Lampertheim
Kontaktdaten:

Beitrag von jogix » 22.08.2003 11:27:22

Hm.... das mit den Patterns klingt schon recht interessant - stellt sich mir im Moment nur die Frage, ob das im Moment wirklich sinnvoll ist.
Ich habe bisher eigentlich fast nur Erfahrungen mit imperativen Sprachen (früher Pascal, in den letzten Jahren C), mit objektorientierten beschäftige ich mich noch nicht besonders lange. Daher ja auch das Designproblem. Sind da die Patterns nicht vielleicht für einen Anfänger im OO einen Schritt zu weit?!
cheers,
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 22.08.2003 13:00:41

ok... Ich hab warscheinlich übertrieben.

Seine Aussage war das bei einem grossen Projekt nicht alles mit Pattern erschlagen werden kann, sondern es auf den jeweiligen Stil des Programmieres ankommt.

Zum nachlesesn hier der Link. http://www.sigs.de/publications/js/2003 ... bit_03.pdf


gruss
manuel

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 22.08.2003 23:17:50

Ich habe mit den Patterns ehrlich gesagt auch nicht den gesamten Ansatz gemeint...

In dem Buch stehen einfach so viele (abstrakte) Ideen, wie man bestimmte, immer wiederkehrende Problemstellungen mit einer standardisierten Kontruktion erschlagen kann, dass es sich auf jeden Fall lohnt.

Ansonsten: Ich code normalerweise, indem ich erstmal einen groben Schlachtplan mache (welche Objekte brauche ich, und wie interagieren die), der sich auf relativ allgemeinem Niveau bewegt. Der Rest kommt beim Coden dazu.

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 24.08.2003 14:50:53

pdreker hat geschrieben: Ansonsten: Ich code normalerweise, indem ich erstmal einen groben Schlachtplan mache (welche Objekte brauche ich, und wie interagieren die), der sich auf relativ allgemeinem Niveau bewegt. Der Rest kommt beim Coden dazu.
ack. War auch das was ich gemeint habe.

gruss
manuel

Antworten