In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Clases de Harbour

Lenguaje de progamación XBase en español
jvtecheto
Posts: 115
Joined: Thu Dec 19, 2013 1:18 pm

Clases de Harbour

Postby jvtecheto » Sun Apr 22, 2018 2:41 pm

Una curiosidad:

Las clases de Harbour porque al referirse a ellas se añaden los paréntesis.

Ejemplo creamos :

CREATE CLASS foo
VAR name INIT 'FOO'
ENDCLASS

y para referirnos a ella hariamos
foo():new()

otra cosa, todas las clases de Harbour son estáticas o sea se pueden utilizar sin instanciarlas.
no como en otros lenguajes en los que hay clases instanciables y otras estáticas o de clase(que no permiten su instanciación), ejemplo c#

que por ejemplo hay clases que hay que instanciar.

Form2 Ventana2 = new Form2();

o otras como Math , que accedes directamente. Math.SQrt(90); // Son Estaticas no instanciables.

siento estar un poco liado.

Saludos.

Jose Vte.
User avatar
jfgimenez
Site Admin
Posts: 5570
Joined: Mon Apr 06, 2015 8:48 pm
Contact:

Re: Clases de Harbour

Postby jfgimenez » Sun Apr 22, 2018 4:29 pm

José Vicente,

en Harbour no existen las clases NO instanciables. Todas se pueden instanciar. Es más, la forma de instanciarlas es usando tan sólo la "función de clase". Así, para instanciar la clase foo, sólo hay que poner:

Code: Select all

oFoo := Foo()

Fíjate que no he puesto :New() ni nada por el estilo. Con sólo ejecutar la función de clase se instancia un objeto de esa clase. La llamada a :New() sirve para inicializar el objeto. Podíamos haber usado :Create(), :Init(), :Initialize(), o cualquier otra cosa, pero en Xailer decidimos que iba a ser :New(), y que ese método además iba a recibir parámetros de inicialización, que casi siempre es oParent. En cualquier caso, esto es una regla de Xailer, no de Harbour estrictamente, aunque otras librerías de Harbour también usan :New() con los mismos o con otros parámetros.

Por otro lado, también tenemos algunas clases que las crea el propio Xailer, y por lo tanto no hay que instanciarlas: Application, Screen, Printer y AppData
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jvtecheto
Posts: 115
Joined: Thu Dec 19, 2013 1:18 pm

Re: Clases de Harbour

Postby jvtecheto » Sun Apr 22, 2018 6:36 pm

Muchisimas gracias Jose.

Cada dia se mas sobre Harbour. :D

Saludos.

Jose Vte.
User avatar
Hurricane
Posts: 104
Joined: Tue Mar 24, 2015 10:21 am
Location: Brasil
Contact:

Re: Clases de Harbour

Postby Hurricane » Wed Apr 25, 2018 2:04 am

Em harbour você também pode usar métodos e variáveis estáticas, sem precisar instanciar a classe. É raro alguém precisar disso.
Métodos comuns podem se comportar como estáticos (não requer nenhuma declaração diferente), depende apenas da forma implementada (codificada).
Variáveis estáticas de uma classe, compartilham o mesmo valor para todas as instâncias ativas e as que serão instanciadas.

Método estático:
TPrintWin():codePrinter( CHR(27)+'E', {|o|o:oBold:=.t.} )
Math:SQrt(90)

Propriedade estática (são equivalentes):
TPrintWin():bStartDoc:={||drawDoc()} // definindo um gatilho (ação)
oPrn:bStartDoc:={||drawDoc()}

Na minha página, procure por "any combination of string/CHR with any expression", são definições globais da classe sem instanciar e serão compartilhadas com as novas instâncias. Estas definições podem ser aplicadas como globais e depois por instância (a classe consegue identificar). Assim o programador redefine o padrão global do produto, e depois pode criar definições específicas por relatório (instância).

Code: Select all

Class TPrintXL from XPrintXL
EndClass

Class XPrintXL FROM TPrintWin // For Xailer
   ...
EndClass

Class XPrintFRX FROM TPrintWin // For FastReport
   ...
EndClass

Class XPrintQT FROM TPrintWin // For HbQT
   ...
EndClass


jvtecheto wrote:...otra cosa, todas las clases de Harbour son estáticas o sea se pueden utilizar sin instanciarlas.
no como en otros lenguajes en los que hay clases instanciables y otras estáticas o de clase(que no permiten su instanciación), ejemplo c#
...
o otras como Math , que accedes directamente. Math.SQrt(90); // Son Estaticas no instanciables.
Delphi, ADVPL, SQL, FastReport | Xailer VxH Fivewin Hwgui Minigui [x]Harbour
Contact me: Developments | Training | Facebook | Projects

Return to “Spanish”