AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Globale Variablen in Versch. Units

Ein Thema von Imhotep · begonnen am 21. Nov 2008 · letzter Beitrag vom 21. Nov 2008
Antwort Antwort
Imhotep

Registriert seit: 21. Nov 2008
6 Beiträge
 
#1

Globale Variablen in Versch. Units

  Alt 21. Nov 2008, 17:46
Hallo allerseits,

ich hab folgendes Problem, ich habe jetzt angefangen, Teile meines Programms (die ganzen Funktionen, die noch in der Main-Unit stehen) auszugliedern in andere separate Units zu packen. Das Problem ist, dass ich über die Funktionen sehr oft Globale Variablen Verändere, da ich sie auch in mehreren anderen Prozeduren benötige.

Nun ergibt sich das Problem, dass wenn ich eine Funktion outsource die Unit die Variablen nicht mehr erkennt, bzw. auch Klassen wie :TButton anmeckert.
Ich könnte natürlich jeden Wert einzeln übergeben, allerdings wären das pro Funktion ca 30-40 bei einer sogar über 100 Parameter, was nicht nur den Rahmen sprengt, sondern auch ein Zugriff auf die Variablen per Schleife nicht mehr zulässt, was wiederum den Programmcode an sich übelst verkomplizieren würde.

Meine Frage:

Kann man ganze Arrays an Funktionen übergeben, oder die Arrays so Global definieren, das sie Unitübergreifend werden (was mir am liebsten wäre).
Und wie löse ich das Problem, das er auch Klassen wie TButton erkennt.

greetz Imho

(wenn einer den Programmcode brauch mail ich den auch gerne zu .. )
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Globale Variablen in Versch. Units

  Alt 21. Nov 2008, 18:00
Kennst du die Uses Anweisung?

Damit du in er Unit eine Variable oder einen Typ verwenden kannst, muss die Unit in der es deklariert ist in der uses Klausel auftauchen

Die kannst du auch unter implementation schreiben, um kreuzverweise zu unterbinden.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#3

Re: Globale Variablen in Versch. Units

  Alt 21. Nov 2008, 18:36
das ist natürlich das Standardbeispiel für nicht optimales Programmieren.
Kannst Du nicht versuchen, die Daten und Variablen erstmal zu kategoriesieren um im ersten Schritt erstmal einen record daraus zu machen. Du packst also alle Variablen, die irgendwas thematisch miteinander zu tun haben in einen Record, und diesen kannst Du dann in Deinen Funktionen übergeben. Oder einen Pointer darauf ..

Am besten wäre natürlich, wenn Du die Variablen gleich mal in eine Klasse hineinsetzt.
Erstmal nur als Datenspeicher. Irgendwann wirst Du auch dann den sinn erkenne, Funktionen (Methoden) zu integrieren, die sich nur auf diese einzige Klasse beziehen .. und vielleicht gefällt Dir dann der übergang zum sauberen objektorientierten Programmieren recht gut ..

hmm.. also der erst Tip wäre, die Variablen erstmal in einen Record zu packen ...
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Globale Variablen in Versch. Units

  Alt 21. Nov 2008, 19:18
Und vor allen Dingen Funktion und Darstellung trennen. In einer Routine, die etwas mit Daten anstellt (z.B. Rechnen o.ä.) hat ein Zugriff auf VCL-Komponenten Nichts zu suchen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Imhotep

Registriert seit: 21. Nov 2008
6 Beiträge
 
#5

Re: Globale Variablen in Versch. Units

  Alt 21. Nov 2008, 19:37
kay ich gebe mich geschlagen ^^

ich lass die Funktionen eindach in der Main-Unit

nochmal zur Erklärung:

Als Beispiel hatte ich eine Funktion 'Clear', die die Form komplett gelöscht hat (also Editfelder etc auf Startwert + alle Variablen auf 0) die ich auch öfters mal brauche (bietet sich also eien Funktion an). Dazu MUSSTE ich ja auf die vorhandenen Arrays etc zugreifen.
Da ich nun aber 2 verschiedene 'Clear' Funktionen hätte es sich (meines besten Gewissens ^^) angeboten die in eine eigene Unit zu Stecken.

Und was sauberes Programmieren angeht sei froh das du den Quelltext nicht kennst dir würden wahrscheinlich alle Haare zu Berge stehen XD

aber mit ca 3/4 Jahren SCHUL-Delphi stell ich auch nicht die hohen Ansprüche an meine Programme, besonders, da wir Projekt orientiertes Programmieren eh erst in einem halben Jahr oder so anfangen werden, von Klassen ganz zu schweigen.

aber danke für die Hilfe ich werde mir wenn ich Zeit hab mal nen paar Tutorials zu Klassen und Records durchlesen ..

greetz Imho und nochmal danke
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#6

Re: Globale Variablen in Versch. Units

  Alt 21. Nov 2008, 19:51
Trotzdem solltest du dir die Ratschläge zu Herzen nehmen, wenn du das Programmieren weiter betreiben möchtest. Auch wenn es zunächst unnötig und behindernd erscheint: Es ist der falsche Weg. Und wenn du das erst einmal eine Zeit so falsch gemacht hast, fällt es später schwer sich umzugewöhnen.

Ich spreche aus eigener (schlechter) Erfahrung!
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#7

Re: Globale Variablen in Versch. Units

  Alt 21. Nov 2008, 20:43
fang am besten erstmal mit einfachen klassen an .. Erstmal ohne Vererbung. Vererbung ist eh nicht immer gut das beste. Das kannst Du im nächsten Schritt tun, bzw. wird Dir dann vielleicht auch langsam der Sinn von Objekten und Klassen klar.
Eine Klasse bzw. ein Objekt davon nimmst Du erstmal als reinen Datenspeicher und suchst ein paar sinnvolle Funktionen, die Du mit diesen Daten machen kannst.
Am besten immer als eine BlackBox vorstellen. Du machst irgendwas in sich abgeschlossen. das muss funktionieren, und damit willst Du nie wieder was zu tun haben. Du bist ja faul als Programmierer, und wenn was funktioniert, um was Du Dich nie wieder kümmern musst, bist Du froh.

Am besten schön hierarchisch denken.
erst ganz einfache Objekte und Klassen ganz unten, Objekte obendrüber setzen sich aus diesen einfachen Objekten zusammen, bzw. arbeiten mit diesen. usw...

Datenzugriffe von "oben" nach "unten" können direkt erfolgen .. von "unten" nach "oben" dagegen immer ÜBER EVENTS !!
Das Formular kann die Buttonfarbe einfach ändern ...
der "kleine" Button dagegen informiert das Formular nur, dass es geklickt wurde, der Button würde niemals selbst im Formular Variablen verändern. Weil der Button gar nix weiß von Formularen ..

Und genauso solltest Du auch in der "nicht visuellen" Welt programmieren .. wo es nur um Logik, Daten oder Berechnungen geht ..
Grundklassen am besten gar nicht mit visuellen Hilfen erstellen .. immer schön mit reinen Textausgaben arbeiten, in eine Memo rein ..

object.ToString ist ne schöne Funktion, die jede klasse haben sollte

.
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Imhotep

Registriert seit: 21. Nov 2008
6 Beiträge
 
#8

Re: Globale Variablen in Versch. Units

  Alt 21. Nov 2008, 22:19
wenn ich euch jetzt sage das es nur um ein momentan 600 Zeilen langes Kniffelspiel geht ^^ erklärt ihr mich für verrückt oder .

Das mit Klassen etc. weiß ich das das wichtig und auch notwendig ist (kämpf ich mich da grad in PhP rein wenn auch relativ erfolglos ) Nur für ein 600 Zeilen Programm mit Klassen und allem pipapo zu arbeiten ist wie mit Kanonen auf Spatzen zu schießen, besonders, da die schwerste Rechenoperation wohl das Erstellen einer Zufallszahl darstellt und der Rest sowiso nur if-abfragen und For-Schleifen sind.

So far werde ich das sicher beherzigen nur ist das glaub ich in diesem Fall kaum praktikabel ^^

greetz
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz