Meinungen zur Programmierpraxis von C ++

8

Ich habe ein Programm, das ich schreibe, nicht zu groß. Abgesehen von der Hauptfunktion hat es etwa 15 weitere Funktionen, die zu verschiedenen Zeiten verschiedene Aufgaben erfordern. Der Code funktioniert einwandfrei in einer Datei und genau wie jetzt.

Ich habe mich jedoch gefragt, ob irgendjemand Ratschläge hätte, ob es klüger / effizienter / besser ist, diese Funktionen in einer anderen Datei zu speichern, als in der Hauptsache, oder ob es überhaupt wichtig ist. Wenn ja, warum? Wenn nein, warum nicht?

Ich bin nicht neu in C ++, aber definitiv kein Experte, also wenn Sie denken, dass diese Frage dumm ist, können Sie mir das auch sagen.

Danke für Ihre Zeit!

    
Sagar 19.04.2010, 14:23
quelle

8 Antworten

7

Hängt davon ab, wie groß diese Funktionen sind. Wenn Ihre Quelldatei beginnt, mehrere hundert Zeilen Code in der Länge zu erhalten, gibt es Grund, einen Teil der Funktionalität in eine (oder mehrere) separate Datei (en) zu extrahieren.

Wenn Sie die Funktionen basierend auf ihren Verantwortlichkeiten und / oder ihrer Abstraktionsebene in verschiedene Gruppen einteilen können, möchten Sie sie vielleicht lieber in verschiedene physische Dateien (und natürlich in Klassen) aufteilen. Z.B. Einige Funktionen funktionieren möglicherweise mit Datei-I / O, während andere einige Berechnungen ausführen. Oder einige Funktionen führen Low-Level-Bit-Chipping-Vorgänge innerhalb von Datei-I / O durch, während andere Funktionen auf dem ersten basieren, um etwas abstraktere Funktionalität zu implementieren.

Ein weiterer Grund für die Partitionierung Ihres Codes wäre, wenn einige der Funktionen von mehr als einem Client verwendet würden. Dies gilt jedoch offensichtlich nicht für Ihren Fall. (Dies wird sich jedoch wahrscheinlich ändern, wenn / wie Ihre App in der Zukunft weiterentwickelt und erweitert wird ...)

    
Péter Török 19.04.2010, 14:26
quelle
3

Es ist gut, Ihren Code in verschiedene Dateien auf der Grundlage ihrer Ähnlichkeit zu trennen. Sie können es nach Klassen aufteilen, wenn Sie mehrere Klassen haben. Wenn Sie mehrere Funktionen haben, die in anderen Programmen verwendet werden können, sollten Sie sie für die Portabilität in eine eigene Datei einfügen.

    
Jonathan Swinney 19.04.2010 14:28
quelle
2

Da Sie nur Funktionen erwähnt haben, gehe ich davon aus, dass Ihr Programm nicht objektorientiert ist. Wenn ja, würde ich empfehlen, eine Klasse pro .h / .cpp-Paar zu haben. In Ihrem Fall hängt es davon ab, ob diese Funktionen in zwei oder mehr Teilmengen gruppiert werden können. Wenn das der Fall ist, würde ich verwandte Funktionen in getrennten .cpp-Modulen zusammenfassen und immer einen entsprechenden .h-Header haben, der ihre Prototypen enthält.

Alle 15 Funktionen im selben Modul sind nicht unbedingt korrekt oder falsch. Wenn sie alle stark verwandt sind, sollten sie wiederum zum selben Modul gehören. Eine weitere zu bestimmende Regel ist die Modulgröße selbst. Ich finde es schwierig, ein Modul zu verwalten, das auf mehr als 1000 Zeilen angewachsen ist, dieser Schwellenwert ist ein Warnzeichen, dass es aufgeteilt werden sollte. Diese zwei Dinge sind verwandt, normalerweise wenn das Modul so groß wird, hat es wahrscheinlich auch zwei oder mehr verschiedene Gruppen von Funktionen.

    
Fabio Ceconello 19.04.2010 14:58
quelle
1

Unter der Annahme, dass jede Funktion ziemlich klein ist, macht es keinen Sinn, sie zwischen Dateien, IMO, aufzuteilen.

Wenn Funktionen mehrere hundert Zeilen Code enthalten, ist es möglicherweise besser, sie zu trennen. Vor allem, weil es es einfacher macht, wenn / wenn Sie das Programm erweitern.

    
Goz 19.04.2010 14:26
quelle
1

Ich bin versiert darin, nur Header zu verwenden, wenn es möglich ist. Es ist effizienter, da der Compiler auf diese Weise mehr Optimierungen durchführen kann, da die Compilierungszeiten länger sind. Aber Sie haben den gleichen Vorteil, wenn Ihr Programm vollständig in einer einzigen Quelldatei enthalten ist.

Wenn Sie jedoch beabsichtigen, Ihren Code wiederzuverwenden, ist es sinnvoll, ihn in logische Einheiten aufzuteilen. Systematische Aufteilung zwischen Klassen unabhängig von Abhängigkeiten oder logische Einheit könnte sogar eine schlechte Praxis sein (gut, in einigen anderen Sprachen wie Java haben Sie nicht viel Auswahl ...).

    
kriss 19.04.2010 14:31
quelle
1

Ich würde sagen, wenn Sie am Ende Strg + F brauchen, um die gesuchte Funktion zu finden, ist es wahrscheinlich an der Zeit, die Datei zu öffnen.

Auch wenn Sie Strg + F verwenden müssen, um einen bestimmten Code in einer langen Funktion zu finden, ist es wahrscheinlich an der Zeit, ihn in mehrere Funktionen zu trennen (oder mehr zu schreiben) prägnanter Code).

Bugs sind viel schwieriger zu finden (und zeitaufwendiger zu reparieren), wenn Sie viel Zeit damit verbringen müssen, den Code zu durchsuchen.

Wenn Sie jedoch Dateien oder Funktionen aufteilen, versuchen Sie, sie auf sinnvolle Weise zu trennen. und nicht nur für dich, sondern auch für den durchschnittlichen Menschen. Angenommen, Sie sind die einzige Person, die sich Ihren Code ansieht, ist dumm. Wenn Sie nach einigen Jahren Abwesenheit wieder zum Projekt zurückkehren, können Sie sehr wohl eine andere Person sein als jetzt.

    
Tim Leaf 19.04.2010 19:29
quelle
0

Man könnte annehmen, dass größere Programme, wie sie kommerziell entwickelt werden, ihren Code in mehr als einer Datei speichern. Können Sie sich die Größe dieser Datei vorstellen? Es ist eine gute Idee, solche guten Praktiken auch auf kleine Projekte auszuweiten.

Was den Code betrifft, macht es normalerweise überhaupt keinen Unterschied, wo sich der physische Code befindet, da er am selben Ort landet (Ihre gemeinsame Bibliothek / DLL oder ausführbare Datei).

    
Ether 19.04.2010 14:56
quelle
0

Wenn Sie das Gefühl haben, dass Sie einen Teil des Codes in einer anderen Anwendung wiederverwenden, dann teilen Sie diesen Teil in verschiedene Dateien (Header und Implementierung).

Abgesehen davon, IMO, nicht stören.

M.

    
Max 19.04.2010 17:11
quelle

Tags und Links