Organisation et présentation des Classes
Nous allons voir de la structure de la bibliothèque grâce à UML et ensuite nous allons présenter les classes.
Langage de modélisation
Nous avons choisi UML(Unified Modeling Language) comme langage de modélisation.
Définition 2.1.1. UML est une norme du langage de modélisation objet. Il se définit comme un langage de modélisation graphique et textuel destiné à décrire des besoins, spécifier et documenter un système, esquisser des architectures logicielles et concevoir des solutions. UML est simple à utiliser et à comprendre, il est indépendant du plateforme utilisé. Il permet de documenter l’architecture d’un système dans les moindres détails, il est avantageux car nous pouvons définir nos propres processus d’utilisation UML, il n’y a pas de processus obligé, pas de démarche spécifique, il n’y a qu’une notation graphique qui permet clairement de visualiser nos différents processus ce qui n’est pas le cas avec le code brut.
Diagramme de packages
Définition 2.2.1. Un package en Java est un regroupement de classes et interfaces dans un fichier que l’on place dans une arborescence de répertoire, le nom de chaque répertoire étant séparé par le caractère point. Les packages permettent d’assurer l’unicité d’une classe grâce à son nom pleinement qualifié.
Avant de voir un diagramme qui va fournir la représentation graphique de la structure de la bibliothèque, nous allons d’abord présenter quelques relations utilisées en UML.
La figure 2.1 représente une dépendance entre deux packages(ou entre les classes qu’ils contiennent).
Présentation des classes
Dans cette section, nous allons présenter chaque package ainsi que les classes qu’il contient. Nous allons seulement présenter les fonctions membres(méthodes) importantes de chaque, sous forme de tableau.
Package MathIO
L’opération de sauvegarde d’un objet dans un fichier est aussi appelée “sérialisation” [Dou, p. 569]. Pouvoir effectuer une telle opération est avantageux surtout dans le cas de notre bibliothèque, car cela nous permet de transporter les résultats plus facilement. Pour faciliter l’exportation et/ou l’importation des résultats, nous avons implémenté deux classes.
Package IPack
L’héritage multiple n’existe pas en Java. Les interfaces permettent de remplacer ce mécanisme. Définition 2.3.1 (Interface [Dou]). Une interface est une classe totalement abstraite, c’est-à-dire qui ne contient que des déclarations de méthodes et de données. Ce package contient une Interface, à savoir : jmaths.IPack.IFonc qui permet de représenter une fonction mathématique. Elle contient une seule méthode qui prend en paramètre la variable de la fonction.
Il est ici avantageux d’utiliser une interface car ainsi l’utilisateur pourra définir la fonction de son choix en créant une classe anonyme ou à part qui implémente cette interface et en redéfinissant la méthode double calcul(double) qui doit retourner l’expression de la fonction.
Sous-Package Integration
Ce package est spécialisé pour les méthodes d’intégration numérique. Il contient deux classes abstraites, deux classes qui représentent une intégration par la méthode des trapèzes, deux classes qui représentent une intégration par la méthode de Simpson et une classe qui représente une intégration par la méthode de Romberg. Ces classes seront vues dans le chapitre 4.3. Nous allons d’abord voir les deux classes abstraites, elles représentent chacune la situation dans laquelle l’utilisateur se trouve.
— Classe IntByTab -Si l’utilisateur ne connait la fonction qu’à partir d’un tableau de valeur, son constructeur prend en paramètre la longueur de l’intervalle d’intégration et le tableau de valeur. La méthode calcul peut lever une NbSubdivisionException.
— Classe IntByFonc -Si l’utilisateur connait l’expression analytique ou informatique de la fonction, son constructeur prend en paramètre les bornes d’intégration et la fonction. La méthode calcul peut lever deux exceptions : NbSubdivisionException et InvalidArgumentException. Elle utilise la classe IFonc vue un peu plus haut.
Ainsi chaque classe qui hérite de ces deux classes doit redéfinir la méthode calcul qui permet de calculer la valeur d’une intégrale.
Ensuite nous allons voir les classes qui représentent des intégrations proprement dites.
Manuel d’utilisation
Dans ce chapitre nous allons expliquer comment utiliser la bibliothèque.
Utilisation en général
Comme tout autre bibliothèque, on devra inclure le chemin de l’emplacement de celle-ci dans la variable système CLASSPATH ou l’inclure dans le classpath de notre projet.
Pour utiliser une classe ou interface de la bibliothèque, on devra importer le package correspondant en utilisant le mot clé import suivi du chemin menant à la classe ou l’interface. Chaque package de notre bibliothèque est un sous package de jmaths. Ainsi pour utiliser une classe contenue dans un package on pourra utiliser :
Implémentation
Dans ce chapitre nous allons voir des exemples d’implémentation de quelques méthodes.
Algèbre Linéaire
Dans cette section nous allons voir l’implémentation de quelques méthodes d’algèbre linéaire, notamment des méthodes de résolution d’un système d’équations linéaires, une méthode pour le calcul du déterminant, du rang et de l’inverse d’une matrice.
Perspectives d’amélioration
Comme nous l’avons mentionné dans l’objectif, ceci n’est qu’un prototype. Nous devons respecter la structure de la bibliothèque si nous voulons l’améliorer. Si nous voulons ajouter une nouvelle classe qui représentera une méthode ou un groupe de méthode, nous devons l’ajouter dans l’un des sous-packages de jmaths.Core correspondant, par exemple si nous voulons implémenter sous forme de classe la méthode de l’interpolation rationnelle [PTVF] et la méthode de Krigeage [For] nous devons les mettre dans le package jmaths.Core.Interpolation ; si nous voulons implémenter une méthode de recherche de valeurs propres nous devons le mettre dans la classe jmaths.Core.LinAlg.Operation ou implémenter une nouvelle classe dans de le même package. Si dans un cas nous voulons implémenter une méthode qui ne correspond à aucun des packages existant, nous devons créer un nouveau package dans jmaths.Core, par exemple si nous voulons implémenter des méthodes qui représentent les transformations de Fourier [PTVF] nous pourrions créer un package jmaths.Core.FourierTransform qui contiendra les différentes classes qui représenteront les méthodes de Fourier.
Il faut suivre les mêmes procédures si nous voulons ajouter de nouveaux objets dans le package jmaths.MathObject ou jmaths.IPack, ou encore si nous voulons définir de nouvelles exceptions, nous devons les mettre dans le package jmaths.Exceptions. Nous pouvons envisager d’améliorer certains algorithmes, comme par exemple celui de la multiplication de deux matrice. Si avec la méthode courante, le nombre d’opération nécessaire pour effectuer cette opération est de l’ordre de θ(N 3 ) avec l’algorithme de Strassen(présenté dans [Mag] et détaillé dans l’article [HJTT]) le coup est réduit à θ(N 2.807) opérations.
Une grande amélioration possible à part l’ajout de nouvelles méthodes et l’amélioration de celles qui se trouvent dans cette bibliothèque est de pouvoir représenter graphiquement une fonction ou un polynôme, ce serait avantageux de pouvoir voir explicitementune fonction d’interpolation à l’aide d’une courbe.
Présentation du projet
Formulation
La spécialité d’un individu dépend des études qu’il a effectué. Pour le bon fonctionnement d’une société, répertorier chaque individu selon sa spécialité est important, vu l’évolution des technologies de l’information, le ministère de l’enseignement supérieur et de la recherche scientifique (MESupReS) s’oriente vers la construction et le développement d’un annuaire de compétence.
Objectif
L’objectif de notre travail est de faciliter la tâche des personnels du MESupReS en créant un outil simple et rapide d’utilisation qui permettra de répertorier chaque individu ayant fait des études supérieurs selon leurs compétences, ceci afin de mieux les diriger vers le domaine de travail qui lui convient.
Ceci n’est que la mise en place des fonctionnalités de base de l’application, c’est-à-dire sa structure, les actions que les utilisateurs peuvent effectuer et la structure de la base de données, on pourra apporter de nouvelles fonctionnalités ou améliorer celles qui existent au fil du temps.
Les utilisateurs et leurs besoins
Nous allons voir les types d’utilisateurs et leurs besoins.
• Administrateurs :
1. super administrateur :
— pouvoir gérer les membres,
— pouvoir gérer les données.
2. administrateurs :
— pouvoir gérer les données.
• Simples utilisateurs :
— pouvoir effectuer des recherches spécifiées.
Résultats attendus
Les résultats attendus de ce projet sont de produire une application :
— sécurisée, simple et rapide,
— qui permet d’effectuer des recherches précises,
— qui permet de gérer les données,
— qui permet de gérer les utilisateurs.
Outils nécessaires à la réalisation du projet
Nous allons présenter les outils utilisés pour la réalisation du projet.
— NetBeans 8.0.2 utilisé comme outils de développement
— WampServer v2.5 utilisé comme plateforme de développement Web
— Visual Paradigm for UML 12.0 : utilisé comme outil de modélisation
— Gantt Project 2.7 utilisé comme outil de gestion de projet
— Mozilla Firefox utilisé comme outil de navigateur Web
Analyse et Conception
Analyse Préalable
Analyse de l’existant
Le MESupReS utilise Microsoft Excel pour répertorier les individus et leurs compétences. Une table Excel peut contenir assez d’information et est facile à utiliser, mais cet outil n’est pas très pratique, ne satisfait pas totalement les besoins des utilisateurs et son utilisation demande beaucoup de temps.
Analyse conceptuelle
Dans cette section nous allons présenter les fonctionnalités offertes par le système à l’aide des diagrammes de cas d’utilisation et après avoir déterminé le déroulement de chaque processus nous allons les voir en détail à l’aide des diagrammes de séquence.
Diagramme de cas d’utilisation
Les diagrammes de cas d’utilisation représentent les fonctionnalités offertes par le système du point de vue de l’utilisateur. Ils montrent les interactions fonctionnelles entre les acteurs et le système.
Conception détaillée
Dans cette section nous allons parler de la structure MVC et des diagrammes de séquence.
Architecture MVC
Un des problèmes en développement d’application WEB est de savoir quelle est la bonne méthode à appliquer pour concevoir notre application. Il y a des problèmes qui reviennent souvent,on a alors créé une série de bonnes pratiques que l’on a réunies sous le nom de design patterns, nous allons voir brièvement l’un des plus célèbres qui s’appelle MVC. On pourra consulter [Roq] et [Neb1] pour plus de lecture.
Perspectives d’amélioration
Ceci n’est qu’une initialisation à ce qui pourrait devenir une des applications qui pourrait satisfaire totalement les besoins d’une société en terme de système d’information. Nous avons mis en place la structure de base de notre application ainsi que les fonctionnalités de base. Nous avons utilisé la structure MVC [Roq] pour bien structurer notre application, comme par exemple pour le module “connexion”, nous pouvons améliorer les autres modules en les structurant de la même façon. Si nous voulons donc ajouter de nouvelles fonctionnalités nous devons utiliser ce modèle puisqu’il permet de concevoir indépendamment chaque composant et facilite surtout la maintenance de l’application. Nous pouvons envisager de mettre en place un module qui permettra d’entrer de nouvelles données à l’aide d’un fichier externe, par exemple avec une table Excel.
On pourrait encore améliorer l’interface de l’application avec CSS [Neb2]. Enfin nous pouvons envisager de porter le projet sur Java qui est plus sécurisé, plus stable, bien que son développement nécessitera plus de temps dans ce cas là.
Conclusion
Ainsi s’achève notre travail qui se divise en deux parties, dans la première partie nous nous sommes intéressés sur la création d’une bibliothèque de méthodes numériques et dans la deuxième partie il nous a été confié des tâches couvrant le développement d’un annuaire de compétence.
Dans la première partie notre objectif a été de créer une bibliothèque qui regroupe un certain nombre de méthodes vues en analyse numérique, facile à utiliser et dont les résultats obtenus sont portables. C’est-à-dire des résultats réutilisables sur un environnement qui possède une Java Virtual Machine(JVM), ceci en recréant les objets (3.3) qui représentent ces résultats. C’est ce qui diffère notre bibliothèque des outils de calcul déjà existants.
Nous avons établi les bases de notre bibliothèque c’est-à-dire sa structure. La perspective d’amélioration nous parle des améliorations envisageables ainsi la procédure à suivre pour en effectuer.
Dans la deuxième partie notre objectif a été de concevoir un annuaire de compétence qui permet de répertorier chaque individu selon ses compétences, de faire des recherches précises selon les critères voulus, nous avons mis en place un outil qui permet de gérer les utilisateurs. L’accessibilité aux différentes fonctions de l’application dépend du type d’utilisateur.
Nous avons mis en place sa structure de base, c’est-à-dire la structure de la base de données et les fonctionnalités qui répondent aux besoins basiques de chaque utilisateur , l’établissement de ces bases est nécessaire pour mener à bien les futures améliorations mentionnées dans la perspective d’amélioration. Bien que ces deux projets distincts ne soient que des prototypes, ils nous ont permis de mettre en pratique et d’approfondir nos connaissances en développement informatique,et nous ont fait avancer d’un pas dans chaque domaine.
Table des matières
Remerciements
Nomenclature
Introduction
I Développement d’une bibliothèque de méthodes numériques avec JAVA
1 Présentation du projet
1.1 Formulation
1.2 Outils de calcul existants
1.3 Objectif
1.4 Choix du langage de programmation
1.4.1 Les différents langages
1.4.2 Programmation orientée objet(POO)
1.4.3 Comparaison de JAVA et C++
1.5 Outils nécessaires
1.6 Planification du projet
2 Organisation et présentation des Classes
2.1 Langage de modélisation
2.2 Diagramme de packages
2.3 Présentation des classes
2.3.1 Package MathIO
2.3.2 Package Exceptions
2.3.3 Package MathObject
2.3.4 Package IPack
2.3.5 Package Core
3 Manuel d’utilisation
3.1 Utilisation en général
3.2 Outil de documentation
3.3 Exportation et importation des résultats
3.3.1 Exportation
3.3.2 Importation
4 Implémentation
4.1 Algèbre Linéaire
4.1.1 Résolution d’un système d’équations linéaires
4.1.2 Déterminant
4.1.3 Rang d’une matrice
4.1.4 Inverse d’une matrice
4.2 Interpolation
4.3 Intégration Numérique
4.3.1 Méthode des trapèzes
4.3.2 Méthode de Simpson
4.3.3 Méthode de Romberg
5 Perspectives d’amélioration
II Conception et mise en place d’un
Annuaire de compétence
6 Présentation du projet
6.1 Formulation
6.2 Objectif
6.3 Les utilisateurs et leurs besoins
6.4 Résultats attendus
6.5 Outils nécessaires à la réalisation du projet
6.6 Planification du projet
7 Analyse et Conception
7.1 Analyse Préalable
7.1.1 Analyse de l’existant
7.1.2 Conception avant projet
7.1.3 Structure de la base de données
7.2 Analyse conceptuelle
7.2.1 Diagramme de cas d’utilisation
7.3 Conception détaillée
7.3.1 Architecture MVC
7.3.2 Diagramme de séquence
8 Réalisation
8.1 Création de la base de données
8.1.1 Création des tables
8.1.2 Création des Vues
8.2 Sauvegarde et restauration de la base de données
8.2.1 Sauvegarde
8.2.2 Restauration
8.3 Présentation de l’application
9 Perspectives d’amélioration
Conclusion
Bibliographie