 |
INFORMATIQUE |
|
| |
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).
| |
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.
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.
| |
| 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.
Ce cours introduit les concepts fondamentaux de la programmation orientée objet: notions
d'objet et de classe (messages, encapsulation...), relations entre classes (héritage et
polymorphisme, agrégation, association...). Des concepts plus avancés
sont également abordés: héritage multiple, classes abstraites, interfaces,
classes génériques...
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é.
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.
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 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. Voici quelques documents sur ce site se rapportant à la
réutilisabilité.
Ce cours s'adresse aux personnes déjà familières avec la programmation
orientée objet, et qui s'intéressent à la phase de conception d'un logiciel.
Il présente des patrons de conception, ou design patterns, qui fournissent des
solutions conceptuelles éprouvées pour répondre à des problèmes
récurrents de développement logiciel.
Chapitre de mon mémoire de master, qui discute du concept de réutilisabilité
dans le domaine du développement logiciel.
Chapitre de mon mémoire de thèse, qui présente des solutions logicielles
pour développer des composants réutilisables pour la recherche
opérationnelle.
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 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.
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...).
Ce document est un complément au cours de C++ précédent. Il introduit
brièvement la métaprogrammation générique, approche qui repose sur le
mécanisme de spécialisation statique pour les patrons de composants. Plusieurs
exemples sont présentés: évaluation partielle, classes de traits,
métafonctions, structures de types (typelists), patrons d'expressions
(template expressions).
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.
Rapport de recherche qui décrit des techniques de programmation générique en
C++ pour déclarer des concepts, des relations de "modélisation" (entre un type et un
concept) et des relations de "raffinement" (entre deux concepts), et pour contrôler les
spécialisations de templates à partir d'une taxonomie de concepts. Une
bibliothèque appelée C4TS++ implémente la solution présentée dans
ce rapport.
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.
C++ Gems.
Stanley B. Lippman.
1996, SIGS Books.
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.
| |
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.
INFORMS OR/MS Resource
Collection
De nombreux liens sur tous les aspects de la recherche opérationnelle.
OR-Objects
Collection de classes Java pour développer des applications de recherche
opérationnelle.
Dictionary of Algorithms, Data
Structures and Problems
Dictionnaire très complet sur les algorithmes, les structures de données et quelques
problèmes. Certaines entrées proposent des explications très
détaillées et du code source.
Guide to Available Mathematical
Software
Un recueil de composants mathématiques.
tutOR
Tutoriels très compréhensifs sur la recherche opérationnelle, avec des applets
JavaScript.
Les cours du ROSO
Des exercices de cours et leur corrigé, du groupe ROSO de l'Ecole Polytechnique
Fédérale de Lausanne, concernant divers sujets de recherche opérationnelle.
Optimization
Online
Documents sur l'optimisation et des sujets proches.
GNU Linear Programming
Kit
Une bibliothèque gratuite pour la résolution de programmes linéaires, avec des
documents enrichissants sur les méthodes implémentées.
Graph Drawing
Ressources pour les problématiques d'affichage de graphe.
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.
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.
-
Loïc's Page Cours complet en
français sur le langage HTML.
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.
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.
|
|