Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Programmierstil und Struktur

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.11.2004, 18:15 Uhr
~Starfish
Gast


Hi Leute!

Habe mich jetzt etwa 2 Jahre einigermaßen mit C++ beschäftigt. Ein Kumpel und ich haben jetzt ein größeres Projekt vor, welches wir in WinAPI schreiben möchten. Wir haben jedoch schnell festgestellt, das so eine cpp datei ganz schnell groß und unübersichtlich werden kann.
Ich habe mir mal ein paar Quellcodes von Open Source Programmen gesaugt. Die Projekte bestehen meistens aus etwa 10 .cpp und .h Dateien. An sich würde ich das Programm auch gerne in mehrere .cpp und .h dateien aufteilen, nur wie macht man das eigentlich genau? Gibt es da bestimmte Regeln für, das Ordentlich und strukturiert unterzubringen?

Also ich würde auf jedenfall Klassendeklarationen in eigene Dateien Packen.
Habt ihr sonst noch vorschläge?

Danke im voraus.
Gruß Starfish
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.11.2004, 21:02 Uhr
ao

(Operator)


Ein verbreiteter Ansatz ist, das Projekt in funktionelle Blöcke zu unterteilen. Beispiel: Wir schreiben einen MP3-Player, sowas wie Winamp. Der muss folgendes können:

1. MP3-Datei von Festplatte öffnen und einlesen (mit Hilfe von WinAPI-Funktionen)
2. MP3-Dekompression (mit einer MP3-Decoder-Bibliothek)
3. Soundkarte finden und öffnen und den dekomprimierten Wave-Datenstrom ausgeben (wieder mit Hilfe von WinAPI-Funktionen)

und er muss eine Oberfläche haben, die das alles bedienbar macht.

Das wären die Minimal-Funktionen. Geschickt wäre es nun, alles, was mit dem Öffnen und Einlesen von Dateien zu tun hat, in eine Klasse zu packen. In eine andere Klasse die Handhabung des MP3-Codecs und in eine dritte Klasse die Bedienung der Soundkarte.

Eine weitere Klasse enthält die Programmlogik; diese verknüpft die bisher erwähnten Klassen in geeigneter Weise: Zuerst die Vorbereitung: Soundkarte "öffnen" und belegt halten und den MP3-Codec initialisieren. Dann die MP3-Datei öffnen, kurz sicherstellen, dass es sich wirklich um ein MP3-File handelt und dann blockweise lesen. Die komprimierten Daten in den Codec stopfen und dekomprimiert wieder abholen und ins Sound-Device schicken. Wenn die Datei am Ende ist, alles schließen.

Alle diese Klassen können oberflächenfrei sein. Die alles verbindende Oberfläche kommt in eine oder mehrere weitere Klassen, aber spätestens hier kommt dann meist MFC oder ein anderes Toolkit ins Spiel, was den Projektaufbau maßgeblich beeinflusst.

Wichtig ist, dass jede Klasse ihr "Kerngeschäft" hat, was sie sauber realisiert, und sich aus den "Nebensachen" ebenso konsequent raushält. Falsch ist zum Beispiel, wenn die MP3-Codec-Klasse darauf angewiesen ist, dass ihr ein geöffnetes Sounddevice übergeben wird, auf dem sie Töne direkt ausgeben kann. Solche Abhängigkeiten sind möglichst zu vermeiden, weil sie es sind, die ein Projekt kompliziert machen. Das Prinzip ist "Teile und herrsche" und lass nicht zu, dass jeder den anderen kennt, denn dann beginnt der Filz.

Oder, wenn du sowas wie Multithreading brauchst, ist es eine gute Idee, die Kernfunktionen (Thread erzeugen, im Thread-Kontext eine Arbeitsroutine laufenlassen, Thread wieder zerlegen) in eine Basisklasse auszulagern. Dann kannst du sie immer wieder verwenden, mit einer dem Zweck angepassten Arbeitsroutine.

Viel Erfolg für euer Projekt

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: