Petewg / harbour-core

Portable, xBase compatible programming language and environment
https://petewg.github.io/harbour-core/
Other
19 stars 4 forks source link

hb_BeginObject #13

Open rjopek opened 1 year ago

rjopek commented 1 year ago

The hb_BeginObject function is a function in the Harbour language that is used to start the definition of an object class. It is typically used in conjunction with the hb_EndObject function, which is used to end the definition of an object class.

Here is an example of how these functions might be used in a class definition:

hb_BeginObject( "Person" )
   hb_ObjMethod( "Init", Person_Init )
   hb_ObjMethod( "Name", Person_Name )
   hb_ObjMethod( "Age", Person_Age )
hb_EndObject()

In this example, hb_BeginObject is used to start the definition of a class called "Person", and hb_EndObject is used to end the definition of the class. The class has three methods: Init, Name, and Age. These methods can be called on objects of the Person class to perform various actions, such as initializing the object, retrieving the name or age of the object, etc.

The hb_BeginObject function takes a single argument, which is a string containing the name of the class. This name is used to identify the class and distinguish it from other classes in the code.

The hb_BeginObject function is important because it signifies the start of the class definition and allows the compiler to generate the necessary code to create and manage objects of the class. Without it, the compiler would not be able to correctly process the class definition.

https://github.com/harbour/core/blob/master/src/rtl/perfuncs.prg#L59

rjopek commented 1 year ago

I tried to refer to the function hb_EndObject The hb_BeginObject and hb_EndObject functions are not part of the standard Harbour language, but rather are part of the Harbour Extender library, which is a set of additional functions and features that can be used with Harbour. It is not without reason that I chose the hb_EndObject solitary function to make a brief description of the function's purpose.

Petewg commented 1 year ago

As I pointed here --> https://github.com/Petewg/harbour-core/issues/14#issuecomment-1368219511 , if you think you could prepare some docs about OO implementation of Harbour, you're very welcome to do it and post in a separate page in this wiki.

rjopek commented 1 year ago

Here is an example of how the hb_BeginObject function might be implemented:

FUNCTION hb_BeginObject( cClassName )

   LOCAL oObject

   oObject := NIL

   IF t_aObjects == NIL
      t_aObjects := {}
   ENDIF

   oObject := NEWOBJECT( cClassName )
   oObject:cClassName := cClassName
   oObject:t_aProperties := {}

   AAdd( t_aObjects, oObject )

   RETURN oObject

This function takes a single argument, which is the name of the object class being defined. It creates a new object of the specified class and adds it to the t_aObjects array, which is used to track the objects that are currently being defined. The function then returns a reference to the new object.