Interface mit Daten (Beispiel für PB4)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Interface mit Daten (Beispiel für PB4)

Beitrag von mk-soft »

Wollte mir ein eigendes Objekt mit Datenablage erzeugen. Das Beispiel bei PB4 mit DataSection war ein bischen mau. Habe ein wenig mit gespielt und folgendes kam zum Testen heraus.

Code: Alles auswählen

;-Top
; Kommentar    : Interface mit Daten
; Author       : mk-soft
; Erstellt am  : 18.03.2006
; Geändert am  :


;- Strukturen
Structure udtSelf
  ; Virtuelle Tabelle
  VTable.l
  ; Daten
  text1.s
EndStructure

;- Interfaces
Interface MyObject
   DoGet.s()
   DoPut(a.s)
EndInterface

; ---------------------------------------------------------

Procedure CreateMyObject()

  Protected *v.udtSelf
  
  *v = AllocateMemory(SizeOf(udtSelf))
  *v\VTable = ?Procedures
  ProcedureReturn *v
  
EndProcedure

; ---------------------------------------------------------

Procedure.s iGet(*Self.udtSelf)
   
  ProcedureReturn *Self\Text1
  
EndProcedure

; ---------------------------------------------------------

Procedure iPut(*Self.udtSelf, Text.s)

  *Self\Text1 = Text
  
EndProcedure

;- Test

obj1.MyObject = CreateMyObject()
obj2.MyObject = CreateMyObject()

obj1\DoPut("Hallo Welt")
obj2\DoPut("Alles Gute")

Debug "Obj2: " + Obj2\DoGet()
Debug "Obj1: " + Obj1\DoGet()

End

;- DataSection

DataSection
   Procedures:
      Data.l @iGet(), @iPut()
EndDataSection
FF :allright:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Beitrag von Sylvia »

Habe jetzt bestimmt 15 Minuten diesen Code studiert, um zu begreifen,
was da passiert.
Basic Pur = PureBasic
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Ok, ich versuch es mal.

Du möchtes dir um die arbeit dir zu ersparen ein Object erzeugen, welches Werte oder String beinhaltet, sowie Funktionen zur bearbeitung.

Dieses Object wird x mal benötig.

In einen Interface steht als erstes der Zeiger auf die Tabelle mit den Funktionen. Danach können die Daten abgelegt werden.

Code: Alles auswählen

;- Strukturen
Structure udtSelf
  ; Virtuelle Tabelle
  VTable.l
  ; Daten
  text1.s
EndStructure
Um die Daten verwenden zu können muss speicher angefordert werden und der Zeiger auf die Funktionen gesetzt werden.

Code: Alles auswählen

Procedure CreateMyObject()

  Protected *v.udtSelf
  
  *v = AllocateMemory(SizeOf(udtSelf))
  *v\VTable = ?Procedures
  ProcedureReturn *v
  
EndProcedure
Das Object (Interface) muss Declariert werden

Code: Alles auswählen

;- Interfaces
Interface MyObject
   DoGet.s()
   DoPut(a.s)
EndInterface
Danach kann das Object x mal Erzeugt werden.

In den Funktionen des Object wird immer der Zeiger auf sich selbst (*Self) übergeben. Somit kann man auch eigende Daten zurückgreifen.


Ich hoffe das war einigermassen erklärt. Bin nicht besonders gut im erklären.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

War gut erklärt! Mal ein bissel ergänzen:
Normallerweise dreht sich bei der Programmierung alles um die Daten. Bei
OOP ist das anders, es dreht sich alle um die Objekte, was auch bedeutet, in
der Objektvariable sind auch alle Daten gespeichert.

Im Interface sind also die Methoden (Funktionen) des Objekts, und in der
Structure befindet sich die virtuelle Tabelle der Funktionsadressen, sowie die
Objektvariablen (Daten).
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Beitrag von Sylvia »

>>Sylvia: Habe jetzt bestimmt 15 Minuten diesen Code studiert, um zu begreifen,
>>was da passiert.

Das hiess nicht: "...hab's nicht kapiert." :wink:

Trotzdem 'Danke' für die posthume Erklärung an euch zwei soft-Eis. :D
Basic Pur = PureBasic
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Sylvia hat geschrieben:Trotzdem 'Danke' für die posthume Erklärung an euch zwei soft-Eis. :D
Meine tief empfundene Kondulenz, liebe Sylvia. Wer ist den gestorben?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Sylvia hat geschrieben: Trotzdem 'Danke' für die posthume Erklärung an euch zwei soft-Eis. :D
Erklärung erfolgte aber vor meinem Ableben, denke ich :lol:
Hallo MK-Soft, biste noch da?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Es hätte ja auch sein können, das sie vom Grübeln ne Gehirnblutung bekommen hat, und deshalb eure Erklärung posthum gelesen hat...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Beitrag von Sylvia »

>>Sylvia: Trotzdem 'Danke' für die posthume Erklärung an euch zwei soft-Eis.

Also, was ist den hier mit dem Begriff 'posthume' nicht in Ordnung ?

Gelesen werden muss es so:
Trotzdem 'Danke' (für die posthume Erklärung) an euch zwei soft-Eis.

oder

Trotzdem 'Danke' an euch zwei soft-Eis für die posthume Erklärung.

oder

Für die posthume Erklärung trotzdem 'Danke' an euch zwei soft-Eis.

:)
Basic Pur = PureBasic
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Sind aber langsam genug Weich-Eier :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten