PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [c++] erst console dann gui?


Supa
2006-11-10, 16:48:34
wollte ein bischen programmieren, und da ich bisher nur grundlagen in c++ kann, und ein bischen theorie, wollte ich erstmal das grundgerüst programmieren quasi auf konsolen ebene und später eine betriebsystem abhängige gui drum herrum(WinCE), zumal ich momentan kaum ahhnung hab von guis.. in wie fern ist es möglich ein prgramm also erst für die console zu progen und später dann in eine gui einzufügen?

die bisherig verwenden libaries sind <iostream>,<time.h>
ich brauche auch fürs grundprogramm nicht irgendwie besondere funktionen, arrays, sortieren und fallbedingungen sollten schon reichen.

RMC
2006-11-10, 17:08:50
in wie fern ist es möglich ein prgramm also erst für die console zu progen und später dann in eine gui einzufügen?

Wenn du objektorientiert programmierst ist es nachher bestimmt kein großer Aufwand die gekapselten Werte deines Objekts in einer GUI anzuzeigen.

Gast
2006-11-10, 17:26:38
da solltest du erst einmal überlegen, wie die Interaktion des Programms mit dem User aussehen soll. Soll das Programm nur Textbotschaften ausgeben? Soll der Benutzer auch Eingaben (z.B. Zahlen) machen können? Soll das Programm z.B. auch Fortschrittsanzeigen ausgeben können?

Ich würde das Programm in drei Teile aufgliedern:
- Hauptprogramm
- User Interface
- Funktionalität

Das Hauptprogramm wäre z.B. ein einfaches int main() oder, wenn du die Win32 API nutzt, ein WinMain(), und hätte nicht viel mehr zu tun als die beiden anderen Teile zu initialisieren.
Dann realisierst du den User Interface Teil z.B. als eine Klasse UIHandler, die Methoden anbietet zur Ein- und Ausgabe, Fortschrittsanzeigen und dgl.
In den Funktionalitätsteil packst du das, was dein Programm eigentlich machen soll. Für Interaktionen mit dem User rufst du dann einfach die entsprechende Methode der UIHandler-Klasse auf.

Die UIHandler-Klasse bildet die Aufrufe ihrer Methodenn dann auf Konsolenfunktionen oder GUI-Funktionen ab. Nimm z.B. an, es gibt eine Methode UIHandler::Output(const char *text). In der Konsolenfunktion kann die dann z.B. so aussehen:

void UIHandler::Output(const char *text)
{
std::cout << text << std::endl;
}

und in der GUI-Version so (Win32):

void UIHandler::Output(const char *text)
{
SetWindowText(hwndTextLabel, text);
}

Im Funktionalitäts-Part rufst du dann einfach immer UIHandler::Output auf, wenn du Text ausgeben willst. Willst du zwischen der Konsolen- und GUI-Version umschalten, mußt du nur die UIHandler-Implementierung (und ggf. das Hauptprogramm) austauschen, den Funktionalitätsteil dagegen kannst du auf diese Weise unverändert übernehmen.

Monger
2006-11-10, 20:33:58
Das ist nicht unbedingt eine C++ spezifische Frage, das Konzept dürfte für alle objektorientierten Sprachen ähnlich sein...

Natürlich musst du an irgendeiner Stelle deine Kommandos an die Oberfläche anpassen. Und so oder so muss man dafür einiges tun. Aber du kannst natürlich deine Elemente soweit abstrahieren, dass du den weitaus größten Teil deines Programms bei einem Wechsel des Benutzerinterfaces nicht anfassen musst.
Da du ja erst alles über Konsole machen willst, brauchst du so eine Art Interpreter, der deine Kommandos in Aktionen umsetzt, und an die richtigen Listener weiterleitet - so wie es unter einer richtigen GUI auch sein würde.

Ich bin jetzt eher auf Java denn auf C++ abonniert, aber meiner Meinung nach ist der Aufwand für eine Konsolenanwendung dermaßen hoch, dass man sich gegenüber einer GUI nicht wirklich viel spart. Am Anfang werden natürlich Knöpfe und Fenster noch sehr wild in der Gegend rumhängen, aber am Anfang soll es ja funktional und nicht schön sein. Deshalb: natürlich kannst du auch später noch die Oberfläche wechseln, aber macht es wirklich Sinn, erst ein Auto zu bauen wenn man später vorhat damit zu fliegen?

Supa
2006-11-11, 16:53:35
hört sich vernünftig an, deswegen: http://www.forum-3dcenter.org/vbulletin/showthread.php?t=332345