Si vous trouverez des exemples dans le guide de référence Harbour, ce dernier ne contient pas d'exemple d'implémentation (Erreur HTTP 404).
Références de base
Voici un petit récapitulatif d'information:
- CLASS - Définition de la classe (incluant les objets de données et les méthodes) (guide de référence)
- DATA - Définition des données de la classe (guide de référence)
- METHOD - Définition des méthodes de la classe (guide de référence).
Voici un exemple partiel d'implémentation de classe issu des sources d'Harbour (fichier drawimg.prg)
CLASS wPaintObj FROM wGUIObj
* image like wvtimage
DATA cImage
DATA lTransp
METHOD New()
METHOD Draw()
METHOD Undraw()
METHOD Hide()
METHOD Show()
ENDCLASS //wPaintOBJ
METHOD New(nWinNum, nType, cId, nRow1, nCol1, nRow2, nCol2, aOffTLBR, lTransp) CLASS wPaintObj
default aOffTLBR to {0,0,0,0}
default lTransp to .f.
::nWinNum := nWinNum
::lVisible := .t.
::nType := nType
::cId := cId
::nRow1 := nRow1
::nCol1 := nCol1
::nRow2 := nRow2
::nCol2 := nCol2
if !(valtype(aOffTLBR)=="A")
aOffTLBR := {0,0,0,0}
endif
::aOffTLBR := aclone(aOffTLBR)
::lTransp := lTransp
RETURN Self
METHOD Draw() CLASS wPaintObj
if !::lVisible
return NIL
endif
do case
case ::nType==WPAINTOBJ_IMAGE
if !empty(::cImage)
WVW_DRAWIMAGE( ::nWinNum, ::nRow1, ::nCol1, ::nRow2, ::nCol2, ;
::cImage, ::aOffTLBR, ::lTransp )
endif
otherwise
* lBoxErrMessage()
endcase
RETURN NIL //DRAW()
Et cet exemple est accompagné du code utilisant cette classe
oWPaint := wPaintObj():New(0, WPAINTOBJ_IMAGE, "TOPLEFT", ntop+1, nleft+1, nmidver-1, nmidhor-1, NIL, ltransp) oWPaint:cImage := cpict
Constructeur New
Une classe contient généralement un constructeur (appelé New).
Ce dernier retourne une référence vers l'instance de la classe nommé Self
Self et ::
Dans la définition (et l’implémentation) d'une classe, Self fait référence à l'instance de la classe (un objet donc).
Self dispose aussi d'une notation raccourcie qui est ::
Classe et Héritage
Voici un autre exemple qui démontre l'utilisation de l'héritage des classes en Harbour.
Cet exemple est issus de classinh.ch (dans les sources de Harbour)
/* * $Id: clasinh.prg 2186 2000-02-14 08:11:56Z vszel $ */ #include "hbclass.ch" function main() local oObject, oBase oObject := TAnyClass():New() oBase := TClassBase():New() return nil class TClassBase method New() method Test() INLINE Alert( "Test" ) endclass method New() class TClassBase return Self class TAnyClass from TClassBase method New() endclass method New() class TAnyClass super:New() super:Test() return Self
Aucun commentaire:
Enregistrer un commentaire