Précédent : Simulation Remonter :
Fondements
scientifiques Suivant : Algorithmique et structures
discrètes
Mots clés : programmation à objets, concurrence, distribution .
Le paradigme objet, même s'il date des années 70, reste un des aspects des langages de programmation les plus étudiés de nos jours. Ces dernières années, avec l'apparition du langage Java, on a pu observer une recrudescence de l'activité autour de la méthodologie objet. Autant le concept se veut universel, autant les variations des modèles et leurs implémentations possèdent des propriétés spécifiques souvent mal définies : sous la même terminologie objet se retrouvent des thèmes particuliers comme l'héritage (simple ou multiple), le sous-typage, la surcharge, etc.
D'autre part, les aspects programmation concurrente (en particulier, multi-threading, accès concurrents) viennent apporter un degré supplémentaire de complexité ; les programmeurs peuvent être confrontés aux questions suivantes : est-ce que plusieurs threads accèdent à un même objet en même temps ? Quels sont les objets partagés par un thread donné ? Y a-t-il des appels récursifs, directs ou à travers des cycles ?
Le mélange de l'ensemble de ces traits peut faire apparaître des cas où la spécification du langage reste floue et pour lesquels la construction d'applications et leur mise au point restent délicates.
Nous sommes donc convaincus de l'utilité d'environnements de développement dans lesquels le programmeur sera guidé dans la mise au point de ses applications, par des outils interactifs, graphiques, utilisant la sémantique du langage. A ce titre, Java Card est un bon exemple par la taille réduite des applications, et permet d'envisager le traitement de problèmes insolubles dans le cas plus général d'applications contenant des millions de lignes de code.
Le langage Java peut être également abordé comme un langage très prometteur pour la programmation distribuée sur un réseau ; l'arrivée de Java a laissé espérer que l'on pourrait distribuer des applications haute-performance sur le réseau Internet, premier pas vers le « meta-computing ». Malheureusement, les composants Java standards tels que RMI (Remote Method Invocation) n'aident en fait pas à construire de manière transparente des applications séquentielles, « multi-threadées », ou distribuées.
La question est donc : comment construire à partir des outils standards (par exemple threads, RMI, etc), des modèles et bibliothèques facilitant la programmation distribuée ? Un des domaines d'application particulièrement représentatif est la construction et l'évolution de collecticiels (plusieurs utilisateurs distants travaillent de manière coordonnée à une même tâche) dans lesquels se posent des problèmes d'élection, de synchronisation, de répartition des calculs, etc.