Harbour Reference Guide - Class

Class

Data

CLASSDATA

Define a CLASSDATA variable for a class (NOT for an Object!)
Syntax
CLASSDATA <DataName1> [,<DataNameN>] [ AS <type> ] [ INIT <uValue> ]
Argument(s)
<DataName1> Name of the DATA
<type> Optional data type specification from the following:
Character, Numeric, Date, Logical, Codeblock, Nil
<uValue> Optional initial value at program startup
Description
CLASSDATA variables can also be thought of as the "properties" of an entire class. Each CLASSDATA exists only once, no matter how many objects are created. A common usage is for a counter that is incremented whenever an object is created and decremented when one is destroyed, thus monitoring the number of objects in existance for this class.
You can use the "AS <type>" clause to enforce that the CLASSDATA is maintained as a certain type. Otherwise it will take on the type of whatever value is first assigned to it. Use the "INIT <uValue>" clause to initialize that DATA to <uValue> whenever the class is first used.
Example(s)
CLASS TWindow
DATA   hWnd, nOldProc
CLASSDATA lRegistered AS LOGICAL
ENDCLASS
Status
Ready
Compliance
This is Harbour specific
Platform(s)
This is available on all platforms
See also
Object Oriented Programming,CLASS,METHOD,DATA
Index
Class

DATA

Alternate syntax for VAR: instance variable for the objects.
Syntax
DATA <DataName1> [,<DataNameN>] [ AS <type> ] [ INIT <uValue> ] [[EXPORTED | VISIBLE] | [PROTECTED] | [HIDDEN]] [READONLY | RO]
Argument(s)
<DataName1> Name of the DATA
<type> Optional data type specification from the following:
Character, Numeric, Date, Logical, Codeblock, Nil.
<uValue> Optional initial value when creating a new object.
EXPORTED Specifies that this DATA is accessible to functions and
methods outside of the class. VISIBLE is a synonym for EXPORTED.
PROTECTED Specifies that this DATA is only accessible to functions and methods within this class and its subclasses.
HIDDEN Specifies that this DATA is only accessible to the
class where it was defined, and is not inherited by the subclasses.
READONLY Restricts assignment to the variable. If specified with
the EXPORTED clause, assignment is only permitted from the current class and its subclasses. If specified with the PROTECTED clause, assignment is only permitted from the current class. RO is a synonym for READONLY.
Description
DATA elements can also be thought of as the "properties" of an object. They can be of any data type, including codeblock. Once an object has been created, the DATA elements are referenced with the colon (:) as in MyObject:Heading := "Last name". Usually a class also defines methods to manipulate the DATA.
You can use the "AS <type>" clause to enforce that the DATA is maintained as a certain type. Otherwise it will take on the type of whatever value is first assigned to it.
Use the "INIT <uValue>" clause to initialize that DATA to <uValue> whenever a new object is created.
VAR can be a synonym for DATA, or it can use a slightly different syntax for compatibility with other dialects.
Example(s)
CLASS TBColumn
DATA Block      // Code block to retrieve data for the column
DATA Cargo      // User-definable variable
DATA ColorBlock // Code block that determines color of data items
DATA ColSep     // Column separator character
DATA DefColor   // Array of numeric indexes into the color table
DATA Footing    // Column footing
DATA FootSep    // Footing separator character
DATA Heading    // Column heading
DATA HeadSep    // Heading separator character
DATA Width      // Column display width
DATA ColPos     // Temporary column position on screen
METHOD New()    // Constructor
ENDCLASS
Status
Ready
Compliance
This is Harbour specific
Platform(s)
This is available on all platforms
See also
Object Oriented Programming,CLASS,METHOD,CLASSDATA,VAR
Index
Class

Definition

CLASS

Define a Class for Object Oriented Programming
Syntax
[CREATE] CLASS <ClassName> [ <FROM, INHERIT> <SuperClass1> [, <SuperClassN>] ] [STATIC]
Argument(s)
<ClassName> Name of the class to define. By tradition, Harbour
classes start with "T" to avoid collisions with user- created classes.
<SuperClass1...n> The Parent class(es) to use for inheritance.
Harbour supports Multiple Inheritance.
STATIC This clause causes the class function to be declared
as a static function. It will therefore not be available outside the current module.
Description
CLASS creates a class from which you can create objects. The CLASS command begins the class specification, in which the DATA elements (also known as instance variables) and METHODS of the class are named. The following scoping commands may also appear. They control the default scope of DATA and METHOD commands that follow them.
<fixed>
EXPORTED: VISIBLE: HIDDEN: PROTECTED:
</fixed> The class specification ends with the END CLASS command.
Classes can inherit from multiple <SuperClasses>, and the chain of inheritance can extend to many levels.
A program uses a Class by calling the Class Constructor, usually the New() method, to create an object. That object is usually assigned to a variable, which is used to access the DATA elements and methods.
Harbour's OOP syntax and implementation supports Scoping (Protect, Hidden and Readonly) and Delegating, and is largely compatible with Class(y)(tm), TopClass(tm) and Visual Objects(tm).
Example(s)
CLASS TBColumn
DATA Block      // Code block to retrieve data for the column
DATA Cargo      // User-definable variable
DATA ColorBlock // Code block that determines color of data items
DATA ColSep     // Column separator character
DATA DefColor   // Array of numeric indexes into the color table
DATA Footing    // Column footing
DATA FootSep    // Footing separator character
DATA Heading    // Column heading
DATA HeadSep    // Heading separator character
DATA Width      // Column display width
DATA ColPos     // Temporary column position on screen
METHOD New()    // Constructor
ENDCLASS
Status
Ready
Compliance
This is Harbour specific
Platform(s)
This is available on all platforms
See also
HBClass(),Object Oriented Programming,DATA,METHOD
Index
Class

ENDCLASS

End the declaration of a class.
Syntax
ENDCLASS
Argument(s)
(This statement has no arguments)
Description
ENDCLASS marks the end of a class declaration. It is usually followed by the class methods that are not INLINE.
Example(s)
CLASS TWindow
DATA   hWnd, nOldProc
ENDCLASS
Status
Ready
Compliance
This is Harbour specific
Platform(s)
This is available on all platforms
See also
Object Oriented Programming,CLASS,METHOD,DATA
Index
Class

Method

ERROR HANDLER

Designate a method as an error handler for the class
Syntax
ERROR HANDLER <MethodName>( [<params,...>] )
Argument(s)
<MethodName> Name of the method to define
<params,...> Optional parameter list
Description
ERROR HANDLER names the method that should handle errors for the class being defined.
Example(s)
CLASS TWindow
ERROR HANDLER  MyErrHandler()
ENDCLASS
Status
Ready
Compliance
This is Harbour specific
Platform(s)
This is available on all platforms
See also
Object Oriented Programming,ON ERROR,CLASS,METHOD,DATA
Index
Class

MESSAGE

Route a method call to another Method
Syntax
MESSAGE <MessageName> METHOD <MethodName>( [<params,...>] )
MESSAGE <MessageName>() METHOD <MethodName>( [<params,...>] )
Argument(s)
<MessageName> The pseudo-method name to define
<MethodName> The method to create and call when <MessageName>
is invoked.
<params,...> Optional parameter list for the method
Description
The MESSAGE command is a seldom-used feature that lets you re-route a call to a method with a different name. This can be necessary if a method name conflicts with a public function that needs to be called from within the class methods.
For example, your app may have a public function called BeginPaint() that is used in painting windows. It would also be natural to have a Window class method called :BeginPaint() that the application can call. But within the class method you would not be able to call the public function because internally methods are based on static functions (which hide public functions of the same name).
The MESSAGE command lets you create the true method with a different name (::xBeginPaint()), yet still allow the ::BeginPaint() syntax to call ::xBeginPaint(). This is then free to call the public function BeginPaint().
Example(s)
CLASS TWindow
DATA   hWnd, nOldProc
METHOD New( ) CONSTRUCTOR
MESSAGE BeginPaint METHOD xBeginPaint()
ENDCLASS
Status
Ready
Compliance
This is Harbour specific
Platform(s)
This is available on all platforms
See also
METHOD,DATA,CLASS,Object Oriented Programming
Index
Class

METHOD

Declare a METHOD for a class in the class header
Syntax
METHOD <MethodName>( [<params,...>] ) [CONSTRUCTOR]
METHOD <MethodName>( [<params,...>] ) INLINE <Code,...>
METHOD <MethodName>( [<params,...>] ) BLOCK <CodeBlock>
METHOD <MethodName>( [<params,...>] ) EXTERN <NAME>([<args,...>])
METHOD <MethodName>( [<params,...>] ) SETGET
METHOD <MethodName>( [<params,...>] ) VIRTUAL
METHOD <MethodName>( [<param>] ) OPERATOR <op>
METHOD <MethodName>( [<params,...>] ) CLASS <ClassName>
Argument(s)
<MethodName> Name of the method to define
<params,...> Optional parameter list
Description
Methods are "class functions" which do the work of the class. All methods must be defined in the class header between the CLASS and ENDCLASS commands. If the body of a method is not fully defined here, the full body is written below the ENDCLASS command using this syntax:
METHOD <MethodName>( [<params,...>] ) CLASS <ClassName>
Methods can reference the current object with the keyword "Self:" or its shorthand version "::".
CLAUSES:
CONSTRUCTOR Defines a special method Class Constructor method,
used to create objects. This is usually the New() method. Constructors always return the new object.
INLINE Fast and easy to code, INLINE lets you define the
code for the method immediately within the definition of the Class. Any methods not declared INLINE or BLOCK must be fully defined after the ENDCLASS command. The <Code,...> following INLINE receives a parameter of Self. If you need to receive more parameters, use the BLOCK clause instead.
BLOCK Use this clause when you want to declare fast 'inline'
methods that need parameters. The first parameter to <CodeBlock> must be Self, as in:
METHOD <MethodName> BLOCK {|Self,<arg1>,<arg2>, ...,<argN>|...}
EXTERN If an external function does what the method needs,
use this clause to make an optimized call to that function directly.
SETGET For calculated Data. The name of the method can be
manipulated like a Data element to Set or Get a value.
VIRTUAL Methods that do nothing. Useful for Base classes where
the child class will define the method's behavior, or when you are first creating and testing a Class.
OPERATOR Operator Overloading for classes.
See example Tests/TestOp.prg for details.
CLASS <ClassName>
Use this syntax only for defining a full method after the ENDCLASS command.
Example(s)
CLASS TWindow
DATA   hWnd, nOldProc
METHOD New( ) CONSTRUCTOR
METHOD Capture() INLINE  SetCapture( ::hWnd )
METHOD End() BLOCK  { | Self, lEnd | If( lEnd := ::lValid(),;
::PostMsg( WM_CLOSE ),), lEnd }
METHOD EraseBkGnd( hDC )
METHOD cTitle( cNewTitle ) SETGET
METHOD Close() VIRTUAL
ENDCLASS
METHOD New( ) CLASS TWindow
local nVar, cStr
... <code> ...
... <code> ...
RETURN Self
Test(s)
TestOp.prg
Status
Ready
Compliance
This is Harbour specific
Platform(s)
This is available on all platforms
See also
HBClass(),Object Oriented Programming,DATA,CLASS
Index
Class

ON ERROR

Designate a method as an error handler for the class
Syntax
ON ERROR <MethodName>( [<params,...>] )
Argument(s)
<MethodName> Name of the method to define
<params,...> Optional parameter list
Description
ON ERROR is a synonym for ERROR HANDLER. It names the method that should handle errors for the class being defined.
Example(s)
CLASS TWindow
ON ERROR  MyErrHandler()
ENDCLASS
Status
Ready
Compliance
This is Harbour specific
Platform(s)
This is available on all platforms
See also
Object Oriented Programming,ERROR HANDLER,CLASS,METHOD,DATA
Index
Class