INFORMATIQUE
 
 
TABLE DES MATIERES
 

Vous trouverez ici des références (sites Web et livres), 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. La plupart des sites référencés sont en anglais (ça se voit à leur titre). Les catégories qui proposent des documents ou du code source directement sur ce site sont marquées par un * dans la table des matières qui suit.

 
PROBLEMES DE SYNCHRONISATION HYPERMEDIA
ET COMPOSANTS REUTILISABLES POUR LES GRAPHES
 

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.

 
 
CREATION DE COMPOSANTS REUTILISABLES
POUR LA SIMULATION VISUELLE
 

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.

 
 
B++ LIBRARY & JIRK++
 

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 est encore qu'à ses débuts. Il reste lent et n'implémente pas certaines notions importantes de l'approche orientée objet telles que les classes génériques.

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.

 
 
CONCEPTION ET MODELISATION ORIENTEES OBJET
 

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. Voici quelques documents sur ce site se rapportant à l'orientation objet.


  • Chapitre de mon mémoire de master, vous y trouverez les bases de la modélisation orientée objet, dans l'objectif principal d'une simulation.


  • Chapitre de mon mémoire de thèse, il présente en détail les principaux concepts de l'orientation objet, en discutant plus particulièrement des avantages et défauts de chacun, en termes d'efficacité et de réutilisabilité.


  • Quelques travaux dirigés d'UML (Unified Modeling Language), un formalisme mondial pour la modélisation orientée objet, que j'ai donnés en école d'ingénieur.

Voici une sélection de sites Web faite plutôt pour des personnes confirmées dans le domaine.

  • Cetus Links - Object-Orientation
    Site qui répertorie de nombreux sites Web concernant l'orientation objet.

  • UML Specification
    Spécification du formalisme UML par l'OMG (Object Management Group), ce qui constitue une documentation complète de sa syntaxe.

  • UML en français
    Un cours clair et en français sur UML.

  • OOnumerics.org
    Ressources pour le calcul scientifique avec des langages orientés objets.

Voici quelques livres sur l'orientation objet.

  • Object-Oriented Design with Applications.
    Grady Booch.
    1991, Benjamin/Cummings.

  • Conception et programmation orientées objet.
    Bertrand Meyer.
    2000, Eyrolles.

  • Object-Oriented Approach.
    John W. Satzinger, Tore U. Orvik.
    1996, Boyd & Fraser.

  • Modélisation objet avec UML.
    Pierre-Alain Muller.
    1997, Eyrolles.

 
REUTILISATION ET REUTILISABILITE LOGICIELLES
 

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 de compagnies n'ont pas la connaissance suffisante pour développer elles-mêmes certaines parties de leurs logiciels, ou ne veulent pas s'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. Voici une sélection de sites Web qui discutent de la réutilisation et de la réutilisabilité logicielles.

Voici quelques livres sur la réutilisation logicielle.

  • Software Reuse.
    Bernard Coulange.
    1998, Springer.

  • Software Reuse.
    Ronald J. Leach.
    1997, McGraw-Hill.

  • Design Patterns: Elements of Reusable Object-Oriented Software.
    Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.
    1995, Addison-Wesley.

 
SIMULATION ORIENTEE OBJET
 

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).

Voici une sélection de sites Web qui discutent de la simulation informatique.

  • Systems Simulation
    Cours sur la modélisation et la simulation à événements discrets.

  • SCS Publications
    Liste d'articles sur la simulation informatique.

  • Visual Simulation Environment
    Informations concernant VSE (Visual Simulation Environment), un environnement de simulation visuelle basé sur une conception orientée objet.

  • Framsticks
    Un projet fascinant de simulation de la vie dans un espace tridimensionnel.

  • GA-Walk!
    Programme Java amusant et intéressant sur les techniques de marche de squelettes artificiels.

Voici quelques livres sur la simulation informatique.

  • Discrete-Event System Simulation.
    Jerry Banks, John S. Carson, Barry L. Nelson.
    1996, Prentice-Hall.

  • System Simulation.
    Geoffrey Gordon.
    1978, Prentice-Hall.

  • Object-Oriented Analysis and Simulation.
    David R.C. Hill.
    1996, Addison-Wesley.

  • Simulation, Modeling and Analysis.
    Averill M. Law, W. David Kelton.
    1982, McGraw-Hill.

 
LE LANGAGE C++
 

C++ est un langage de programmation orienté objet qui est très largement utilisé. Cependant son utilisation pour une bonne conception orientée objet peut s'avérer difficile. Une bibliothèque standard, la STL (Standard Template Library), a été développée pour fournir des classes d'objet réutilisables très utiles comme des conteneurs. Cette bibliothèque est désormais fournie avec n'importe quel compilateur C++. Voici des documents sur le langage que j'ai rédigés, certains pour des cours en école d'ingénieur.


  • Ce cours est destiné à des personnes qui connaissent déjà le C++ et qui désirent approfondir leurs connaissances des concepts du C++ (héritage multiple et virtuel, classes abstraites et interfaces, surcharge d'opérateurs, templates et instanciation partielle, exceptions, mécanisme RTTI, bibliothèque STL...) et de la programmation orientée objet (design patterns...).


  • Un diagramme UML qui décrit les relations et les principales fonctionnalités des conteneurs (séquences, ensembles, associatifs...) de la STL.


  • Rapport de recherche expliquant comment concevoir des algorithmes pour la recherche opérationnelle qui soient à la fois génériques et efficaces. Un package de test implémentant les solutions discutées dans ce document est proposé pour permettre des comparaisons d'efficacité entre les différentes conceptions.

Voici une sélection de sites Web qui traitent de concepts C++ avancés aussi bien que de notions de bases, et de la STL.

Voici quelques livres sur C++.

  • The Annotated C++ Reference Manual.
    Margaret A. Ellis, Bjarne Stroustrup.
    1995, Addison-Wesley.

  • The C Programming Language.
    Brian W. Kernighan, Dennis M. Ritchie.
    1988, Prentice-Hall.

  • More Effective C++.
    Scott Meyers.
    1996, Addison-Wesley.

  • C++ Templates: the Complete Guide.
    David Vandevoorde, Nicolai M. Josuttis.
    2003, Addison-Wesley.

 
LE LANGAGE JAVA
 

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é. Voici des documents sur le langage que j'ai rédigés, certains pour des cours en école d'ingénieur et en IUT.


  • Ce cours est destiné aux personnes confirmées en C++ désireuses d'acquérir rapidement les notions de la programmation Java. Il présente les concepts de base du langage Java: classes et héritage, structures de données, flux, graphisme AWT, exceptions, threads...


  • Ce document est une synthèse de cours dispensés à des niveaux différents. La première partie s'adresse à des débutants qui souhaitent acquérir les bases du langage. La seconde partie aborde des notions plus avancées de programmation objet (interfaces, classes internes, design patterns...) et de programmation générique (classes et méthodes génériques, "concepts", types contraints...), à travers plusieurs bibliothèques (flux, collections, graphisme Swing, threads...).


  • Une série d'exercices sur des structures de données classiques: tableaux, listes chaînées, piles, files d'attente, arbres binaires...


  • De petites applets Java (horloges, animation 3D, fractales, animation de graphe, Tetris...) avec leur code source.


  • Module de la bibliothèque B++ Library, qui permet la manipulation de n'importe quelle classe Java directement en C++. Ainsi, les composants graphiques Java, par exemple, sont disponibles en C++.

Voici une sélection de sites Web sur le langage Java.

  • The Java Tutorial
    Documentation complète de Sun Microsystems sur Java.

  • JavaSide.com
    Documentation, code source et liens sur Java.

  • JavaWorld
    Magazine sur Java avec une bonne documentation et du code source.

  • TD Java
    Apprendre Java à travers des travaux dirigés, en français.

  • Deux cafés, l'addition !
    Un document qui décrit les concepts de Java plutôt que le langage lui-même, en français.

  • Java SDK
    Télécharger gratuitement le kit de développement Java de Sun Microsystems.

  • Polytechnique - Programmation et algorithmique
    Travaux dirigés de Java, le plus souvent corrigés, sur divers sujets d'algorithmique, en français.

 
RECHERCHE OPERATIONNELLE
& TECHNIQUES ALGORITHMIQUES
 

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.

Voici deux cours rattachés à ce domaine que j'ai donnés en IUT.


  • Ce cours est une introduction à la recherche opérationnelle. Il reprend des problèmes et des méthodes classiques: le plus court chemin, la méthode PERT, l'arbre de poids minimum, le flot maximum, la programmation linéaire...


  • Ce cours est en fait un préliminaire à la recherche opérationnelle. Il présente des structures de données classiques: tableaux, listes chaînées, piles, files d'attente, arbres binaires... Le code source de ces structures est disponible en C et Java. Pour mieux comprendre les arbres binaires et comment ils sont équilibrés, une applet Java est fournie. Une (C et Java) est également disponible.

Voici une sélection de sites Web sur la recherche opérationnelle.

Voici quelques livres sur la recherche opérationnelle.

  • Introduction to Algorithms.
    T. Cormen, C. Leiserson, R. Rivest.
    1990, MIT Press and McGraw-Hill.

  • Introduction to Operations Research, 6th Edition.
    Frederick S. Hillier, Gerald J. Lieberman.
    1995, Mc Graw-Hill.

  • Optimization in Operations Research.
    Ronald L. Rardin.
    1998, Prentice-Hall.

  • Network Flows: Theory, Algorithms, and Applications.
    Ravindra K. Ahuja, Thomas L. Magnanti, James B. Orlin.
    1993, Prentice-Hall.

  • Optimisation combinatoire: méthodes mathématiques et algorithmiques.
    Michel Sakarovitch.
    1984, Hermann.

  • Graphes et algorithmes.
    Michel Gondran, Michel Minoux.
    1979, Editions Eyrolles.

 
PROGRAMMATION WEB
 

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é avec l'utilisateur (avec JavaScript), permettre l'accès à des informations stockées en base de données (avec PHP par exemple), et proposer des applications embarquées (avec Flash/ActionScript, Java...). Voici quelques cours que j'ai donnés en IUT.


  • Ce cours explique comment utiliser le langage JavaScript pour introduire du dynamisme dans les pages HTML. En plus du langage, il introduit les bases de la programmation orientée objet, une partie du formalisme UML (Unified Modeling Language), et la notion d'événement indispensable pour la conception d'interface utilisateur.


  • Ce cours présente comment utiliser le langage PHP et le gestionnaire de bases de données MySQL pour concevoir un système d'information avec une interface Web. Il explique comment interagir avec un gestionnaire de bases de données comme MySQL afin de fournir un contenu dynamique et permettre éventuellement une modification en ligne de ce contenu.


  • Ce cours présente comment construire un système de gestion de contenu (ou Content Management System: CMS) en utilisant le langage PHP et le système de gestion de base de données MySQL. L'objectif est double: tout d'abord comprendre ce qui se cache derrière des CMS répandus comme DotClear ou SPIP; ensuite être capable de construire son propre site collaboratif qui sera plus adapté à ses besoins.


  • Ce cours explique comment utiliser le langage ActionScript pour développer des programmes dynamiques et interactifs, comme des animations ou des jeux, dans une application Flash. Il présente également quelques éléments de programmation orientée objet, et la notion d'événement indispensable pour la conception d'interface utilisateur.

Voici une sélection de sites Web sur les différents langages utiles à la conception de sites Internet.

  • W3 Schools
    Tutoriaux et références pour quasiment tous les langages d'Internet.

  • Tout JavaScript
    Scripts, tutoriaux et références pour le langage JavaScript, en français.

  • PHP.net
    Tutoriaux et références pour le langage PHP.

  • PHP France
    Tutoriaux et références pour le langage PHP et le gestionnaire MySQL, en Français.

  • Startjeux.com
    Site dédié à la programmation, en français. Vous y trouverez des leçons, des scripts, des exercices et des liens sur les langages PHP, JavaScript et HTML.

  • Loïc's Page
    Cours complet en français sur le langage HTML.

 
GRAPHISME
 

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.


  • Ce document détaille une technique pour dessiner un objet en 3D sur un écran d'ordinateur et comment se déplacer dans cet environnement 3D.


  • Ce document explique tout simplement comment sont construites de petites fractales comme le "flocon de neige".

Voici une petite sélection de sites, en français, sur les mathématiques et la géométrie.

  • Infographie
    Cours d'infographie qui commence avec les tracés les plus simples pour progressivement aborder la 3D, les surfaces complexes... Les algorithmes sont clairement expliqués et des exemples sont proposés en C.

  • Mathématikos
    Des applets animées pour illustrer divers concepts mathématiques.

  • Imageo
    Redécouvrez certaines propriétés géométriques avec cette applet.

  • LaboMath
    Quelques applets construisant des fractales, des courbes...

Voici quelques sites sur les stéréogrammes, ces images où il faut loucher pour voir apparaître une forme en 3D.

 
DIVERS
 

J'ai mis ici des sites Web traitant de sujets informatiques qui ne correspondent pas à l'une des catégories précédentes, mais qui sont cependant très intéressants.