C++, Java, Smalltalk

Home > Livres > C++, Java, Smalltalk
Couverture
ISBN : 2-212-09016-1

Introduction

Pour faciliter la réalisation des programmes, plusieurs paradigmes ont été proposés. L'historien des sciences Thomas Kuhn [KU70] utilise le terme de paradigme pour désigner un ensemble de théories et de méthodes qui, associées, représentent une manière d'organiser la connaissance, de voir le monde. Parmi les différents paradigmes présents dans les langages de développement (impératif, objet, logique,...), le paradigme objet prend une part de plus en plus importante dans les développements.

L'origine de la programmation objet est liée au besoin de regrouper des éléments informatiques ayant des caractéristiques communes afin de faciliter la programmation et l'exploitation de gros logiciels. La programmation structurée a privilégié les traitements par rapport aux données. La programmation objet s'intéresse aux données et permet de définir les traitements associés.

L'émergence de langages offrant automatiquement le paradigme objet a facilité son implantation et son utilisation. Un concept facile à utiliser permet d'améliorer la qualité des programmes.

L'approche procédurale propose un regroupement par traitement (ou sous-programme). Le modèle de données a un impact important sur l'ensemble des traitements de l'application. Une modification de celui-ci a une incidence sur la plupart des traitements. En effet, il est difficile de réutiliser un sous-programme complexe.

La programmation objet peut être comme un style de programmation permettant d'améliorer la qualité des programmes en répartissant la complexité sur chaque objet. Un programme n'est alors qu'une collection de traitements associés à des données, appelés objets et regroupés pour fonctionner ensemble. Les données n'étant modifiées que par un ensemble restreint et identifié de traitements, les erreurs sont plus facilement localisables. Un autre apport de la programmation objet est le polymorphisme. Ce concept permet de sélectionner un traitement suivant l'objet manipulé et d'enrichir ou de réutiliser un programme existant.

Le modèle objet est utilisable lors de l'analyse, de la conception et du codage. Cela permet d'obtenir une cohérence totale lors du développement. Il est facile de retourner en conception alors que la phase de codage est déjà fortement amorcée. Les langages ne possèdent pas toujours une traduction immédiate des concepts utilisés lors de l'analyse objet (tel est le cas de la relation "a un" par exemple), mais tout programme objet possède une traduction immédiate dans le modèle de conception. On ne retourne pas à la conception initiale mais on reste dans le paradigme objet.

Il n'est pas nécessaire d'utiliser un langage objet pour utiliser ce paradigme. Celui-ci peut s'exprimer avec un langage procédural traditionnel, mais cette procédure est très complexe, donc difficile à réaliser et à maintenir. Dans tous les cas, si un concept n'est pas présent dans un langage, il peut être traduit à la main. Il ne faut pas oublier qu'en final, cela se traduit par des ordres primitifs destinés au microprocesseur du poste de travail.

Plus un concept est apparent, plus le code est facile à maintenir et à comprendre. Par exemple, la syntaxe du langage peut exprimer clairement que l'on utilise une boucle de type "tant que". Il est facile de rédiger une boucle équivalente sans utiliser la syntaxe proposée par le langage. Un commentaire peut alors indiquer que le code traduit une boucle de ce type.

Pour des concepts plus complexes, la démarche est identique. Un code peut être la traduction d'un concept absent du langage. Les commentaires peuvent indiquer l'existence d'un concept. Le plus souvent, le programmeur ne sait même pas qu'il les utilise. Les règles de traduction de ces concepts ne seront pas maîtrisées, et il y aura des erreurs qui auraient pu être évitées si le sens avait été parfaitement compris. C'est pour cela que des langages plus évolués ont été inventés. Après avoir identifié les concepts les plus courants en développement, les langages ont proposé une syntaxe permettant de les exprimer.

L'identification d'un concept facilite également la communication entre développeurs. Un vocabulaire commun permet de négliger les détails d'implémentation. L'expression d'une idée sera éclairée par l'utilisation d'un concept déjà connu des interlocuteurs. Un concept est l'identification d'un traitement répétitif dans les développements. Il possède une traduction syntaxique. Un langage est équipé d'outils syntaxiques facilitant l'utilisation des concepts. Il est préférable d'avoir des informations de sens dans le langage plutôt que dans les commentaires. Les commentaires n'étant pas nécessaires à l'exécution du programme, ils sont souvent négligés. De plus, rien ne garantit leur adéquation au programme. C'est pourquoi il est préférable d'utiliser les éléments syntaxiques du langage plutôt qu'un codage à la main. Un concept est vérifié par le compilateur. Attention : l'existence d'un concept n'entraîne pas forcément la justesse de son utilisation. Il faut bien comprendre son objectif pour utiliser correctement les éléments syntaxiques correspondants.

La qualité d'un langage de programmation s'évalue selon sa richesse, sa cohérence, sa facilité d'utilisation et son intégration des concepts mis en place. De plus, l'environnement de développement doit apporter une aide importante pour faciliter la réalisation des logiciels, mais il est très difficile de comparer les environnements de développement, car ceux-ci sont spécifiques à chaque fournisseur.

Les langages, au contraire, sont normalisés. Ils se concurrencent sur la qualité. Les fournisseurs s'affrontent alors sur les environnements de développement et cherchent à imposer leurs bibliothèques pour fidéliser leurs clients. Smalltalk est un cas à part, car il est très fortement lié à ses environnements de développement. Choisir Smalltalk, c'est également choisir un fournisseur d'environnement et de bibliothèques.

Il existe pour tous les langages orientés objet, des bibliothèques permettant de créer des applications interactives avec fenêtres. Les approches sont différentes, mais les fonctionnalités très similaires. Les environnements de développement proposent des outils d'aide à la manipulation du langage (éditeur, navigateur de classe, références croisées, débogueurs, etc.), et des outils de génération de code spécifiques à leurs bibliothèques.

La famille Visual Age d'IBM est un exemple d'environnement adaptable à différents langages. Cela permet d'ajouter la notion de composants logiciels (Parts) absents du langage, mais supportés par l'environnement. Visual Age propose aussi la programmation visuelle.

Dans ce document, les concepts présents dans les environnements ne sont pas décrits.

But du livre

Cet ouvrage reprend les concepts essentiels présents dans les langages orientés objet. Il permet de les comparer, non par leurs syntaxes ou leurs approches techniques, mais par la richesse et la facilité de mise en oeuvre de leurs idées.

Ce document se propose donc de comparer les trois langages orientés objet les plus en vogue : Smalltalk, Java™ et C++. Cet ordre n'est pas chronologique. En effet, Java est le plus jeune des trois. Intercalé entre Smalltalk et C++, sa place correspond à sa position technique, même s'il est proche des deux autres. Cet ordre facilite la description séquentielle des approches.

Smalltalk

Smalltalk est le pionnier dans le domaine de la programmation objet avec héritage fondé sur une hiérarchie (il s'inspire de Simula). Il a été créé en 1972 par Alan Kay, de l'entreprise Rank Xerox Parc. C'est un langage interprété à base de machine virtuelle (par l'intermédiaire d'un byte-code), ayant subi de nombreuses évolutions au cours de son existence. Il propose un nombre très restreint de concepts qu'il utilise judicieusement afin d'offrir un environnement de développement uniforme. Il s'apparente plus à un L4G (langage de 4e génération) qu'à un langage traditionnel. Son environnement de développement est écrit avec lui-même. Il est pratiquement impossible de séparer l'environnement du langage. Il propose une exécution portable sous différents OS (Windows, Unix, Mac OS, OS/2).

C++

C++ est une extension objet du langage C. Développé aux Bell Laboratory (ATT) par Bjarne Stroustrup (1983), il s'inspire de Simula, le premier langage orienté objet, conçu quant à lui en 1967 par Dahl et Nygaard, de l'université d'Oslo. Grand frère du C, il a rapidement conquis le marché des langages orientés objet. Comme extension du C, il a hérité d'un passé pas toujours joyeux. Sa syntaxe est particulièrement difficile. Néanmoins, il présente une très grande performance.

Java

Java est un concurrent récent ayant bénéficié de la vague Internet pour s'imposer. Initialement, il a été inventé par Sun pour permettre la création de programmes embarqués sur des périphériques grand public (télévision, machine à laver...). Ses concepteurs ont judicieusement adapté leurs langages à Internet et l'ont proposé gracieusement sur le réseau. Java a acquis en moins d'un an une notoriété telle que tous les acteurs majeurs de l'informatique s'y sont attelés. Il sera bientôt livré en standard avec tous les systèmes d'exploitation. C'est un langage portable, indépendant de la plate-forme. Il utilise une "machine virtuelle" qui est supportée par les différents environnements. Ce langage répond à une demande forte des développeurs qui sont confrontés régulièrement aux problèmes de portabilité. Un programme écrit en Java est directement utilisable sous Windows, Unix ou Mac OS par exemple.

Structure de l'ouvrage

Les idées essentielles du modèle objet sont présentées dans ce document. Les réponses proposées par ces trois langages sont étudiées. Le concept est décrit schématiquement, sans faire intervenir de langage particulier. Ensuite, vous découvrez comment chacun y répond ou comment utiliser le langage pour répondre au concept. En effet, si certaines idées ne sont pas syntaxiquement présentes dans les langages, le développeur peut alors traduire à la main les concepts présents dans les autres langages. Grâce à cet ouvrage, vous apprendrez ce qu'est la programmation objet et ce qui différencie ces trois langages.

Le paradigme objet utilise un vocabulaire qui lui est propre. Il vous sera présenté au fur et à mesure. Vous trouverez en annexe un lexique qui vous permettra de vérifier la définition d'un terme.

Le livre est découpé en trois parties : la première, Les concepts, fait place aux Autres caractéristiques, dans la deuxième partie, qu'achève la troisième partie en guise de Conclusion.

Je remercie Stéphane Ducasse et Dan Dimcea, Philippe Duret, Paul-Henri Lampe, Marc Legru et Le Xiaohua pour leurs nombreuses remarques.

Pour me contacter : Ph. Prados