Surcharge class et méthode [Résolu]

Messages postés
57
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
24 mars 2011
- - Dernière réponse : michelatoutfox
Messages postés
834
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
- 11 oct. 2007 à 15:40
Bonjour,

J'aurais voulu savoir si il était possible de surcharger une classe et une méthode en visual fox pro
Exemple:
En vb.net, on peut écrire le constructeur de classe comme ceci:
 Public Sub New(ByVal name As String)
        Me.name = name
        Me.forname = ""

    End Sub
    Public Sub New(ByVal name As String, ByVal forname As String)
        Me.name = name
        Me.forname = forname
    End Sub

ou sub new est le init() de foxpro.
Je ne trouve pas le moyen de reproduire la même chose en fox.

De même pour les méthodes.
Si c'est possible, est ce le même moyen pour établir des paramètres facultatifs ?
Exemple: la commande SUBSTR(cExpression,n startPosition[,n end position])
Dans le même ordre d'idée, lorsque je crée une classe en fox, il m'ouvre d'office le class designer ou je doir naviguer de partie de code en partie de code via la combox en heut à droite.

N'y a t'il pas moyen de voir l'ensdemble de son code.

Merci de vote aide.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
834
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
3
Merci
Tu as raison, ça n'est pas de la "surcharge", à cause de l'absence de typage et de signature (2 concepts totalement étrangers au langage VFP)
j'ai oublié de dire que si aucun paramètre n'est reçu dans une méthode qui en attend, VFP s'en fout! il va initialiser les variables à .F., et c'est tout
Tu peux donc (mais ce n'est pas du tout élégant à mon avis) déclarer dans l'init de ta classe de plus haut niveau x paramètres, et ne les traiter que dans les classes dérivées qui les attendent réellement.

pour appeller le code d'une classe parent, tu as le dodefault(), et aussi l'opérateur ::
(regarde dans l'aide en ligne) pour appeler n'importe quelle méthode de la classe parent depuis une classe dérivée

toutes les méthodes des classes parents seront visibles et utilisables depuis les classes dérivées et leurs instances, sauf si tu les déclares protégées (PROTECTED) ou masquées (HIDDEN) dans leur déclaration

je te conseille la lecture de http://foxcentral.net/microsoft/netforvfpdevelopers.htm pour bien comprendre les différences et similitudes de la prog objet en VFP et en .NET

pour ce qui est du traitement des données en .NET, regarde StrataFrame, c'est un Framework orienté données pour VB et C#, écrit par des développeurs VFP, et c'est très très bien foutu (je l'utilise avec VB.NET pour des apps WinForm)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de michelatoutfox
Messages postés
834
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
0
Merci
Bonjour,

VFP n'est pas un langage typé, donc la liberté est complète dans le passage des paramètres et dans la surcharge des classes.

soit par exemple une classe toto, dont l'init ne requiert pas de paramètres. Si tu crées une classe dérivée de toto (sous_toto1, par exemple) dont l'init doit recevoir et traiter 2 paramètres, tu vas dans son init écrire:
Lparameters mon_param1 , mon_param2
* pour traiter maintenant les 2 paramètres, on écrirait
do case
        case pcount()=0 && pas de paramètres reçus

        case pcount() = 1
             do case
                      case vartype(mon_param1)="C"

                      case vartype(mon_param1)="N"
                      ...
              end case && vérification du type du param unique

          case pcount()=2
* on traite également tous les cas

end case && le nombre de paramètres reçus

pour déclencher l'init de la classe parent (toto), il suffit de mettre un
dodefault()

tu peux le mettre avant le traitement des paamètres, ou après, selon ce qui te convient pour ta classe

et tu continueras de sous-classer sous_toto1 en sous_toto2 de la même façon.
Tu verras souvent du code écrit comme ceci:
Lparameters monParam1 as String, monParam2 as Integer
Ce n'est pas un typage, mais seulement une indication qui facilite la maintenance et qui est utilisée dans l'intellisense.

Pour voir le code d'une classe en entier, tu peux au choix:
ne pas utiliser le designer et coder tes classes dans des prg,
ou bien si tu utilises le designer, en ouvrant l'explorateur de classe sur une bibliothèque ou sur un form, tu trouveras un bouton "voir le code de la classe".

Est-ce plus clair?
Commenter la réponse de michelatoutfox
Messages postés
57
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
24 mars 2011
1
0
Merci
Bonjour,

ouais... En fait, il n'y a pas de surcharge des méthodes, il faut tester le nombre de param recus et leur type.
L'un dans l'autre, ce n'est pas moins de boulot c'est juste une autre manière de faire.

Concernant la surcharge des init de classe, ce ne serait pas plutot plus proche du systeme de classe abstraite que de la surcharge réelle ?

Si pour pouvoir créer un deuxième init je doit créer une autre classe...

Ou est il possible dans la sous classe d'appeller le code de la classe parent ?
Je m'explique:

je fais ceci
DEFINE CLASS Toto as CUSTOM

   public init()

   public function maFonction_1()
   endfunc
ENDDEFINE

DEFINE CLASS Tartenpion as Toto
   init(cName as string)
ENDDEFINE

Si dans mon code je fais
oTest = CREATEOBJECT("Tartenpion","Jean")
pourrais je faire un oTest.maFonction_1()

ou devrais je redéfinir ma fonction_1 dans ma sous classe tartentpion ?

Merci de ton aide.

PS: c'est bête, j'adore vb.net pour sa gestion des classes et tout le reste mais je trouve la partie gestion liens avec une DB tellement lourd

Alors que en fox la gestion de la DB est si simple mais les notions d'objets et leurs manipulations me parait si tordu

Je sens que je vais demander un mix des deux au pere noel moi
Commenter la réponse de gregorian
Messages postés
57
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
24 mars 2011
1
0
Merci
Merci pour ton aide,

Je vais suivre ton lien et faire un peu de lecture...

Pour le strataframe, je vais regarder cela mais ce sera pour mon édification perso car au boulot c'est du visual fox pro et bientot un peu de c#

Bon dvp
Commenter la réponse de gregorian
Messages postés
834
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
0
Merci
StrataFrame, c'est très bien pour du dev C# centré sur les données, et comme M$ est en train de tuer VFP (pas de VFP10, arret du support, arret de la commercialisation), la migration est à envisager.

Tu peux venir aux Rencontres AtoutFox de novembre, à  Paris? on va parler de tout ça...
Commenter la réponse de michelatoutfox