METHOD: A subroutine, very similar to a user-defined Sub/Function. A method has the special attribute that it can access the variables stored in the object. A method can return a value like a Function, or return nothing, like a Sub.
PROPERTY: This is a METHOD, but in a specific form, for a specific purpose. A PROPERTY has all the attributes of a standard METHOD. It has a special syntax, and is specifically used to read or write private data to/from the internal variables in an object. This helps to maintain the principle of "encapsulation". Properties are usually created in pairs, a GET PROPERTY to read a variable, and a SET PROPERTY to write to a variable. Paired properties use the same name for both, since PowerBASIC will choose the correct one based upon the usage in your source code. You should note this important fact: Since a PROPERTY is a form of METHOD, all of the documentation about METHODS also applies to PROPERTIES, unless we specifically state otherwise.
An interesting note is that one particular interface definition may
become a part of several different classes
and objects. In
fact, the internal code for an interface in CLASS A may be entirely different
from the internal code for the same interface in CLASS B. Method
names, parameters, and return values must be identical, but the internal
code could vary significantly.
An important point: interfaces
are immutable. Once
an interface has been defined and published, the Method and Property definitions
(sequence, names, parameters, return values, etc.) may never be altered.
If you
find you must change or extend an interface, you would usually define
a new interface instead.
CLASS: A definition of a complete object, which may include one or more interfaces. This is the place where you declare INSTANCE variables, and write your code for the enclosed METHOD and PROPERTY procedures. While some object implementations allow only a single interface per class, PowerBASIC objects (and COM objects in general) support the idea of optional multiple interfaces. Still, remember that a CLASS is the complete definition of an object. It defines all of the code and all of the data which will be found in a particular object. For this reason, there is only one copy of a CLASS. Every class is associated with a GUID (a 128-bit number or string) which uniquely identifies this particular class from all others, anywhere in the world. This identifier is called the Class ID, or CLSID. A friendlier version of the CLSID is a shorter text name, which also identifies the Class. This text name is known as the Program ID (PROGID), though it's possible this PROGID may not be totally unique. As it's a simpler construct, it might be duplicated in another program.
CLASS METHOD: This is a private method, which may only be called from within the same CLASS. It is not a part of any interface, so it is never listed there. It is called a CLASS METHOD because it is a member of the class, not an interface. It is not visible to any code outside the class where it is defined. Code in a CLASS METHOD may call other CLASS METHODS in the same CLASS. Class Properties do not exist because there is no need for them. Within the object, variables can be accessed directly, so there is no need to use a PROPERTY procedure as an intermediary.
CONSTRUCTOR: This is a special form of CLASS METHOD, which is executed automatically whenever an object is created. It is optional, but if present, it must be named CREATE.
DESTRUCTOR: This is a special form of CLASS METHOD, which is executed automatically whenever an object is destroyed. It is optional, but if present, it must be named DESTROY.
OBJECT:
An instance
of a class. When
you create an object in your running program, using the LET
(with objects) statement, or its implied form, PowerBASIC allocates
a block of memory for the set of instance variables you defined, and establishes
a virtual function table (a set of function code pointers) for each of
the interfaces. You
can create any number of OBJECTS based upon one CLASS definition.
It might be useful to think of an OBJECT in terms of an electrical
appliance, like a television set. The
TV is the equivalent of an OBJECT, because it's an instance of the plans
which define all the things which make it a television. Of
course, those plans are the equivalent of a CLASS. You
can make many instances of a television from one set of plans, just as
you can make many OBJECTS from one CLASS. The
individual buttons and controls on the television are the equivalent of
METHODS, while all of the controls, taken as a whole, are equivalent to
the INTERFACE.
We don't need to know how a television works internally to use it and
benefit from it. Likewise,
we don't need to know how an object works internally to use it and benefit
from it. We
only need to know the intended job of the object, and how to communicate
with it from the outside. The
internal workings are well "hidden", which is called encapsulation.
Since we
can't "look inside" an Object, it's not possible to directly
manipulate internal variables or memory. This
provides a increased level of security for the internal code and data.
INSTANCE DATA: Each CLASS defines some INSTANCE variables which are present in every object. When you create multiple objects (of the same class), each object gets its own unique copy of them. These variables are called INSTANCE variables because a new set of them is created for each instance of the object. For example, if you created a CUSTOMER object for each customer of your business, you might have INSTANCE variables for the Name, Address, Balance owed, etc. Each object would have its own set of INSTANCE variables to describe the attributes of that particular customer. INSTANCE variables are always private to the object. They can be accessed directly from any METHOD on the object, but they are invisible to any code outside of the object.
VIRTUAL FUNCTION TABLE: Commonly called a VFT or VTBL, this is a set of function code pointers, one for each METHOD or PROPERTY in an interface. This is a tool used internally to direct program execution to the correct method or property you wish to execute. While it is a vital and integral part of every object, you need give it no concern other than to be aware of its existence. PowerBASIC manages these items for you, with no programmer intervention required.
See Also
Are there other important "Buzz-Words"?