Vous êtes sur la page 1sur 52

Visual FoxPro vs JAVA

Francis FAURE
Pour les conférences AtoutFox à Lille 2014
1 / 52
Votre intervenant
Francis FAURE
46 ans, marié, 3 enfants
Gérant d’une SSII « Design or Decline » depuis 1991
Gérant de l’ISP « Wan Again » depuis 1997
Formation : Ingénieur CNAM

Membre actif et du bureau AtoutFox depuis 2004,


webmaster www.atoutfox.org

MVP Microsoft Visual FoxPro de 2006 – 2011

VFPX Award 2010

2 / 52
Agenda
 Objet : Session de découverte du langage Java par un développeur 
Visual FoxPro.  (Sondage )
Puis, d’essayer de répondre à la question « Peut‐on faire en Java ce 
que l'on fait en VFP ? »
 Présentation : Proposition d’une présentation où chaque 
diapositive contient une comparaison VFP/JAVA afin de relever les 
analogies & les différences.
 Cette session n’est pas un cours Java ! 
Pourquoi ? 
‐ Elle s’adresse à des développeurs VFP ne connaissant pas Java (ni 
C#) mais curieux d’un survol simplifié, donner des pistes pour vos 
propres recherches. 
‐ Votre intervenant a un recul de 25 ans et une expertise sur VFP, 
mais découvre Java que depuis de seulement quelques mois...
Challenge : présentation en 1h15…

3 / 52
Historique
Origine
1984 - Fox Software releases FoxBase
Origine
1989 - FoxPro 1.0 for DOS 1991 – Langage « Oak », / Green
1991 - FoxPro 2.0 for DOS James Gosling pour Sun
1992 – Rachat de Fox Software par
MICROSOFT ($173M)
1993 - FoxPro 2.5 1995 – Version 1.0
1997 – Version 1.1
Versions Microsoft 1998 – Version 1.2 (PLAYGROUND)
1995 - Visual FoxPro 3 (TAZ) 2000 – Version 1.3 (KESTREL)
1996 - Visual FoxPro 5 (ROADRUNNER) 2002 – Version 1.4 (MERLIN)
1998 - Visual FoxPro 6 (THAOE) 2004 – Version 5.0 (TIGER)
2001 - Visual FoxPro 7 (SEDONA)
2003 - Visual FoxPro 8 (TOLEDO) 2006 – Version 6.0 (MUSTANG)
2004 - Visual FoxPro 9 (EUROPA) 2006 : Open Source & Free
2007 - Sedna and SP2 for VFP 9 2009 – 2010 Rachat de Sun Microsystems
2007 – Annonce du 13 mars pas de vfp 10 par ORACLE
-------- 2011 - Version 7.0 (DOLPHIN)
2013->2014 – Version 8.0 (WOLF?)

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
4 / 52
Dynamic

Source Code (.prg, …) Source Code (.java, …)

VFP Compiler Java Compiler

Pcode (.fxp, .app, .exe…) Pcode (.jar)

Runtime VFP (vfp9r.dll) Runtime Java (JVM/JRE)

Runtime C++ 7.1  JRE / Plateform


(mscvr71.dll)

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
5 / 52
Editions
Visual FoxPro version 3 à 9 : Java SE :
un seule édition Standard Edition
-> Applications / postes autonomes
Java EE :
Enterprise Edition
Historiquement : -> Applications Web
Java ME :
De mémoire, pour Foxpro version 2.x Mobile Edition
il existait : -> Application sur équipements
- Une version « standard » (Téléphone, tablette, téléphone,
(pour développeur) autoradio, ….)
- Une version « Pro » Même langage : mais classes différentes
(pour générer des exécutables)
- Un kit de « connectivité »
(Librairie Connexion SGBDR) Ne pas confondre le langage Java et le
« Javascript » (Normalisé aussi à ECMA mais
qui est un langage de script, non typé, et
interprété dans les navigateurs)

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
6 / 52
Plateformes
Visual FoxPro version 3 à 9 : Conçu nativement Multiplateformes.
Microsoft Windows 32 bits
OS de développement (JDK) :
Historiquement :
Windows 32 et 64 bits
Visual FoxPro version 3.0 Linux 32 et 64 bits
Microsoft Windows 32 bits (1ère appli 32 MS) MAC OS X (64 bits - base FreeBSD)
Apple Mac OS (OS/9? 68000) Solaris 32 et 64 bits
Solaris SPARC 32 et 64 bits
FoxPro version 2.5 et 2.6
Microsoft DOS Linux ARM
Microsoft Windows 16bits …
Mac OS (OS7-8? 68000)
Unix OS d’exécution : toutes les « Plateformes »
disposant d’un runtime Java (JRE)…
FoxBase (Oracle parle de 3 Milliards
Xenix SCO, Unix SCO, DOS d’équipements… en comptant
Mais pas « cross-plateforme » téléphones et autres tablettes ?)

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
7 / 52
Licences
• Commerciale (ex) • Gratuite
• Core : Closed Source • Open Source

• Sedna et les « outils »


satellites de VFP + doc
versés en « Shared
Source » sur
vfpx.codeplex.com

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
8 / 52
Langage

• Dérivé (inspiration) • Dérivé (inspiration)


initiale de dBase initiale de C/C++
Ashton-Tate • Normalisé à l’ECMA
• Clone dBase,xBase

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
9 / 52
Concept de programmation

• Procédurale
(Puis événementielle en
version 2.x)

+
• Objets
• « Orienté » Objets
(depuis version 3)

(Tout est Objet)


(Compatibilité ascendante)

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
10 / 52
Périmètre
Un Langage Un Langage
+
Un IDE Le reste sont des ‘briques’
+ complémentaires à
Un gestionnaire de fichiers sélectionner et assembler
à ‘plat’ (DBC/DBF) selon ses besoins propres :
+
Connectivité SGBDR IDE : Notepad (), Eclipse,
(odbc) NetBeans…
Vaste choix de Frameworks,
Langage Orienté Données (Data Centric) Contrôle de sources,
Communauté de plus en plus faible
versionning, IC, …

Connectivité SGBDR (jdbc)


Communauté importante

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
11 / 52
Garbage Collector
• Le langage n’intègre pas de
mécanisme d’allocation de
mémoire (type malloc), ni de libération de
la mémoire (type free). - Identique -
• Le Runtime gère cela grâce à un
mécanisme complexe appelé :
« ramasse miettes » (G.C.)
• C’est une abstraction moderne de
‘haut niveau’ :
– Gain de temps programmation
– Sécurisant les oublis de
libération de ressources
mémoire
– Abstraction : pas de ‘pointeur’
physique VFP Précurseur ?
– …

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
12 / 52
Code Source

• Fichiers « textes » (.prg)


Mais aussi :
• En formulaire (.scx/.sct) Fichiers « textes » (.java)
• En classe visuelle
(.vcx/.vct)
• En rapport (.frx/.frt)
• En bdd (.dbc/.dct)
• En menu (.mnx/.mnt)
• En label (.lbx/.lbx) .properties (texte)
• Etc…

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
13 / 52
CaSe SeNsITiVe ?

VFP n’est pas sensible à la ‘casse’. JAVA est sensible à la ‘casse’.


Les ‘Noms’ (variables, procédures, (Tous les Noms sont Case
méthodes, champs,… peut être Sensitive) Concrètement :
indifféremment écrit dans le code
source en Majuscules comme en
iii=1;
Minuscules (ou même mixé !) tout iii=III+1;
en désignant la même ressource. (Erreur de compilation si III existe pas)
(case insensitive) qui peut s’écrire : iii++; 
Concrètement :
Concrètement :
iii=1
iii=III+1 iii=1;
IiI=iiI+2 Mais
Une seule variable "III« valant 4 III="Hello" ;
Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
14 / 52
Question de point‐virgule ;

Le « ; » indique la Le « ; » indique la fin de


continuité d’une la commande.
commande sur la ligne
suivante. Exemple :
Exemple : s=
s=; "Hello"+
"Hello"+; " "+
" "+; "World";
"World"
(Classique)
(Marquage robinet eau chaude)

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
15 / 52
Commentaires

• NOTE Commentaire // Commentaire


• * Commentaire
• && Commentaire /*
commentaire
• Note commentaire ; multi-lignes
multi-lignes */

Javadoc
/**
* @author Francis FAURE
*/

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
16 / 52
Déclaration de Variables

En VFP un ‘type’ est En JAVA un ‘type’ est


renseigné dans la syntaxe renseigné dans la syntaxe
‘à droite’ (après) avec le ‘à gauche’ (avant) sans
token ‘as’ token
Exemple :
Exemple : Integer i ;
private i as Integer i=1 ;
i=1 A noter que l’on peut
déclarer et affecter sur la
même ligne . L’exemple
précédent s’écrit aussi :
Integer i = 1 ; 
Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
17 / 52
Typage des Variables
VFP n’est pas typé. Java est ‘fortement’ typé.
Autre formulation :
VFP est ‘faiblement’ typé Il faut déclarer les variables
car toutes les variables sont avec un type avant de
des « Variants » (Analogie pouvoir les utiliser.
VB/C++)

‘Faiblement’ = il n’est pas Le type « Variant » n’existe


nécessaire de déclarer une pas. Rassurez-vous : tous
variable pour l’utiliser. les types de JAVA ont
comme grand-père le type
VFP dispose d’une syntaxe ‘Object’.
de déclaration des variables :
mais elle ne sert que dans D’une manière générale : en
l’IDE pour l’IntelliSense. JAVA tout est typé. (on y reviendra)
Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
18 / 52
Portée des Variables
• Puisque tout est
• Variable Publique Objets… JAVA ne
Public i as String dispose de pas de
(portée globale à tout le programme, même déclarée dans
une procédure...) ‘Variable publique’.
(Nous verrons plus loin comment disposer d’un
• Variable Privée mécanisme équivalent...)
Private j as String • Une variable est donc
(portée au programme et à ses sous programmes)

• Variable Locale ‘local’ (au sens VFP )


Local s as String String s;
(portée uniquement au programme / procédure / Méthode
en cours) • Par contre nous
Par défaut (omission) : retrouverons les
Private. portées de ‘Variables’
dans les propriétés.
Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
19 / 52
Portée des propriétés

• Propriété Publique • Propriétés Publiques


prop1 = "" public String prop1 = ""
(La propriété est exposée et peut-être utilisée par (La propriété est exposée et peut-être utilisée par les
les programmes instanciant un objet de cette programmes instanciant un objet de cette classe)
classe)

• Propriété ‘Privée’ • Propriétés ‘Privées’


PROTECTED prop2 = "" protected String prop2 = ""
(portée à la classe et aux classes filles, mais aussi aux
(portée à la classe et à ses sous-classes)
classes du même espace de noms -> Explications

• Propriété ‘Locale’ suivent)

HIDDEN prop3 = "" • Propriétés ‘Locales’


(portée uniquement à la classe) private String prop3 = ""
Par défaut : Publique. (portée uniquement à la classe)

On retrouve cette déclaration pour les méthodes


Par défaut : Protected.
On retrouve cette déclaration pour les méthodes

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
20 / 52
Espace de noms
• Il n’y a pas ‘d’espace
de noms’ dans VFP. • JAVA dispose d’une
Autre formulation : déclaration forcement
• Il y a qu’un seul dans un espace de
‘espace de noms’… noms que l’on appelle:

En fait : package
on peut faire une analogie
‘lointaine’ avec la commande :
set procedure to Le nom étant unique dans l’espace
Illustration : de noms: Il n’y a donc pas de
set procedure to proc1 confusion possible entre deux
o=createobject("classe") classes du même nom dans 2
set procedure to proc2 package différents (que l’on
‘import’).
o=createobject("classe")
(Similaire au NAMESPACE)

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
21 / 52
Type 1/3 : Types ‘Primitifs’
Pas de Type Types « Primitifs »
(ou un seul type ‘Variant’ cf ci-avant)
(Tout est objet… enfin presque…)
En fait en Interne VFP gère des types pour
la génération de son PCode (ByteCode) boolean (1) : true / false
c’est logique car le runtime est en C++
byte (1) : attention il est signé -128 / +127
boolean (1) : un token 0x61 .T. / 0x2D .F. short (2) : signé -32 768 / +32 767
int (4) : -2*10^9 / 2*10^9
byte (1) : attention non signé (0 / 255) long (8) : -9*10^18 / 9*10^18
short(2) : signé float (4) : virgule flottante (réel simple)
int (4) : signé
double (8) : virgule flottante (réel double)
Double (8) : format IEEE 754 « Double-
precision floating-point format » char (2) : Caractère Unicode
- Sign Bit : 1 bit
- Exponent : 11 bits Nota : Ils n’ont pas de majuscules.
- Significand precision : 53

Plus d’info sur :


http://en.wikipedia.org/wiki/Double_precision (Dans le roadmap de JAVA version 10 les
types primitifs seraient supprimés…)

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
22 / 52
Type 2/3 : Les enveloppeurs (Wrappers)
Pas d’équivalent. Wrappers
(Tout devient réellement objets…)
Mais on pourrait créer des classes Enveloppeur Type primitif
sur le même principe.
Character char
Byte byte
Short short
Integer int
Long long
Float float
Double double
Boolean boolean

Exemple :
Integer i=1;
i.toString();

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
23 / 52
Type 3/3 : Choix de Classes
• VFP : 19 classes • En JAVA
‘visuelles’ le nombre de classes est
et une quantité limitée non impressionnant et
visuelles. nécessite du temps
d’exploration (3977
• Effectivement cela couvre classes en version
presque tout des besoins Java 7).
des (‘anciennes’) • Les classes Java sont en
applications. Java.
Les solutions type
treeview / calendrier /
gantt / graphs … passent
par OLE/ActiveX tiers

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
24 / 52
C’est Classe

Définition d’une Définition :


classe: public class MyC1 {
define class MyC1 as custom }
enddefine /!\ Une classe = un fichier du même nom !

Instanciation :
Instanciation d’un MyC1 o;
objet sur une classe : o = new MyC1();
local o as MyC1 S’écrit sur une seule ligne :
o=createobject("MyC1")
MyC1 o = new MyC1();

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
25 / 52
Classe suite
define class MyC1 as custom public class MyC1 {}
enddefine
public class MyC2 extends
define class MyC2 as MyC1
MyC1{
prop1 = "Hello World" String prop1 = "Hello World";

function method1(param1 as String method1(String param1)


string) as string
{
this.prop1=UPPER(m.param1)
return this.prop1 this.prop1=
endfunc param1.toUpperCase();
return this.prop1;
enddefine }
}
local o as MyC2
o=createobject("MyC2") MyC2 o = new MyC2();
? o.method1("Hello Fox !") System.out.println(o.method1
("Hello Fox !"));

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
26 / 52
Classe suite – this & paramètres
public class MyC {
String prop1 = "Hello World";
define class MyC as custom
String method1(String prop1)
prop1 = "Hello World"
{
function method1(prop1 as this.prop1=prop1;
string) as string return this.prop1;
If type("m.prop1")=="C"
}
this.prop1=m.prop1
endif String method1()
return this.prop1 {
endfunc return this.prop1;
enddefine // return this.method1(this.prop1)
}
local o as MyC
}
o=createobject("MyC")
? o.method1() MyC o = new MyC ();
System.out.println(
o.method1());
Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
27 / 52
Procédures / Fonctions ?
•Java ne dispose pas de déclaration de
• VFP dispose de deux déclarations : procédure ou de fonction au sens VFP.
Procedure … EndProc (Historique Fox Procédurale et puisque
Function … EndFunc en Java tout est « objet »…)
(dans sa compilation le ByteCode généré Mais, nous allons voir dans la diapo
par VFP est en fait le même pour les deux suivante que l’on peut faire la même
syntaxes.) chose !
• Une déclaration de « Function » qui ne En analogie : il faut donc raisonner avec
contiendrait pas un « return » ne lève pas des méthodes (de classes).
d’erreur. (valeur par défaut retournée .T.) • Une méthode qui retourne quelque
• Comme une déclaration de chose doit être déclarée avec son type
« Procedure » peut contenir un ou des de retour. (équivalent d’une « Function »
« Return »… de VFP)
int ageDuCapitaine() …
• Une « Function » peut être appelée Java impose alors une sortie « return »
sans affectation. (du même type)
(Token explicite "=" 0x86 implicite 0x99) • Une méthode qui ne retourne rien doit
• Exemples : être déclarée comme ne retournant rien
z=UPPER("a") avec le token « void ». (équivalent d’une
=UPPER("a") « Procedure » de VFP)
void setAgeDuCapitaine(int a)..
UPPER("a")
• Comme VFP on peut appeler une
méthode sans affectation.
Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
28 / 52
Static
De quoi s’agit-il ? Exemple :
Le fait d’indiquer qu’une méthode
est ‘static’ permet de l’invoquer sans
créer d’instance de cette classe. public class Cvfp
{
En VFP un objet doit forcement être public static String
instancié sur une classe upper(String s)
(createobject(), addobject(), add
object…) pour appeler une méthode. {
L’équivalent de la déclaration d’une return s.toUpperCase();
méthode ‘static’ en VFP n’existe }
donc pas.
}
En fait, en analogie, cela correspond
à une Procédure / Fonction.

La déclaration ‘static’ d’une propriété La déclaration ‘static’ d’une propriété


n’existe pas en VFP. indique que cette valeur de propriété
En fait, en analogie cela serait une est partagée par toutes les instances
variable publique. créées sur cette classe.

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
29 / 52
Recommandation Setters / Getters
« Accesseurs / Mutateurs »
public class MyC {
Analogie en VFP :
private int prop = 0;
On peut écrire de la
int getProp()
même manière, {
voir utiliser : return this.prop;
}
_access()
void setProp(int prop)
_assign() {
this.prop = prop;
}
}

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
30 / 52
Numeric Operators
Addition + Addition +

Subtraction - Subtraction -

Multiplication * Multiplication *

Division / Division /

Exponentiation ** , ^ Exponentiation
Math.pow(Double, Double)
Modulus % mod() Modulus %

Group () Group ()

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
31 / 52
Relational Operators
Less than < Less than <

Greater than > Greater than >

Not equal to <>, #, != Not equal to !=

Less than or equal to <= Less than or equal to <=

Greater than or equal to >= Greater than or equal to >=

Equal to =, == Equal to ==

Character string comparison == Character string comparison


.equals(String)

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
32 / 52
Character Operators
Concatenation + Concatenation +

Concatenation - x

Comparison $ Comparison
.contains(String)

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
33 / 52
Logical Operators
Logical negative Logical negative
NOT, ! , .NOT. !

Logical AND Logical AND


AND, .AND. &&

Logical inclusive OR Logical inclusive OR


OR, .OR. ||

Expression groups Expression groups


() ()

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
34 / 52
CONSTANTES

Directive de pré compilation Java ne dispose pas de


« directive de pré
#DEFINE compilation »
Par contre il propose le mot
clé « final » rendant similaire
Exemple :
la réponse au besoin :
#define VERSION 1
final int VERSION = 1;

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
35 / 52
IF
Nul doute, que dans cette Version Java :
audience, tout le monde sait
que la syntaxe d’un test if (lExpression)
conditionnel s’exprime comme {
Commands ;
(doc VFP) :
}
[else
IF lExpression [THEN]
{
Commands
Commands ;
[ELSE
} ]
Commands]
ENDIF

Accolades optionnelles.
Remarque : dans le Pcode le « then » est
purement ignoré… Nota : les [ ] est une notation optionnelle et non la
syntaxe.

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
36 / 52
IIF (opérateur ternaire)

variable = IIF(condition,; variable = condition ?


valeur_si_vrai, ; valeur_si_vrai :
valeur_si_faux) valeur_si_faux ;

Attention au respect des types.

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
37 / 52
CASE
doc VFP : En Java, il n’y a pas l’équivalent
du « DO CASE » de vfp.
La structure approchante est le « switch »
DO CASE
mais attention c’est très différent.
CASE lExpression1 switch (variable) {
[Commands] case valeur1 :
Commands;
[CASE lExpression2 break;
[Commands]] ... case valeur2 :
Commands;
break;
[CASE lExpressionN case valeurN... :
[Commands]] Commands;
break;
[OTHERWISE default:
[Commands]] Commands;
ENDCASE }
Les String sont utilisables.
Attention à l’oubli du « break » !
Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
38 / 52
Boucle FOR

FOR VarName = nInitialValue ; for (VarName ; condition ;


TO nFinalValue ; modification compteur) {
[STEP nIncrement] ; Commands
Commands [break;]
[EXIT] [continue;]
[LOOP] }
ENDFOR | NEXT

Exemple : Exemple :
for i = 1 to 10 for (int i=1 ; i<=10 ; i++) {
next }

Les valeurs : finale et d’incrément sont


évaluées une seule fois au démarrage
de la boucle.

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
39 / 52
Boucle WHILE

DO WHILE lExpression while (lExpression) {


Commands Commands
[LOOP] [continue;]
[EXIT] [break;]
ENDDO }

Ou bien
do {
Commands
[continue;]
[break;]
} while (lExpression);

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
40 / 52
Tableaux

DIMENSION tableau[3] as Integer int tableau[] = {10, 20, 30};


tableau[1]=10 // ou
tableau(2)=20
tableau(3)=30 int tableau[] = new int[3];
tableau[0] = 10;
* Ou tableau[1] = 20;
DECLARE tableau[3]
tableau[2] = 30;
// ou
int[] tableau3 = new int[3];

/!\ 0 Based

Classes Collections : ArrayList, List,


/!\ One Based LinkedList, Vector.. Et Classe Map

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
41 / 52
Multitâches

VFP n’est pas Java est nativement


Multitâches. multitâches.
(pas de gestion de Un grand nombre de
‘threads’). fonctionnalité concernant
les threads (attente,
Voir librairie réveil, synchro, etc…)
« ParallelFox » sur vfpx sujet non détaillé dans
vfpx.codeplex.com/wikip ce survol car pouvant
age?title=ParallelFox couvrir une session à lui
seul.
Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
42 / 52
Classes « Abstraites »

VFP ne contient pas de Exemple :


définition de classes Une classe « Animal »
« Abstraites » pourrait-être définie pour être
utilisée en définition de
(Je n’ai pas trouvé classes « Chat », « Chien »,
d’équivalent) « Poule », etc…
En étant abstraite elle ne
C’est quoi une classe peut être instanciée mais
Abstraite ? C’est une permet de forcer la définition
classe sur lequel on ne des méthodes (polymorphes)
peut instancier d’objet. à surcharger.
Elle ne peut être utilisé En java la déclaration se fait
que pour être héritée. avec le token « abstract »

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
43 / 52
Exceptions
En Java :

En matière de gestion des erreurs : try


historiquement FoxPro ne proposait {
que :
ON ERROR …  }
catch (ClassCastExpression e)
{
Depuis VFP 8,
la nouvelle fonctionnalité proposée }
comblait ce manque :  Finally
{
TRY [ tryCommands ] }
[ CATCH [ TO VarName ] [ WHEN
lExpression ] [ catchCommands ]
] Le bloc « catch » peut être multiple
[ THROW [ eUserExpression ] ] selon le type d’erreur.
[ EXIT ] Depuis Java 7 on peut définir un
« multi-catch » exemple : C1 | C2 e
[ FINALLY [ finallyCommands ] ]
ENDTRY
L’équivalent « THROW » de VFP
s’écrit « throw » en Java..

Similaire / Différent ?    Mieux / Moins Bien  ?   Avis ?
44 / 52
Pratique
Nous devons voir suffisamment de théorie pour 
programmer notre premier cas concret :
 Hello World sur la console
 Classe Hello World en console
 Hello World Equivalent MessageBox

« transition »

 CvfpLike ‐> upper()
 VFP_MESSAGEBOX()

45 / 52
Prototype de « Labo »
PARTIE II :
Objet :
‐ Essayer de répondre à la question :
« Peut‐on faire en Java ce que l'on fait en VFP ? »
‐ Ma meilleur réponse est d’envisager, me semble 
t‐il, l’exécution du Pcode de VFP en JAVA.
‐ Survol du Pcode VFP
‐ Démonstration

46 / 52
VFP ByteCode
‐ Non documenté
‐ Ressources :
M. Robert Plagnard : 
DVFP ‐ session AtoutFox 2006
Membre du Bureau 2009‐2010

M. Christof Wollenhaupt (GUINEU)


Session Guineu Atoutfox 2007‐2008
Publications :
http://www.foxpert.com/docs/howfoxproworks.en.htm
http://www.foxpert.com/docs/fxp.en.htm

47 / 52
48 / 52
VFP PCode
VFP source code :
MyVar = "World"
MESSAGEBOX("Hello " + MyVar, 4+48, "Title")

ByteCode : Part Dump :

49 / 52
MyVar = "World"
MESSAGEBOX("Hello " + MyVar, 4+48, "Title")

50 / 52
Démo
 test_0.fxp (helloworld)
 test_unit_tests.fxp
 test_gui.fxp
 Votre test ? (selon timing)

 Encodage RGB
 Dimension des fenêtres
 Style barre de titre
 …

51 / 52
Objectif de session tenu ?

 Objet : Session de découverte du langage Java par un 


développeur Visual FoxPro. 

Puis, d’essayer de répondre à la question « Peut‐on faire 


en Java ce que l'on fait en VFP ? »

52 / 52

Vous aimerez peut-être aussi