Interfaces-Beispiel in der Hilfe korrekt?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Interfaces-Beispiel in der Hilfe korrekt?

Beitrag von Olafmagne »

Jep,
Das Meine ich damit.
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Interfaces-Beispiel in der Hilfe korrekt?

Beitrag von Olafmagne »

Ich glaube, damit kann ich leben.
Habe den Code von Stargate in ein Module gepackt, und kann jetzt auch den Constructor integrieren
und habe private Functionen und Variablen!

Code: Alles auswählen

DeclareModule Vctr
;- Interface

Structure VectorBuffer ; Struktur welche den Methodenpointer und Eigenschaften enthält
	*Methods
	X.f
	Y.f
EndStructure

Interface Vector ; Interface welches später genutzt werden kann
	Set(X.f, Y.f)
	Get.s()
	Length.f()
	Add(*Vector)
	Free()
EndInterface

Declare.i NewVector()
EndDeclareModule

Module Vctr
;- Medoden
Define count.i  
Procedure setcount(c.i)
  Shared count  
  count+c
  Debug "Anzahl = "+Str(count)
EndProcedure

Procedure.i getcount()
  Shared count
  Debug "Anzahl = "+Str(count)
  ProcedureReturn count
EndProcedure 
  
Procedure Vector_Set(*This.VectorBuffer, X.f, Y.f)
	*This\X = X
	*This\Y = Y
	ProcedureReturn *This
EndProcedure

Procedure.f Vector_Length(*This.VectorBuffer)
	ProcedureReturn Sqr(*This\X**This\X+*This\Y**This\Y)
EndProcedure

Procedure.s Vector_Get(*This.VectorBuffer)
	ProcedureReturn StrF(*This\X)+" , "+StrF(*This\Y)
EndProcedure

Procedure.i Vector_Add(*This.VectorBuffer, *Vector.VectorBuffer)
	*This\X + *Vector\X
	*This\Y + *Vector\Y
	ProcedureReturn *This
EndProcedure

Procedure.i Vector_Free(*This.VectorBuffer)
  FreeStructure(*This)
  setcount(-1)
	ProcedureReturn #Null
EndProcedure

Procedure.i NewVector()
	Protected *This.VectorBuffer = AllocateStructure(VectorBuffer) ; Buffer für die Struktur erzeugen und Methodenpointer setzen
	*This\Methods = ?Vector_Methods
	setcount(1)
	; Ggf. andere Strukturfelder setzen
	ProcedureReturn *This
EndProcedure

DataSection
	Vector_Methods:
	Data.i @Vector_Set()
	Data.i @Vector_Get()
	Data.i @Vector_Length()
	Data.i @Vector_Add()
	Data.i @Vector_Free()
EndDataSection

EndModule
UseModule Vctr
;- Beispiel

Define A.Vector = NewVector()
Define B.Vector = NewVector()

A\Set(4, 3)
Debug A\Length()

B\Set(-1, 2)
A\Add(B)
Debug A\Get()
B\Free()
A\Free()
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Interfaces-Beispiel in der Hilfe korrekt?

Beitrag von Olafmagne »

Habe diese Nacht noch ein wenig im Forum gestöbert zu dem Thema,
und bin bei Tutorial auf ein Tutorial von MK-Soft gestossen, das eben genau
diesen Ansatz beschreibt Kleiner OOP Kurs mit Purebasic. Ohne Macros und PreCompilers

sogar mit Vererbung!

Danke an Stargate für die Erklärung des Interfaces
und an MK-Soft für das Tutorial

Damit sind erst mal alle Fragen geklärt!

Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Interfaces-Beispiel in der Hilfe korrekt?

Beitrag von NicTheQuick »

Ich habe übrigens auch mal sowas gemacht: viewtopic.php?t=30902
Bild
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Interfaces-Beispiel in der Hilfe korrekt?

Beitrag von mk-soft »

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Interfaces-Beispiel in der Hilfe korrekt?

Beitrag von Olafmagne »

Werde die Nacht erst mal lesen
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Interfaces-Beispiel in der Hilfe korrekt?

Beitrag von Olafmagne »

Nachdem ich nun eine Weile mit den "Klassen" gespielt habe, gibt es etwas, das ich nicht verstehe.
Es ist doch so:
Eine Procedurendeclaration hat folgendes Schema:

Code: Alles auswählen

Declare PrintInfo(info$,n=0)
Das ganze jetzt in der Klasse sieht so aus

Code: Alles auswählen

 PrintInfo(*This.<class>,info$,n=0)
Aufgerufen wird die Procedure aber ohne den *This-Pointer!

Warum wird das so vom Compiler akzeptiert?

Eigentlich kann ich einen Parameter nicht überspringen beim aufrufen, es müsste doch einen Fehler wegen
Fehler in der Parameteranzahl beim Aufrufer auslösen?

Ok, es Funktioniert, Ich würde nur gerne wissen, warum? Was ist der interne Grund dafür?

Merci Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Interfaces-Beispiel in der Hilfe korrekt?

Beitrag von mk-soft »

Lies mal meine Beschreibung von meinen OOP BaseClass.

Bei einer Methode ist der erste Parameter immer der Zeiger auf das eigene Objekt. Dieser wird automatisch vom Kompiler beim Aufruf der Methode eingesetzt.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Interfaces-Beispiel in der Hilfe korrekt?

Beitrag von Olafmagne »

OK, sowas dachte ich mir schon, geht das auch mit weiteren Parameter, oder nur mit dem *This Zeiger
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Interfaces-Beispiel in der Hilfe korrekt?

Beitrag von mk-soft »

Die weiteren Parameter kannst du wie gewohnt als Optional definieren

' MethodeName(*this.sClass, default = 0)'
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten