Vous trouverez ici des documents (mémoires de thèse et master, cours, articles...), du code source (C, C++ et Java) concernant différents domaines de l'informatique. J'ai essayé de les classer au mieux par catégorie.
Il s'agit du mémoire de la thèse que j'ai réalisée de fin 1998 à début 2003 au laboratoire LIMOS sous la direction du Professeur Philippe Mahey. Ce travail est orienté autour de deux axes. Premièrement, employer des techniques de recherche opérationnelle pour résoudre des problèmes de synchronisation qui surviennent dans la conception et la présentation de documents hypermédia. Deuxièmement, expliquer en quoi le développement d'une bibliothèque de composants réutilisables pour les problèmes de graphes ne peut pas toujours suivre les règles classiques du génie logiciel, et proposer des solutions de conception. Les formats actuels de diffusion de documents sur Internet apportent sans conteste de nouvelles possibilités par rapport aux supports traditionnels. Mais les exigences deviennent toujours plus grandes et de nouveaux langages font régulièrement leur apparition pour tenter d'améliorer encore la structure et l'interactivité des documents. Parmi ces langages, certains offrent la possibilité d'animer et synchroniser des composants multimédia. Mais la variété de ces composants (audio, vidéo, texte, image...) font de l'animation un problème compliqué. Le problème étudié ici consiste à trouver un bon ajustement des durées des composants pour que la présentation se déroule au plus proche des contraintes exprimées par l'auteur. Ce problème peut se modéliser, au prix de quelques restrictions, comme un problème de tension de coût minimum dans un graphe. Pour le résoudre, nous avons étudié différentes approches (programmation linéaire, mise à conformité - out-of-kilter, mise à l'échelle du dual - cost-scaling). Nous proposons également des méthodes pour résoudre le problème sur des classes particulières, les graphes série-parallèles ou presque série-parallèles, plus représentatifs des cas réels de synchronisation hypermédia. Pour cette étude, nous avons développé une bibliothèque de composants réutilisables pour les problèmes de graphes. La thèse comporte donc trois chapitres sur cette problématique. Tout d'abord, la réutilisabilité de manière générale est abordée, en expliquant pourquoi la recherche opérationnelle ne peut pas être traitée classiquement par le génie logiciel. Ensuite, une présentation assez complète de l'approche objet est proposée, en insistant sur les aspects efficacité et réutilisabilité des différents concepts. Enfin, nous présentons des patrons de conception pour le développement de composants génériques pour la recherche opérationnelle, et proposons un aperçu rapide des diverses problématiques, plus techniques, rencontrées dans la conception d'une bibliothèque portable et réutilisable.
Il s'agit de mon mémoire de master que j'ai réalisé en 1998 durant un séjour de cinq mois à l'Université Virginia Tech avec le Professeur Osman Balci. Ce rapport contient un aperçu assez complet des concepts de l'orientation objet, une présentation de la simulation informatique et plus précisément de la simulation à événements discrets. Il y a aussi une discussion sur la réutilisation et la réutilisabilité logicielles. Enfin, ces concepts sont illustrés avec la présentation de bibliothèques conçues avec VSE (Visual Simulation Environment) pour une simulation visuelle. Il y a trois bibliothèques. La première est une conception expérimentale concernant le déplacement d'objets dans un plan, une carte... en deux dimensions. Elle peut être utilisée comme base pour la création d'une bibliothèque réutilisable plus complète et mieux conçue. La seconde bibliothèque fournit une classe pour manipuler les dates dans le calendrier Grégorien. Nous pensons que sa présentation peut être utile pour quelqu'un qui souhaite développer une bibliothèque portable et réutilisable semblable dans un autre langage. La dernière bibliothèque n'est pas présentée dans cette version HTML, qui n'est pas la reproduction complète du rapport mais seulement un regroupement des chapitres les plus intéressants.
Comment faire quand on veut écrire un programme qui soit utilisable sur n'importe quelle plateforme ? Mis à part Java, il n'y a pas de solution directe. Malheureusement, Java n'en était encore qu'à ses débuts au démarrage du projet. Il restait lent et n'implémentait pas certaines notions importantes de l'approche orientée objet (les classes génériques notamment). Depuis, Java a évolué et propose l'utilisation des génériques, mais leur efficacité est limitée (à cause du mécanisme de type erasure). B++ Library est une bibliothèque C++/Java thread-safe d'environ 90000 lignes de code source développée dans le cadre de ma recherche. Elle fournit principalement des composants pour la recherche opérationnelle et la simulation, mais repose sur une base orientée objet qui garantit une certaine portabilité et favorise la réutilisabilité des composants logiciels développés. Cette portabilité a été testée sous des environnements Linux, Unix et Microsoft Windows avec différents compilateurs. Divers programmes ont également été développés pour éprouver la réutilisabilité des composants de la bibliothèque.
B++ Library ne dispose pas d'interface graphique propre, en assurer sa portabilité serait quasiment impossible. En revanche, elle propose le mécanisme Jirk++ qui permet la manipulation de n'importe quelle classe Java directement en C++. Les composants graphiques Java sont ainsi disponibles dans la bibliothèque.
De petits programmes, les B++ Tools, ont été développés avec cette bibliothèque, ils sont disponibles compilés pour Microsoft Windows. Leur code source se trouve dans la B++ Library.
La plupart des langages de programmation et des logiciels utilisent maintenant les concepts de l'orientation objet. Bien que ce soit une manière naturelle de modéliser la réalité, l'approche orientée objet est difficile à maîtriser quand on veut modéliser clairement un système complexe ou concevoir judicieusement un logiciel.
La réutilisabilité logicielle est devenue un challenge économique. En effet, les développeurs de logiciels ont généralement besoin de réutiliser des parties d'anciens logiciels pour en concevoir de nouveaux. La réutilisabilité logicielle peut être un gain de temps dans une vision à long terme. En outre, beaucoup d'entreprises n'ont pas la connaissance suffisante pour développer elles-mêmes certaines parties de leurs logiciels, ou ne veulent pas y investir. Elles cherchent donc des bibliothèques logicielles qu'elles puissent utiliser directement. Enfin, l'approche orientée objet est très bien adaptée pour garantir la réutilisabilité logicielle, c'est pourquoi les deux domaines sont étroitement liés.
La simulation informatique est un vaste domaine, avec différentes sortes de simulation. On considère principalement ici la simulation à événements discrets utilisant les concepts de l'orientation objet. La B++ Library présentée précédemment fournit un module de simulation appelé B++ Simulator. Ce framework permet de la simulation à événements discrets avec une animation visuelle reposant sur une technologie orientée objet (C++ et Java).
C++ est un langage de programmation orienté objet très largement utilisé, notamment dans le domaine scientifique. Il permet aussi la programmation générique sur laquelle repose notamment la bibliothèque standard STL (Standard Template Library). Cette approche est complémentaire de la programmation orientée objet, avec des mécanismes mis en oeuvre à la compilation qui peuvent éviter certains traitements à l'exécution.
Java est aussi un langage orienté objet très répandu. Il est plus jeune et doit sa célébrité à sa syntaxe simple (comparé au C++), à la richesse de ses bibliothèques (multimédia, réseau...) et à sa portabilité.
La recherche opérationnelle est une discipline qu'il est difficile de cerner. En effet, elle utilise les mathématiques comme support théorique dans le but d'une application informatique, l'une des difficultés résidant dans le passage de la théorie à la pratique. Elle fournit des méthodes et des algorithmes pour résoudre une grande variété de problèmes qui ne pourraient pas l'être sans l'aide de l'informatique. Cela peut être aussi bien de simples algorithmes comme la recherche d'un plus court chemin entre deux points, que des méthodes sophistiquées comme la résolution de systèmes mathématiques complexes.
Le développement de sites Internet nécessite la connaissance de plusieurs langages afin de pouvoir aboutir à une bonne présentation de l'information (avec HTML et les feuilles de style CSS), proposer de l'interactivité à l'utilisateur (avec JavaScript et plus récemment TypeScript), et permettre l'accès à des informations stockées en base de données (avec PHP par exemple).
Avec un langage comme Java, il est très facile de faire du graphisme. Voici quelques documents que j'ai rédigés après avoir écrit des applets en Java. Ils expliquent les principes que j'ai utilisés pour les programmer. Donc, vous trouverez pour chacun des sujets une explication et une mise en pratique avec une applet Java dont le code source est bien entendu disponible.
|