• Aucun résultat trouvé

CHAPITRE IV : SPECIFICATION ET OUTILLAGE

5. IMPLEMENTATION DE L’OUTIL

5.1. Développement avec JAVA

Après l’explication de quelques fonctionnalités de la spécification de l’outil en RSL, on est passé vers l’implémentation de l’outil avec un langage de programmation. Parmi les langages proposés pour le développement des outils informatiques, on a choisi le langage de programmation Java. En fait, le but de Java à l'époque était de constituer un langage de programmation pouvant être intégré dans les appareils électroménagers, afin de pouvoir les contrôler, de les rendre interactifs, et surtout de permettre une communication entre les appareils. Etant donné que le langage C++ comportait trop de difficultés, un des acteurs du projet (considéré désormais comme le père de Java) décida de créer un langage orienté objet reprenant les caractéristiques principales du C++, en éliminant ses points difficiles, et en le rendant moins encombrant et plus portable.

/*safety impact*/

safety_impact : RequestChange_Id >< Sys -> Message safety_impact(rc_id, system) is if ~ initialization_process(rc_id, system) then Initialization_Process_not_Finish else if ~ system_related_safety(system) then No_Safety_related_to_System else if safety_caused_by_RequestChange(rc_id, system) then RC_Impact_on_Safety else No_Safety_Impact_with_RC end end end,

Chapitre IV- Spécification et Outillage

5.1.1. L’aspect orienté objet

La première caractéristique du JAVA est l’orienté objet ("OO"). Ce caractère fait référence à une méthode de programmation et de conception du langage. Bien qu'il existe plusieurs interprétations de l'expression orientée objet, une idée phare dans ce type de développement est que les différents types de données doivent être directement associés avec les différentes opérations qu'on peut effectuer sur ces données. En conséquence, les données et le code sont combinés dans une même entité appelée objet. Un objet peut être vu comme une entité unique regroupant un comportement, le code, avec un certain état, les données. Le principe est de séparer les choses qui changent de celles qui ne changent pas; souvent un changement au niveau d'une structure de données va impliquer un changement dans le code servant à manipuler ces données et réciproquement. Ce découpage en entités cohérentes appelés objets permet d'avoir des fondations plus solides pour bâtir une architecture logicielle de qualité.

L'objectif est de pouvoir développer des projets plus simples à gérer et de réduire le nombre de projets aboutissant à un échec. Un autre objectif majeur de la programmation orientée objet est de développer des objets génériques de sorte que le code réutilisable entre différents projets. Un objet "client" générique par exemple doit avoir globalement le même comportement dans les différents projets, en particulier si ces différents projets se recoupent comme c'est souvent le cas dans les grandes organisations. Dans ce sens, un objet peut être vu comme un composant logiciel enfichable, permettant à l'industrie du logiciel de bâtir des projets d'envergure à partir d'éléments de base réutilisables et à la stabilité éprouvée tout en diminuant de manière drastique le temps de développement.

La réutilisation du code, lorsqu'elle est soumise à l'épreuve de la pratique, rencontre deux difficultés majeures: la création d'objets génériques réellement réutilisables est une notion très mal comprise et une méthodologie pour diffuser de l'information nécessaire à la réutilisation de code manque cruellement. Certaines communautés du monde "Open Source" veulent contribuer à résoudre ce problème en fournissant aux programmeurs la possibilité de diffuser largement de l'information sur les objets réutilisables et les bibliothèques objet.

5.1.2. Indépendance vis-à-vis de la plateforme

La deuxième caractéristique présentée en utilisant le langage de programmation JAVA, est l'indépendance vis à vis de la plateforme. Cette indépendance, signifie que les programmes écrits en Java fonctionnent de manière parfaitement similaire sur différentes architectures matérielles. On peut effectuer le développement sur une architecture donnée et faire tourner

Chapitre IV- Spécification et Outillage

l'application sur toutes les autres. Ce résultat est obtenu par les compilateurs Java qui compilent le code source "à moitié" afin d'obtenir un bytecode (plus précisément le bytecode Java, un langage machine spécifique à la plateforme Java). Le code est ensuite interprété sur une machine virtuelle Java (JVM en anglais), un programme écrit spécifiquement pour la machine cible qui interprète et exécute le bytecode Java.

De plus, des bibliothèques standard sont fournies pour pouvoir accéder à certains éléments de la machine hôte (le graphisme, le multithreading, la programmation réseau,...) exactement de la même manière sur toutes les architectures. Notons que même s'il y a explicitement une première phase précoce de compilation, le bytecode Java est interprété ou alors converti à la volée en code natif par un compilateur "juste à temps" (Just in time). Il existe également des compilateurs Java qui compilent directement le Java en code objet natif pour la machine cible, comme par exemple GCJ, supprimant la phase intermédiaire du bytecode mais le code final produit par ces compilateurs ne peut alors être exécuté que sur une seule architecture.

Les premières implémentations du langage utilisaient une machine virtuelle interprétée pour obtenir la portabilité. Ces implémentations produisaient des programmes qui s'exécutaient plus lentement que ceux écrits en C ou en C++, si bien que le langage souffrit d'une réputation de faibles performances. Des implémentations plus récentes de la machine virtuelle Java (JVM) produisent des programmes beaucoup plus rapides qu'auparavant, en utilisant différentes techniques.

5.1.3. Le Swing

Le Swing constitue une innovation apparue dans JDK1.1 en tant qu'extension de ce dernier et en tant que partie intégrante de Java 2 SDK. Dans notre outil, le Swing était une facilité pour le développement de notre interface. Swing est la seconde bibliothèque de classes (la première étant AWT) permettant de créer et gérer des interfaces graphiques. Les méthodes utilisées pour construire une interface Swing sont sensiblement les même que celles de AWT soit :

créer un cadre ou contenant,

placer des composants dans ce contenant,

effectuer la mise en page de ces composants dans le contenant,

Chapitre IV- Spécification et Outillage

5.2. L’environnement Eclipse

Eclipse est un environnement de développement intégré dont le but, est de fournir une plate-forme modulaire pour permettre de réaliser des développements informatiques. En effet, I.B.M. est à l'origine du développement d'Eclipse qui est d'ailleurs toujours le cœur de son outil Websphere Studio Workbench (WSW), lui même à la base de la famille des derniers outils de développement en Java d'I.B.M. Tout le code d'Eclipse a été donné à la communauté par I.B.M afin de poursuivre son développement.

Cependant, les principaux modules fournis en standard avec Eclipse concernent Java mais des modules sont en cours de développement pour d'autres langages notamment C++, Cobol, mais aussi pour d'autres aspects du développement (base de données, conception avec UML, ...). Ils sont tous développés en Java soit par le projet Eclipse soit par des tiers commerciaux ou en open source. Les modules agissent sur des fichiers qui sont inclus dans l'espace de travail (Workspace). L'espace de travail regroupe les projets qui contiennent une arborescence de fichiers.

Bien que développé en Java, les performances à l'exécution d'Eclipse sont très bonnes car il n'utilise pas Swing pour l'interface homme-machine mais un toolkit particulier nommé SWT associé à la bibliothèque JFace. SWT (Standard Widget Toolkit) est développé en Java par IBM en utilisant au maximum les composants natifs fournis par le système d'exploitation sous-jacent. JFace utilise SWT et propose une API pour faciliter le développement d'interfaces graphiques.

Eclipse ne peut donc fonctionner que sur les plate-formes pour lesquelles SWT a été porté. Ainsi, Eclipse 1.0 fonctionne uniquement sur les plate-formes Windows 98 /NT /2000 /XP et Linux. En fait, SWT et JFace sont utilisés par Eclipse pour développer le plan de travail (Workbench) qui organise la structure de la plate-forme et les interactions entre les outils et l'utilisateur. Cette structure repose sur trois concepts : la perspective, la vue et l'éditeur. La perspective regroupe des vues et des éditeurs pour offrir une vision particulière des développements. En standard, Eclipse propose huit perspectives. Les vues permettent de visualiser et de sélectionner des éléments. Les éditeurs permettent de visualiser et de modifier le contenu d'un élément de l'espace de travail.

Enfin, le plugin ECLIPSE VE (Visual Editor) est un framework dont le but est de faciliter le développement permettant la réalisation d'interfaces graphiques. Même si VE est proposé avec une implémentation de référence proposant la conception d'interfaces graphiques

Chapitre IV- Spécification et Outillage

reposant sur SWT, Swing ou AWT, le but du framework est de pouvoir proposer à terme la conception d'interfaces graphiques reposant sur d'autres bibliothèques, pas nécessairement développées en ou pour Java.