OOP: "Echte" Klassen in BlitzMax, aber wie?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

lordlomex

Betreff: OOP: "Echte" Klassen in BlitzMax, aber wie?

BeitragSo, Feb 15, 2009 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich verstehe die Klassen/Types in Blitzmax nicht

Also ich habe in den letzen Jahren sehr viel python programmiert und dort funktioniert eine Klasse wie folgt
- Man kann eine Klasse anlegen mit "class Xyz (elternklasse):"
- man sollte eine constructor-funktion erstellen, die die parameter der klasseninitialisierung bestimmt
also "def __ini__(self, asd, asd):"
- Man kann ein Objekt der klasse anlegen mit "asd=Xyz(asd,asd)"
- und dieses Objekt hat dann alle memberfunktionen und variablen der Klasse also geht denn "asd.neumalen(screen)" oder "if asd.getPoint(12,12) == 3: ..."

Diese letze funktionalität habe ich in Blitzmax noch nicht gefunden.
In den Beispielen wird offenbar in einem type eine funktion angelegt, die ein weiteres type zurückliefert, ich will aber ein objekt der klasse wo die funktion drinne ist und nicht ein anderes objekt sonst kann ich mir die klasse ja gleich sparen.

Kann mir jemand erklären, wie man das "richtig" macht (Oder ein Codebeispiel posten in dem es die klassen richtig verwendet werden)?

Vielen Dank im Voraus!


Gruß Lomex

BladeRunner

Moderator

BeitragSo, Feb 15, 2009 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
SuperStrict
Type TTest
   
   Global blub:Int
   
   Field bla:Int
   
   Function Create:TTest(b:Int)
      Local t:TTest = New ttest
      t.bla = b
       return t
   End Function
   
   Method showbla()
      Print bla
   End Method
End Type

Local test:ttest = TTest.create(5)
test.showbla()

Erstellt mittels Create als konstruktor die neue instanz und gibt sie zurück.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

lordlomex

BeitragSo, Feb 15, 2009 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
SuperStrict
Type TTest
[...]
   Function Create:TTest(b:Int)
      Local t:TTest = New ttest
      t.bla = b
       return t
   End Function
[...]
End Type


Achso! Die Create-Methode stellt man manuell darauf ein, das sie ein Objekt ihrer Klasse erzeugt, ja?
Das ist einleuchtend (auch wenn ich es sinnvoller finde, wie in python die create-funktion selbständig das neue objekt zerückliefert).

Vielen Dank für das einfache Beispiel, eine Frage hätte ich aber noch: bei "New ttest" ist ttest klein geschrieben, ist das in diesem Falle egal (weil bei der angabe des datentyps ist es ja groß)?

DaysShadow

BeitragSo, Feb 15, 2009 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ist egal, da BlitzMax im Gegensatz zu z.B C++ nicht "DasWortDasIchVergessenHabe" (Case-Sensitive?) ist.
BlitzMax ist es egal ob man groß oder klein schreibt, es ist immer das selbe, bei C++ z.B darf man das nicht,
da wären Var1 und var1 unterschiedliche Variablen soweit ich weiß.

MfG DaysShadow

Jolinah

BeitragMo, Feb 16, 2009 2:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei BlitzMax gibt es leider nur einen parameterlosen Konstruktor:

Code: [AUSKLAPPEN]
Type TTest
  Field list:TList

  Method New()
    list = new TList
  End Method

End Type


Dieser macht das, was du erwartet hast. Da er aber wie gesagt keine Parameter enthalten darf, verwendet man meistens eine eigene statische Methode bzw. Funktion (siehe Post von BladeRunner) mit den benötigten Parametern, die das Objekt entsprechend initialisiert.

Der Name dieser Funktion ist natürlich frei wählbar, aber Create hat sich so ein bisschen "eingebürgert" und wird in der IDE zudem wie ein Schlüsselwort hervorgehoben.
 

lordlomex

BeitragMo, Feb 16, 2009 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank das beantwortet auch meine letzen Fragen.

Gruß Lomex

Farbfinsternis

BeitragDi, Feb 17, 2009 9:53
Antworten mit Zitat
Benutzer-Profile anzeigen
DaysShadow hat Folgendes geschrieben:
Ja, ist egal, da BlitzMax im Gegensatz zu z.B C++ nicht "DasWortDasIchVergessenHabe" (Case-Sensitive?) ist.
BlitzMax ist es egal ob man groß oder klein schreibt, es ist immer das selbe, bei C++ z.B darf man das nicht,
da wären Var1 und var1 unterschiedliche Variablen soweit ich weiß.

MfG DaysShadow

Nicht ganz richtig. Wenn man, wie empfohlen, im SuperStrict Mode programmiert meckert BMax schon wenn ich "Variable" anstelle der deklarierten "varIAble" schreibe.
Farbfinsternis.tv

BladeRunner

Moderator

BeitragDi, Feb 17, 2009 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
ach ja, farbfinsternis? bei mir tut es das nicht.
superstrict achtet nur auf die korrekte initialisierung mit scope und typ, nicht auf Gross-und Kleinschreibung.

Code: [AUSKLAPPEN]
SuperStrict

Local test:Int = 5
Print test
Print Test
Print teSt

compiliert bei mir ohne murren und knurren. BMax ist nicht case-sensitive (Ausser Modulnamen unter Linux und MacOS)
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Farbfinsternis

BeitragMi, Feb 18, 2009 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Da hast Du absolut recht. Ich nehme alles zurück und behaupte das Gegenteil Wink

Anscheinend hat mir mein Wissen um das case-sensitive bei Module-Scopes was total Blödsiniges eingeredet Smile
Farbfinsternis.tv

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group