PROGRAMACION DE OBJETOS EN HARBOUR
3.3 Clases y objetos
La Implementación de OOP (Programación Orientada a Objetos) es quizás la primera sustancia añadida por los desarrolladores de Harbour al lenguaje estándar. Las últimas versiones de Clipper contenían elementos de la programación orientada a objetos. Había varias clases predefinidas, se podían construir objetos, pero no era posible crear clases propias.Había sin embargo algunas posibilidades no documentadas, lo que permitió hacerlo, varias bibliotecas de terceros implementan la programación orientada a objetos para Clipper basada en ellos, el más conocido de ellos es Fivewin (más precisamente, Objects.lib de Fivewin) y Class (y). Para utilizar las clases en Harbour no es necesario vincular bibliotecas adicionales, el soporte OOP es parte dellenguaje, ya que sus fundamentos son parte del núcleo, Harbour ofrece más posibilidades que Clipper con todas las bibliotecas de terceros.
Por lo tanto, para crear una nueva clase, utilice los comandos CLASS ... ENDCLASS:
[CREATE] CLASS [ FROM | INHERIT [, ... ,] ]
[ MODULE FRIENDLY ] [ STATIC ] [ FUNCTION ]
[HIDDEN:]
[ CLASSDATA | CLASSVAR | CLASS VAR ]
[DATA | VAR [,] [ AS ] [ INIT ]
[[EXPORTED | VISIBLE] | [PROTECTED] | [HIDDEN]] [READONLY | RO] ]
...
[ METHOD ( [] ) [CONSTRUCTOR] ]
[ METHOD ( [] ) INLINE ]
[ METHOD ( [] ) BLOCK ]
[ METHOD ( [] ) EXTERN ([]) ]
[ METHOD ( [] ) SETGET ]
[ METHOD ( [] ) VIRTUAL ]
[ METHOD ( [] ) OPERATOR ]
[ ERROR HANDLER ( [] ) ][ ON ERROR ( [] ) ]
...
[PROTECTED:]
...
[VISIBLE:]
[EXPORTED:]
...
[FRIEND CLASS ]
[FRIEND FUNCTION ]
[SYNC METHOD ]
ENDCLASS [ LOCK | LOCKED ]
Una clase puede declararse como heredera de uno o más padres (múlti herencia especial - herencia múltiple que consideraremos más adelante) con la ayuda de la cláusula FROM o INHERIT. Estosignifica que recibe de la clase padre todas sus variables y métodos (excepto los marcados como ocultos).
Cualquiera de los métodos heredados puede ser anulado.
Los métodos de los padres puede ser invocados como Super: () o :: : () (si no está oculto).
Quiero mencionar una peculiaridad interesante relacionada con la herencia. Si la clase hija tiene una variable con el mismo nombre que laclase padre, entonces cada objeto contiene dos variables con el mismo nombre. Uno de ellos debe ser dirigido a -obj: y el otro como - obj: : .
Una clase puede ser declarada como STATIC - es decir, no se puede utilizar fuera del módulo actual.
Una clase puede ser declarada como MÓDULE FRIENDLY (modulo amigable)- esto significa que todas las clases y funciones, que se declaren en el móduloactual, serán sus amigos, es decir, tendrán acceso a sus variables y métodos ocultos y protegidos.
Y ya que estamos hablando acerca de las funciones amigables, Hay que prestar atención a las cláusulas FRIEND CLASS y FRIEND FUNCTION - determinan amistad para este tipo de clases y funciones.
La palabra FUNCIÓN en la declaración de una clase la define como una clase escalar.
Las cláusulasDATA o VAR – es una definición de variable de una clase. Durante este puede definirse estrictamente el tipo de la variable como (Carácter, Numérico, Fecha, Logico, Bloque de código, Nil), se puede establecer la configuración inicial predeterminado con INIT y su alcance definido (protegida, oculta, exportable y de sólo lectura). El ámbito de aplicación se puede establecer para cada variable porseparado (en la cláusula de DATOS), y para el grupo de variables y métodos:
- HIDDEN - Variable o método que sólo esta disponible dentro de la clase, en la que se identifica y no se hereda;
- PROTECTED - Disponible sólo en la clase, en la que se determina para los herederos;
- EXPORTED/ VISIBLE - Está disponibles por todas partes;
- READONLY /RO - - Si la variable se define como...
Regístrate para leer el documento completo.