=============================================================================== | | | Petite étude de cas dérivée du projet BOM | | | | Jeudi 06 juin 2002 | =============================================================================== 1) Description des fichiers =========================== Archive Concernée : ------------------- bom-petit-cas-annexe.arc Contenu de l'archive : ---------------------- Dossier src : A_Objects.mch A_Objects_imp.imp Constantes.mch Constantes_imp.imp MachineDeTest.mch MachineDeTest_imp.imp Package_ML.mch Package_ML_ref1.ref Package_ML_ref2.ref Package_ML_imp.imp Dossier trad : vide Dossier bdp : Les preuves des machines 2) Description de cette petite étude de cas =========================================== Dans le projet BOM, l'étude de cas basée sur la modélisation de la JavaCard était divisée en 2 parties : * La machine de gestion des objets * Tout le reste de l'interpréteur C'est lors du développement de cette première partie que nous avons décidé de commencer par faire un programme à part, qui servirait d'exemple de modélisation de l'infrastructure de la machine Objet. Ce projet nous permettait de faire un développement en profondeur d'abord. Ce projet consiste en la réalisation de la fonction "InstanceOf" et de toute l'infrastructure nécessaire à sa mise en oeuvre. En effet, si certains éléments, comme la fonction Super qui renvoie la classe mère d'une classe donnée, ne seront pas à réaliser dans le projet BOM, il faut ici fournir toute l'infrastructure. Le seul but de ce projet est de mettre en place le système d'héritage. Il y a notamment dans ce projet, un chargeur de classes et la fonction super. 3) Installation et compilation de ce projet sous AtelierB version 3.6 ===================================================================== 3.1) Installation ----------------- -> Lancez l'atelier 3.6 -> Cliquez sur le bouton "restore" -> Avec les champs "Directories list" et "Archives list" sélectionnez l'archive -> Entrez l'adresse du dossier de destination dans "Project Directory" -> Selectionnez le type de restauration "B Source Files And Proof Files" -> Validez avec le bouton OK. -> Sélectionnez le projet créé et cliquer sur "libraries..." --> "Add..." -> Sélectionnez la librairie "Library" -> Validez avec le bouton OK. Le projet est maintenant installé avec tous ses fichiers de preuves et ses librairies. 3.2) Vérification et Compilation -------------------------------- Si vous voulez voir le magnifique tableau suivant : +-------------------+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ | COMPONENT | TC | POG | Obv | nPO | nUn | %Pr | B0C | C | Ada | C++ | HIA | +-------------------+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ | A_Objects | OK | OK | 2 | 0 | 0 | 100 | OK | | | | | | A_Objects_imp | OK | OK | 7 | 9 | 0 | 100 | OK | - | - | - | - | | Constantes | OK | OK | 10 | 0 | 0 | 100 | OK | | | | | | Constantes_imp | OK | OK | 26 | 20 | 0 | 100 | OK | - | - | - | - | | MachineDeTest | OK | OK | 3 | 0 | 0 | 100 | OK | | | | | | MachineDeTest_imp | OK | OK | 175 | 108 | 0 | 100 | OK | - | - | - | - | | Package_ML | OK | OK | 104 | 35 | 0 | 100 | OK | | | | | | Package_ML_imp | OK | OK | 165 | 63 | 0 | 100 | OK | - | - | - | - | | Package_ML_ref1 | OK | OK | 133 | 70 | 0 | 100 | OK | | | | | | Package_ML_ref2 | OK | OK | 120 | 18 | 0 | 100 | OK | | | | | +-------------------+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ | TOTAL | OK | OK | 745 | 323 | 0 | 100 | OK | - | - | - | - | +-------------------+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ Alors il faut demander à refaire les preuves (Replay). Ensuite, pour compiler ce projet, il faut sélectionner le fichier "MachineDeTest_imp" et cliquer sur le bouton "Translator". Ensuite, il y a un piège, il faut que les champs "All" et "Heterogeneous" soient cochés. Pour le langage, à vous de choisir. Après validation, la génération de l'exécutable commence. Les fichiers produits seront dans le dossier : trad/{nom du langage choisi}/ Il faut ensuite compiler ces fichiers : > cd trad/{nom du langage choisi}/ > make -f makefile Un exécutable est alors généré dans le meme dossier. 4) Exécution du programme ========================= 4.1) Description ---------------- Les menus ne sont vraiment pas clairs alors voici un rapide résumé des fonctions et de leur mode d'emploi : 0 => La fonction Charger Prend en argument le numéro d'une classe déjà présente en mémoire, pour définir le lien de parenté, et le numéro d'une classe non encore présente dans la mémoire. Cette classe est alors chargée en mémoire avec comme classe parente la classe donnée au début. 1 => La fonction super. Prend en argument le numéro d'une classe. Si celle-ci est en mémoire, alors la fonction super renvoie le numéro de sa classe parente. Si le numéro donné est 0 alors il y a une erreur car 0 est la classe Object. 2 => La fonction InstanceOf. Prend en argument 2 numéros de classe. Si c'est 2 numéros correspondent à des classes déjà chargée en mémoire, alors la fonction dit si la première classe est ou non une descendance de la seconde. 3 => La fonction Quitter. Quitte le programme 4.2) Informations complémentaires --------------------------------- * Les numéros de classe sont des entiers compris entre 0 et 255. * Le numéro de classe 0 est toujours chargé en mémoire au lancement du programme. C'est le numéro de la classe Object. * On ne peut réaliser que 10 instructions consécutives. Ensuite le programme termine de lui meme. 4.3) Exemples ------------- a) Chargement de l'arbre des classes suivant : 0 / \ 2 1 / \ 3 4 | 5 => Séquence à taper pour charger la classe 2 : "0", "0", "2" => Séquence à taper pour charger la classe 1 : "0", "0", "1" => Séquence à taper pour charger la classe 3 : "0", "1", "3" => Séquence à taper pour charger la classe 4 : "0", "1", "4" => Séquence à taper pour charger la classe 2 : "0", "3", "5" b) Vérification de quelques propriétés : => Est-ce que 5 descend de 1 : "2", "5", "1" => Est-ce que 5 descend de 2 : "2", "5", "2" => Qui est la classe mère de 4 : "1", "4" => Qui est la classe mère de 5 : "1", "5" 5) Contacts =========== En cas de problème, contacter : Mme Marie-Laure Potet (Marie-Laure.Potet@imag.fr) ou M. Sylvain Boulme (Sylvain.Boulme@imag.fr) ou M. Nicolas Stouls (Nicolas.Stouls@imag.fr) ou M. Laurent Voisin (Laurent.Voisin@clearsy.com)