Seite 1 von 2

Tipps für größere Projekte (>40000 Programmzeilen)

Verfasst: 04.08.2013 18:33
von SBond
Hallo Leute,

ich arbeite momentan ein einem Programm, das bei Fertigstellung mit hoher Wahrscheinlichkeit 50K bis 80K Programmzeilen haben dürfte. Momentan liege ich bei ca. 10K Programmzeilen und habe noch ein ganzes Stück vor mir. Da ich bis jetzt immer nur kleine Tools geschrieben habe (<15K Programmzeilen), stellt sich mir immer wieder die Frage, wie ich die Programmierstruktur optimiere.

Momentan habe ich meinen Code als Projekt angelegt und in 13 .pb oder .pbi-Dateien zerlegt. Die GUI und die Funktionen habe ich getrennt und die Gliederung der Funktionen hierarchisch aufgebaut.

Ein wenig schwierig wird für mich die sinnvolle Benennung der Konstanten und globalen Variablen. Die Anzahl der globalen Variablen ist noch recht gering, da ich diese nach Möglichkeit vermeide. Anders ist es bei den Konstanten, von denen ich momentan knapp 400 habe und wahrscheinlich bis zu 2K-3K werden könnten.
Aus Unsicherheit habe ich daher relativ lange Konstantennamen verwendet...

als Beispiel:

Code: Alles auswählen

Enumeration
...
...
...
	;{ Reiter -> Oszilloskop
	#AC_GUI_Main__Reiter__Oszi__Reiter
	
	#AC_GUI_Main__Reiter__Oszi__Reiter_Allgemein__Datenerkennung_Button
	
	#AC_GUI_Main__Reiter__Oszi__Reiter_Trigger__Triggermethode_Beschriftung
	#AC_GUI_Main__Reiter__Oszi__Reiter_Trigger__Triggermethode_Combo
	
	#AC_GUI_Main__Reiter__Oszi__Reiter_Trigger__Triggerwert_Beschriftung
	#AC_GUI_Main__Reiter__Oszi__Reiter_Trigger__Triggerwert_Combo
	
	
	#AC_GUI_Main__Reiter__Oszi__Reiter_Frequenzmessung__Torzeit_Beschriftung
	#AC_GUI_Main__Reiter__Oszi__Reiter_Frequenzmessung__Torzeit_Combo
	
	#AC_GUI_Main__Reiter__Oszi__Reiter_Frequenzmessung__Frequenzwert_Beschriftung
	#AC_GUI_Main__Reiter__Oszi__Reiter_Frequenzmessung__Frequenzwert_Combo
	
	#AC_GUI_Main__Reiter__Oszi__Reiter_Frequenzmessung__Frequenz_Beschriftung
	#AC_GUI_Main__Reiter__Oszi__Reiter_Frequenzmessung__Frequenz
	
	#AC_GUI_Main__Reiter__Oszi__Reiter_Frequenzmessung__Messzeit_Beschriftung
	#AC_GUI_Main__Reiter__Oszi__Reiter_Frequenzmessung__Messzeit_progress
	;} Reiter -> Oszilloskop


	;{ Reiter -> Verbindungen
	#AC_GUI_Main__Reiter__Verbindung__COM_Port_Beschriftung
	#AC_GUI_Main__Reiter__Verbindung__COM_Port_Combo
	
	#AC_GUI_Main__Reiter__Verbindung__Baudrate_Beschriftung
	#AC_GUI_Main__Reiter__Verbindung__Baudrate_Combo

        ....

	;} Reiter -> Verbindungen
...
...
...
EndEnumeration
Mit dieser Methode kann ich immer schnell und zweifelsfrei das zugehörige Gadget identifizieren, ohne suchen zu müssen. Allerdings schadet es der Übersichtlichkeit bei langen Programmzeilen.


Habt ihr einige Tipps für mich, wie ich meinen Code am besten strukturiere?
Wie viele Programmzeilen hatten eure größten Projekte und wie habt ihr diese verwaltet und aufgebaut?

lg
SBond

Re: Tipps für größere Projekte (>40000 Programmzeilen)

Verfasst: 04.08.2013 18:49
von STARGÅTE
So wie ich die Konstanten lese, ist es ja stark wie ein Baum aufgebaut.

Eine Idee zur Vereinfachungen wäre, garkeine festen Konstanten mehr zu nutzen, sondern lieber eine Baumstruktur:

Code: Alles auswählen

Structure GUI_Window1_Container1
	Number.i
	Gadget1.i
EndStructure

Structure GUI_Window1
	Number.i
	Container1.GUI_Window1_Container1
EndStructure

Structure GUI
	Window1.GUI_Window1
EndStructure

Global GUI.GUI
Beim Erstellen der Gadgets hast du dann trotzdem den Überblick der Strukturierung:

Code: Alles auswählen

GUI\Window1\Container1\Gadget1 = ButtonGadget(#PB_Any, ...)
kannst dann aber später, wenn du in einem Unterbereich bleibst, das ganze mit With oder einem Pointer abkürzen:

Code: Alles auswählen

With GUI\Window1\Container1
   Select EventGadget()
      Case \Gadget1
   EndSelect

Code: Alles auswählen

*Container1.GUI_Window1_Container1 = GUI\Window1\Container1
Select EventGadget()
   Case *Container1\Gadget1
EndSelect

Re: Tipps für größere Projekte (>40000 Programmzeilen)

Verfasst: 04.08.2013 19:36
von SBond
ja, die Konstanten haben momentan eine Baumstruktur.

Mit Structure habe ich bisher kaum gearbeitet. Daher fällt mir die Anwendung noch etwas schwer. Gibt es da irgendwelche Einschränkungen oder Probleme die damit auftreten könnten? ....also, dass es in irgendwelchen Funktionen zu Fehlern kommt, da eine Structure nicht unterstützt wird ...oder so ähnliches?


...achja... ich bekomme einen POLINK error, wenn ich deinen Code kopiere und ihn versuche zu kompilieren (x86)

Nachtrag: der 64-Bit kompilier macht keinen Fehler. ...waran liegt das eigentlich? Der 32-Bit kompiler bringt ein Linker-Fehler :(

Re: Tipps für größere Projekte (>40000 Programmzeilen)

Verfasst: 04.08.2013 19:41
von lite
Hallo

Schalte dein Antivirus aus.

Lite

Re: Tipps für größere Projekte (>40000 Programmzeilen)

Verfasst: 04.08.2013 19:48
von NicTheQuick
Structures bringen keine Nachteile, höchstens Vorteile. Sie sind ein wichtiger Bestandteil der Programmierung. Sie kapseln einfach mehrere Variablen unterschiedlichen Typs in einen neuen Typ bzw. eben einer Structure, die man dann wie einen Typ benutzen kann.

Du solltest dir die Vorteile von Structures einmal aneignen. Womöglich fallen dir dann direkt viele Stellen ein, an denen du sie sinnvoll nutzen kannst. :wink:

Re: Tipps für größere Projekte (>40000 Programmzeilen)

Verfasst: 04.08.2013 21:56
von SBond
ja, danke nochmals für die Tipps. :D

Ich werde mich damit mal beschäftigen ;)

Re: Tipps für größere Projekte (>40000 Programmzeilen)

Verfasst: 05.08.2013 03:08
von PMV
Du könntest dich auch schon mal mit Modulen vertraut machen.
Bis zur final der 5.20 wirds wohl noch ein wenig dauern, aber
um so eher du dich damit beschäftigst, um so leichter wirds
den Code daraufhin um zu bauen. :wink:

MFG PMV

Re: Tipps für größere Projekte (>40000 Programmzeilen)

Verfasst: 05.08.2013 13:04
von SBond
In wie fern meinst du das mit den Modulen?

Momentan versuche ich die ganzen Konstanten in Structures zu wandeln. Die Ansicht ist noch ein wenig gewöhnungsbedürftig, aber ich hoffe es war eine gute Entscheidung.

Re: Tipps für größere Projekte (>40000 Programmzeilen)

Verfasst: 05.08.2013 14:54
von STARGÅTE
Es geht dabei ja nicht nur um Konstanten, du kannst ja auch die Inhalte/Werte von deinen Gadgets darin speichern.

Wenn du zB ein StringGadget hast, in dem immer eine Fließkommazahl steht, dann musst du ja nicht immer:
MeinWert.f = ValF(GetGadgetText(#AC_GUI_Main__Reiter__Oszi__Reiter_Frequenzmessung__Frequenz))
schreiben um an den Wert zu kommen.

Seit der neuen PB Version gibt es BindGadgetEvent().
Damit kannst du autoamtisch eine Prozedur anspechen lassen, welche bei einer Änderung den Wert ausließt und auch in der Struktur speichert.
Dann kannst du auch mit
GUI\Window1\Container1\FrequencyValue
direkt auf den Wert zugreifen, welcher dann auch immer aktuell ist, wenn du BindGadgetEvent() nutzt.

Das ist aber nur eine Art Ausblick für dich, was möglich ist.
Ansonsten solltest du dich erst mal mit kleinen "Zwischenprojekten" in die Strukturen einarbeiten.

Re: Tipps für größere Projekte (>40000 Programmzeilen)

Verfasst: 05.08.2013 16:24
von SBond
Die Zusammenfassung von Gadgets und Daten ist echt eine super sache. Vorher habe ich es zum Teil mit Arrays gelöst, aber mit Structures ist es doch um einiges besser.

BindGadgetEvent() ist mir noch gar nicht bekannt. Das ist aber wirklich interessant. Wo hast du diese Infos her? Ich arbeite sehr stark mit der deutschen Hilfe zusammen, aber ich treffe in Foren immer wieder auf neue praktische Funktionen, die in der Hilfe nicht aufgeführt sind. ...man.. ich fühle mich manchmal wie ein Anfänger :(