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()