Object-Oriented Programming in FreeM
Jump to navigation
Jump to search
Classes
In FreeM, a class is defined by a routine. For instance, the STRING class (built into FreeM) is contained in the %STRING routine.
Example
%FRACTION(THIS,INIT):OBJECT ;
S THIS("NUMERATOR"):PRIVATE=$P(INIT,"/",1)
S THIS("DENOMINATOR"):PRIVATE=$P(INIT,"/",2)
Q
GCD(THIS) Q $$GCDI^%FRACTION(THIS("NUMERATOR"),THIS("DENOMINATOR"))
DESTROY(THIS) ;
Q
REDUCE(THIS) ;
N G,NUMR,DENR
S G=$$GCDI^%FRACTION(THIS("NUMERATOR"),THIS("DENOMINATOR"))
S NUMR=THIS("NUMERATOR")/G
S DENR=THIS("DENOMINATOR")/G
Q NUMR_"/"_DENR
;
GCDI(A,B) Q:B=0 A S R=$$GCDI^%FRACTION(B,A#B) Q R
Constructors
A constructor must be the first entry point in a class definition, and the label name must match the routine name, and it must take two arguments, THIS and INIT. THIS represents the instance of the object being accessed, and INIT represents an initializer that can be used to assign an initial value to the object when instantiating the class.
On the first line of the above example, :OBJECT indicates that the FRACTION class inherits from OBJECT