Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Warum OOP?

von RedakteurytwinkySeite 2 von 5

Ein Berg von Variablen wird in eine einzige Struktur geworfen und wie ein Paket wird das Ganze an die SUB gesandt, was bedeutet, dass nur ein Parameter übergeben werden muß(oder vielleicht einige), anstelle von 20.

Type meinUDT
  As Integer a, b, c, d, e, f, g, h, i, j
End Type

'Welcher Aufruf sieht denn besser aus?
Sub mySub1 (param1 As meinUDT)
End Sub

Sub mySub2 (a As Integer, b As Integer, c As Integer, d As Integer ...)
End Sub

Aber es gibt noch einen anderen Faktor, der beachtet werden will. Das ist der Geltungs-Bereich(SCOPE). Zu Anfang war Alles global. Das heißt, für ein Programm wurde eine Variable erzeugt

110 Dim A As String = "ICH BIN DOOF."
120 Print A
130 Goto 120

und die Variable wäre überall im gesamten Programm verfügbar. Das war natürlich ganz normal, da es ja keine Prozeduren gab und so war es natürlich witzlos irgendetwas vor irgendeinem Teil des Programms verstecken zu wollen. Aber nachdem die strukturierte Programmierung entstanden war, wurde es sinnvoll, Variablen innerhalb der Prozeduren zu erstellen, die nicht unbedingt erreichbar waren(tatsächlich mußten sie ja auch nicht existieren). Dann wäre es möglich, in einem Hauptprogramm eine Variable X zu haben und ebenfalls eine Variable X in einer Prozedur und es wären zwei völlig verschiedene Variablen und keine könnte auf die andere zugreifen.
Falls das Hauptprogramm der Prozedur Informationen geben sollte, die in der Prozedur nicht vorhanden waren, konnten sie einfach als Parameter an die Prozedur übergeben werden. Aber das hat nicht immer funktioniert, darum lagen immernoch irgendwo einige globalen Variablen herum:

Dim Shared As Integer meineZahl

Sub meineSub
  Print meineZahl
End Sub

meineZahl = 3
meineSub
meineZahl = 5
meineSub

Der Variablenname bleibt hier derselbe Variablenname, egal ob innerhalb der Prozedur oder nicht. Und viele Leute dachten auch, das wäre großartig, da es ja so nicht nötig wäre, eine Riesenmenge von Parametern an Prozeduren zu senden, bzw. von denen zu empfangen(diese Leute wußten damals eben natürlich noch nichts von UDTs).
Aber da gibt es ein kleines Problem. Was ist denn, wenn es EINE globale Variable gibt und ZWANZIG Prozeduren, die darauf zugreifen oder sie sogar verändern? Wer weiß, was dann passiert? Nehmen wir an, ein Kontoführungsprogramm einer Bank speicherte den Kontostand eines Kunden in einer globalen Variablen. Ein Fehler kann bei dem ganzen Code immer und überall auftreten und plötzlich stellt der Kunde fest, daß der Kontostand nicht mehr ausgeglichen ist, sozusagen weit davon entfernt. Aber welches dieser 20 Unterprogramme hat ihn jetzt durcheinandergebracht? Nicht zu vergessen, dies ist ein Finanzprogramm, das möglicherweise aus zig-Codezeilen besteht, von denen jede einzelne den Kontostand beeinflussen könnte. Das würde stundenlange Debugging-Sitzungen für den Programmierer bedeuten.
Falls nun der Eindruck entstanden sein sollte, dass ich nur über Geschäftsprogramme spreche - was ist mit Spielen? Was wäre, wenn die Sprite-Position x und y in globalen Variablen gespeichert würde, es gäbe 20 verschiedene Prozeduren, die das Sprite bewegen und auf den Schirm zeichnen und auf einmal ist es irgendwo auf dem Bildschirm, nur nicht dort, wo es eigentlich sein sollte? Was dann? Und welche Prozedur hat das dann gemacht?

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 31.01.2008 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 13.08.2010 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen