Diff for /freem/doc/freem.texi between versions 1.43 and 1.45

version 1.43, 2025/05/05 04:55:42 version 1.45, 2025/05/05 12:34:02
Line 4 Line 4
 @settitle The FreeM Manual  @settitle The FreeM Manual
   
 @copying  @copying
 This manual is for FreeM, (version 0.64.0-rc1), which is a free software@footnote{FreeM subscribes to the software licensing philosophy described in @emph{Free Software, Free Society:  This manual is for FreeM, (version 0.64.0-rc1), which is a free software implementation of the M programming language.
 Selected Essays of Richard M. Stallman}.} implementation of the M programming language.  
   
 Print-optimized versions of this book are typeset in @emph{Computer Modern} by the author using the @emph{GNU Texinfo} tools.  Print-optimized versions of this book are typeset in @emph{Computer Modern} by the author using the @emph{GNU Texinfo} tools.
   
Line 4590  SET MYSTRING="This is a ""string literal Line 4589  SET MYSTRING="This is a ""string literal
 @cindex types, custom  @cindex types, custom
 @cindex classes  @cindex classes
   
 See @ref{Classes}.  See @ref{Object-Oriented Programming}.
   
 @node Globals  @node Globals
 @chapter Globals  @chapter Globals
Line 4945  If you use other M implementations, you Line 4944  If you use other M implementations, you
 @cindex object-oriented programming  @cindex object-oriented programming
 @cindex programming, object-oriented  @cindex programming, object-oriented
   
   @menu
   * Classes::                             The organizing concept of object-oriented programming.
   * Inheritance::                         Making one class derive from another.
   * Methods::                             Attach code to classes.
   * Public and Private Variables::        Determining accessibility.
   * Instantiating Objects::               Creating instances of classes.
   @end menu
   
 @node Classes  @node Classes
 @section Classes  @section Classes
   
   
 @node Class Overview  
 @subsection Class Overview  @subsection Class Overview
   
 A @emph{class} is the primary organizing concept of FreeM support for object-oriented programming, and in FreeM, is simply an M routine with a few special properties:  A @emph{class} is the primary organizing concept of FreeM support for object-oriented programming, and in FreeM, is simply an M routine with a few special properties:
Line 4968  DESTROY(THIS) ; This is the destructor Line 4971  DESTROY(THIS) ; This is the destructor
   
 The above example demonstrates general class syntax.  The above example demonstrates general class syntax.
   
 @node Constructors  
 @subsection Constructors  @subsection Constructors
   
 A @emph{constructor} is an M entry point that is called when a new instance of a class is created.  A @emph{constructor} is an M entry point that is called when a new instance of a class is created.
Line 4993  A constructor looks like this: Line 4995  A constructor looks like this:
   
 In the above example, @emph{<superclass>} represents the name of a class from which this class should inherit. In this case, the @code{FRACTION} class inherits from the @code{OBJECT} class. Note that this is not strictly necessary in this case, as all classes in FreeM automatically inherit from @code{OBJECT}.  In the above example, @emph{<superclass>} represents the name of a class from which this class should inherit. In this case, the @code{FRACTION} class inherits from the @code{OBJECT} class. Note that this is not strictly necessary in this case, as all classes in FreeM automatically inherit from @code{OBJECT}.
   
 @node Destructors  
 @subsection Destructors  @subsection Destructors
 A @code{destructor} is called when you @code{KILL} an instance variable. Its tag must be @code{DESTROY}, and it must take one argument (@code{THIS}).  A @code{destructor} is called when you @code{KILL} an instance variable. Its tag must be @code{DESTROY}, and it must take one argument (@code{THIS}).
   
Line 5020  Inheritance is achieved by specifying th Line 5021  Inheritance is achieved by specifying th
 CLASS(THIS,INIT):SUPERCLASS  CLASS(THIS,INIT):SUPERCLASS
 @end example  @end example
   
 @node Runtime Polymorphism  
 @subsection Runtime Polymorphism  @subsection Runtime Polymorphism
   
 You can achieve runtime polymorphism by subclassing, and defining methods in the subclass that match the names of existing methods in the superclass. Following FreeM inheritance rules, the overridden method in the subclass will be called, and the method in the superclass will not.  You can achieve runtime polymorphism by subclassing, and defining methods in the subclass that match the names of existing methods in the superclass. Following FreeM inheritance rules, the overridden method in the subclass will be called, and the method in the superclass will not.
Line 5050  DEFAULT.USER> W MYOBJ.MYMETHOD() Line 5050  DEFAULT.USER> W MYOBJ.MYMETHOD()
 VALUE  VALUE
 @end example  @end example
   
 @node Public and Private Variables   @node Public and Private Variables
 @section Public and Private Variables  @section Public and Private Variables
   
 FreeM supports private fields with the @code{:PRIVATE} specifier in the @code{SET} command, enforcing classical object-oriented data encapsulation. The @code{:PUBLIC} specifier is provided for completeness, and is the default.  FreeM supports private fields with the @code{:PRIVATE} specifier in the @code{SET} command, enforcing classical object-oriented data encapsulation. The @code{:PUBLIC} specifier is provided for completeness, and is the default.
Line 5084  NEW MYSTR=$#^%STRING("myString") Line 5084  NEW MYSTR=$#^%STRING("myString")
   
 This will create a local variable called MYSTR of type STRING, and initialize it with the value myString.   This will create a local variable called MYSTR of type STRING, and initialize it with the value myString. 
   
 @node Determining Object Class  @subsection Determining Object Class
 @section Determining Object Class  
   
 To determine the class of any FreeM local variable, you will use the @code{$$TYPE()} method:  To determine the class of any FreeM local variable, you will use the @code{$$TYPE()} method:
   

Removed from v.1.43  
changed lines
  Added in v.1.45


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>