gregorian
Messages postés57Date d'inscriptionlundi 18 avril 2005StatutMembreDernière intervention24 mars 2011
-
10 oct. 2007 à 15:12
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDerniè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.
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention 7 mai 20131 11 oct. 2007 à 11:29
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
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)
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention 7 mai 20131 11 oct. 2007 à 08:43
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".
gregorian
Messages postés57Date d'inscriptionlundi 18 avril 2005StatutMembreDernière intervention24 mars 20111 11 oct. 2007 à 10:17
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
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention 7 mai 20131 11 oct. 2007 à 15:40
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...