Autor |
Beitrag |
Kaspall
      
Beiträge: 65
Erhaltene Danke: 10
|
Verfasst: Mi 22.12.10 17:25
Hallo, ich hab folgendes Problem:
Um mein Programm etwas übersichtlicher zu gestaltet würd ich gern Teile des codes auslagern: Gut, ich weiß wie man Funktionen/Proceduren in andere units steckt oder auch in DLLs,
also GRDUNSÄTZLICH kein Problem.
Das Problem das sich mir stellt ist das alle meine Proceduren auf globale Variablen und Komponenten der Exe-Hauptunit mit der Form zurückgreifen. Wenn ich jetzt eine neue Unit2 mache kann ich dort in die uses unit1 reinschreiben, dann kann aich das alles schön verwenden, aber wenn ich dann in der Unit1 unter uses Unit2 dazuschreibe verstreut Delphi beim Kompilieren Fehlermeldungen raus.
Und ja, ich weiß ich kann Variablen übergeben, nur sind in meinem Programm ca pro Procedure ca 200-300 Stück und das geht mir echt gegen den Strich das alles einzeln zu übergeben =)
Es muss doch eine Lösung für dieses "einfache" Problem geben.
lg kaspall Moderiert von Narses: Topic aus VCL (Visual Component Library) verschoben am Mi 22.12.2010 um 22:28
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 22.12.10 17:33
200 Variablen in einer Prozedur? Wie lang sind die denn?  Es gibt hier Leute, die der Meinung sind, dass eine Prozedur nie länger als ein oder zwei Bildschirmseiten sein sollten - da passen 200 Variablen gar nicht rein.
Sieht nach einem sehr grundlegenden Konzeptproblem aus. Strukturiere dein Programm besser, verwende mehr und dafür kürzere Prozeduren und Funktionen. Trenne die Darstellung im Fenster von den eigentlichen Daten und Variablen. Verwende Klassen, die einen Teil der Aufgaben selbst erledigen (OOP halt). Oder fasse zumindest ein paar Variablen in Records zusammen.
_________________ We are, we were and will not be.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 22.12.10 17:38
Kaspall hat folgendes geschrieben : | Komponenten der Exe-Hauptunit mit der Form zurückgreifen |
Ja, es ist auch nicht gut auf visuelle Komponenten außerhalb der GUI zuzugreifen. Für die visuelle Darstellung ist die GUI verantwortlich, für die Daten und die Logik ein anderer Teil des Projekts.
Das solltest du zumindest ein wenig trennen. Das geht wie Gausi schon geschrieben hat mit OOP z.B. recht gut. Das macht das ganze auch gleich viel übersichtlicher.
Schau dir z.B. einmal das MVC-Konzept an:
de.wikipedia.org/wik...odel_View_Controller
(Es muss ja nicht gleich so formal sein, aber die Idee ist das entscheidende.)
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Mi 22.12.10 18:23
Gausi hat folgendes geschrieben : | 200 Variablen in einer Prozedur? Wie lang sind die denn? |
Mir tut vor allem der Stack leid, der das dann alles aufnehmen muss.
Zu dem Problem mit dem Uses: das kannst du lösen, indem du in Unit2 die Unit1 in die uses-Klausel im interface-Teil aufnimmst. In Unit1 integrierst du Unit2 aber über die uses-Klausel im implementation-Teil, so wie Delphi das automatisch macht, wenn du auf Formulare in anderen Units zugreifst.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 22.12.10 18:27
Diese "Lösung" hatte ich jetzt absichtlich nicht genannt.
Das führt nur dazu, dass am Konzept nichts verbessert wird und die Unübersichtlichkeit nur ein wenig auf mehrere Units verteilt wird und damit noch unübersichtlicher wird.
|
|
Chemiker
      
Beiträge: 194
Erhaltene Danke: 14
XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
|
Verfasst: Mi 22.12.10 19:50
Hallo Kaspall,
Zitat: | Und ja, ich weiß ich kann Variablen übergeben, nur sind in meinem Programm ca pro Procedure ca 200-300 Stück |
Donnerwetter, hast Du Dir vorgenommen in das Guinness-Buch der Rekorde zu kommen? Jetzt mal im ernst, wie behältst Du da den Überblick? Vielleicht stellst Du hier mal eine Procedure ein die 300 Variablen benutzt.
Bis bald Chemiker
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Mi 22.12.10 20:04
Möglicherweise wäre es hier angebracht, entweder mit globalen Variablen oder mit records zu arbeiten. 300 Argumente sind jedenfalls 290 zu viel.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 22.12.10 20:46
Jakob_Ullmann hat folgendes geschrieben : | Möglicherweise wäre es hier angebracht, entweder mit globalen Variablen oder mit records zu arbeiten. 300 Argumente sind jedenfalls 290 zu viel. |
Bitte nicht. 200 bis 300 globale Variablen? Das ist schon Folter für denjenigen, der das Programm mal warten soll. Außerdem ist von der Genfer Konvention verboten.
Strukturiere dein Programm besser. Nutze Klassen, denen du die erforderlichen Daten als Properties übergibst, wenn sie in mehreren Methoden benötigt werden.
Und eventuell solltest du dir mal den Datentyp Arry angucken.
|
|
Kaspall 
      
Beiträge: 65
Erhaltene Danke: 10
|
Verfasst: Do 23.12.10 00:11
Lol, also um aufzuklären, ich schreib hier ein Grafikprogramm mit OpenGL, und da ergeben sich halt schnell mal mehrere booleans, Zahlen und nen haufen Objekte meiner bereits 20 Klassen. Grad die Rendermethode(n) habens massiv in sich und fressen das Zeug das es nur so raucht! Hab hier ne 1200-Zeilen-Methode!
hehe, hab mich sehr ammüsiert über eure Antworten^^. und danke für den Tipp mit dem richtigen uses^^
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Do 23.12.10 00:23
1200 Zeilen  , das lässt sich bestimmt auch kürzer bzw. in kleinere Methoden unterteilen oder?
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 23.12.10 00:53
Kaspall hat folgendes geschrieben : | Hab hier ne 1200-Zeilen-Methode! |
Jede Wette, so bald du ein Problem bekommst, wirst du dich freuen wenn du diese 1200 zeilen debuggen darfst.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Do 23.12.10 11:40
Hey,
ich arbeite auch relativ oft mit OpenGL, und ich hab noch nie ne Render-Prozedur über 1000 Zeilen hin bekommen. Ich bin genau der gleichen Meinung wie meine Vorredner: man kann das alles in Klassen organisieren. Mein 1. OpenGL Programm war auch totales Chaos und da ich die das Ganze ersparen will, geb ich dir den Rat: Denk nochmal über dein Konzept nach. Wenn das möglich is kannst du die Unit (oder nur ne TXT mit der Render-Prozedur) auch mal hochladen, da könn wir dir sicher ein paar Tips geben.
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|