Konzeptionierung meines Programms

JavaJoe

Mitglied
Hallo Experten:)
Derzeit arbeite ich an einem kleinen Chat um mich in die OOP mit c++ einzuarbeiten.
Zur Umsetzung der GUI verwende ich WxWidgets.

Bislang habe ich meine Projekte immer nach dem Motto:
Code like hell and see what happens aufgebaut.
Das hat auch so immer wunderbar funktioniert, nur will ich nun auch mal meinen Stil verbessern:)

Zum Projekt:

Erstmal habe ich ein Klasse erstellt, die von mir oft verwendete Socketmethoden vereint.
Dann habe ich eine Klasse implementiert, die diese Klasse nutzt um Chatmethoden zur Verfügung zu stellen und die Socketverbindung zu verwalten.
Außerdem gibt es noch die GUI-klasse.

Das Problem ist jetzt, dass ich nicht weiß wie ich GUI und Chatclienten sauber verbinden soll.
Einerseits braucht die GUI ein Object der Chatclientklasse um z.b.: Text zu versenden.
Andererseits braucht das Object der Chatclientklasse auch das Object der GUI-klasse um z.b.: empfangenen Text darstellen zu können.

Bislang habe ich es so gelöst, dass jede Klasse einen Pointer der jeweils anderen Klasse besitzt.
Dies ist jedoch nur durch Forward Deklaration möglich.
Das muss doch auch eleganter zu lösen sein?!
Wie würdet ihr das Problem lösen

MFG
JavaJoe
 
Hallo,
muss denn der ChatClient unbedingt an das GUI gekoppelt sein? Ich würde die ChatClient-Klasse komplett von der GUI abkoppeln. Chatten würde schließlich auch auf einer DOS-Konsole gehen. Dann wäre aber deine ChatClient-Klasse am Ende, da sie ja unbedingt ein GUI braucht.
Das GUI sollte ein Objekt des ChatClients enthalten. Der ChatClient kann ja beim Empfang einer Nachricht ein Event schmeißen, welches der GUI verarbeitet, um z.B. die gerade eingegangene Nachricht in ein Textfenster zu kopieren.
 
Hey!
Genau das ist es woran ich mich auch stoße.
GUI und Clientklasse sollten meiner Meinung auch nicht zusammen hängen.
Das ganze soll schließlich OOP und damit sehr flexibel also z.B. auch schnell zum Konsolenprogramm umbaubar sein.
Ich bin nur auf keine andere Lösunf gekommen.
Gibt es noch andere Lösungen außer Events? Denn mit Events wären GUI und Client zwar entkoppelt aber so richtig flexibel ist das doch immer noch nicht, da die Events ja auch GUI spezifisch sind oder?

MFG
 
Da fällt mir noch ein, wenn ich es über wxEvents lösen würde müsste ich in die Chatclient Klasse trotzdem die wx Header einbinden und wx Methoden nutzen um die Events zu versenden.
Damit wäre immer noch keine Verbesserung vorhanden.

MFG
 
Ein Chat-Programm muss doch ereignisgesteuert sein. Wenn keine Nachrichten anliegen, muss man z.B. das Fenster schließen können.
Wenn du auf Events verzichtest, kannst du im Prinzip nur zwischen Empfangs- und Sendemodus wechseln und nichts anderes machen. Sehr unschön.
Der ChatClient emittiert doch nur Events, die die Kommunikation betreffen, also keine Abhängigkeit zu anderen Klassen.

Wenn du auf wxWidgets auch noch verzichten willst, musst du dich für eine Platform entscheiden. Warum? wxWidgets hat mit der Koppelung zwischen GUI und ChatClient nichts zu tun.
 
Verstehe glaub ich nicht so ganz was du meinst.
Die Events wären doch Framework spezifisch, in meinem Fall halt WxWidgets.
Wenn ich es so belasse wie ich es bis jetzt habe kann ich doch auch auf alle auftretenden Ereignisse reagieren.
Oder was meinst du mit : "...kannst du im Prinzip nur zwischen Empfangs- und Sendemodus wechseln." ?


MFG
 
Hi, klingt bissl nach einer Grundsatzdiskussion zum Thema Model-View-Control. Lies dir mal das am Besten durch. Da wird genau erklärt wie du GUI vom Modell und der Business Logic trennst. Da du ja das offensichtlich richtig wie ein Project durchziehen willst lies dir ein wenig was zum Thema Software Engineering durch.
- Was für ein Project (klein, mittel, groß ...)
- Anforderungsanalyse
- Anwendungsfälle (Anwendungsfalldiagramme)
- Architektur
- Klassendiagramme
- Risiken etc.
- Welchen Entwicklungsprozess (RUP, XP, Scrumm ...)
Hoffe ich bin nicht gleich mit der zu großen Keule gekommen.
 
Hey.
Die meisten Begriffe sagen mir noch nichts aber ich bin für jeden Hinweis dankbar.
Ich will schließlich lernen professionell zu arbeiten und da kommt man wohl um graue Theorie nicht rum;)

MFG
 
Die Events wären doch Framework spezifisch, in meinem Fall halt WxWidgets.
Da du wxWidgets einsetzt, ist doch fast alles frameworkspezifisch.
Warum stört das? Du kannst es auf Windows, Mac-Os, Linux, usw. kompilieren.
Wenn ich es so belasse wie ich es bis jetzt habe kann ich doch auch auf alle auftretenden Ereignisse reagieren.
Oder was meinst du mit : "...kannst du im Prinzip nur zwischen Empfangs- und Sendemodus wechseln." ?
Ich hatte dich so verstanden, dass du Ereignissteuerung vermeiden wolltest.
Ich weiß ja nicht, wie es jetzt ist. Poste mal den Code.
 
Sooo ich habe mich mal ein wenig über die Programmkonzeptionierung informiert und bin nun denk ich auf dem richtigen Weg.
Ich werde wohl Callback Methoden verwenden, dadurch wären GUI und "Ausführung" getrennt und man könnte ohne viel Aufwand die GUI wächseln.
Wenn der erste Code compiliert ist werde ich ihn hier mal posten, dann könnt ihr das ganze auf Professionalität prüfen:)

Schonmal vielen Dank! Hätte das Projekt ohne diese Denkanstöße wohl nicht mehr fort geführt....
 
Zurück