Seite 1 von 4

Interface mit Daten (Beispiel für PB4)

Verfasst: 18.03.2006 22:19
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:

Verfasst: 19.03.2006 20:14
von Sylvia
Habe jetzt bestimmt 15 Minuten diesen Code studiert, um zu begreifen,
was da passiert.

Verfasst: 19.03.2006 20:52
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:

Verfasst: 19.03.2006 21:00
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).

Verfasst: 20.03.2006 10:08
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

Verfasst: 20.03.2006 13:23
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?

Verfasst: 20.03.2006 17:37
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?

Verfasst: 20.03.2006 19:02
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...

Verfasst: 20.03.2006 21:33
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.

:)

Verfasst: 20.03.2006 23:47
von ts-soft
Sind aber langsam genug Weich-Eier :mrgreen: