Mit Beispielcode.
Teil ich mal mit euch.
Falls wer Fehler findet, bitte Feedback.
Falls ich Begriffsverwirrung habe, bitte auch Feedback, bin mit all den Begriffen rund um OOP nicht so 100% sattelfest.
LG Thomas
Code: Alles auswählen
Interface Passenger
  
  
  ; Object's Public Instance Methods, we need Interface
  ;
  GetIdNumber.i()    
  
  ; Free is a Public Instance Procedure, we need Interface
  ;
  Free.i() 
    
EndInterface
DeclareModule Passenger
  
  ; new is a Public Class Procedure, no Interface needed
  ;
  Declare.i New(ParamIdNumber)
  
EndDeclareModule
Module Passenger
  EnableExplicit
  
  ; Object's Private Instance Fields/Variables
  ;
  Structure object
    
    ; Points to Pointer Table to Public Instance Methods in Data Section
    ;
    *_method_table_ 
    
    ; Put your Private Instance Fields/Variables variables here
    ;
    
    ; test code
    IdNumber.i
    
  EndStructure
    
  ; Generic Constructor
  ;
  Procedure Construct(object_name.s)
    
    ; with security check
    ;
    Protected *new.object = AllocateStructure(object)
    If *new
      *new\_method_table_ = ?method_table
    Else
      MessageRequester("Runtime Class Allocation Error","Allocation of Object '"+object_name+"' failed.")
      End
    EndIf
    
    ProcedureReturn *new
    
  EndProcedure
  
  ; ****  Put your Code starting here  **************************************************
  ;
  
  ; Constructor(s), Destructor(s)
  ;
  Procedure New(ParamIdNumber)
    
    Protected *this.object
    
    ; Call generic Constructor
    ;
    *this = Construct("Passenger")
    
    ; Put more individual construction code here
    ;    
    
    ; test code
    *this\IdNumber = ParamIdNumber
    
    
    ; Give back the Pointer to Instance
    ;
    ProcedureReturn *this
    
  EndProcedure
  Procedure Free(*this.object)
    
    ; Use generic FreeStructure to destruct object
    ;
    FreeStructure(*this)
    
    ; Put more individual destruction code here
    ;    
    
    ; give back a zero pointer 
    ;
    ProcedureReturn 0
    
  EndProcedure
  
  ; Others
  ;
  Procedure GetIdNumber(*this.object)
    
    ProcedureReturn *this\IdNumber
    
  EndProcedure
  
  ; Pointer Table to Public Instance Methods
  ;
  DataSection
    method_table:
    Data.i @GetIdNumber()
    Data.i @Free()
  EndDataSection
  
EndModule
; Test Code
; Interface name and Module name are allowed to be the same
;
; Pointer to Instance        Module name
;    |                         |
;    |    Interface name       |
;    |         |               |
;    v         v               v
Passenger11.Passenger = Passenger::New(11)
Debug "Pointer to Object Instance 'Passenger11': "+Passenger11 
Passenger22.Passenger = Passenger::New(22)
Debug "Pointer to Object Instance 'Passenger22': "+Passenger22 
Passenger44.Passenger = Passenger::New(44)
Debug "Pointer to Object Instance 'Passenger44': "+Passenger44 
;                                     Pointer to Instance         Instance Procedure
;                                                    |               |             
;                                                    |               |             
;                                                    v               v             
Debug "IdNumber of Object Instance 'Passenger44': "+Passenger44\GetIdNumber()
Debug "IdNumber of Object Instance 'Passenger22': "+Passenger22\GetIdNumber()
Debug "IdNumber of Object Instance 'Passenger11': "+Passenger11\GetIdNumber()
; Destroy it again
;
Passenger11 = Passenger11\Free()
Debug "Pointer to DESTROYED 'Passenger11': "+Passenger11 
; should flag error because instance was destroyed
; Debug "IdNumber of Object Instance 'Passenger11': "+Passenger11\GetIdNumber()