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