Un langage orienté objet est un langage de programmation informatique qui tourne autour du concept d’objet. Des langages orientés objet ont été développés pour faciliter le développement, le débogage, la réutilisation et la maintenance des logiciels par rapport aux langages antérieurs. La compréhension des objets et des langages orientés objet nécessite une connaissance de l’évolution des langages de programmation informatique et des structures de données.
- Évolution des langages de programmation informatique
- Langage d’assemblage.
- Langues d’ordre élevé.
- Langages structurés.
- Langages Orientés Objet.
- Caractéristiques de la programmation Orientée objet
- Encapsulation et masquage des données.
- Héritage.
- Polymorphisme.
- Langages orientés objet courants
- Petite discussion.
- C++.
- Java.
- Autres langues.
- Bibliographie
Évolution des langages de programmation informatique
Les langages de programmation informatique ont continuellement évolué au fil des ans. Cette évolution est détaillée dans les exemples suivants.
Langage d’assemblage.
Les premiers programmes informatiques ont été écrits en langage assembleur. C’est un type de langage primitif dans lequel chaque instruction correspond à une seule instruction machine; c’est l’opération informatique la plus basique possible. Accomplir quelque chose d’utile nécessite de nombreuses instructions de la machine. Le langage d’assemblage est spécifique à un type particulier d’ordinateur; déplacer le programme vers un autre type d’ordinateur nécessite l’écriture d’un tout nouveau programme. Les programmes de langage d’assemblage sont difficiles à écrire, à déboguer et à maintenir. Bien que d’autres langages soient maintenant utilisés pour la plupart des applications informatiques, le langage d’assemblage est encore utilisé aujourd’hui comme premier langage lorsqu’une nouvelle puce est développée.
Langues d’ordre élevé.
Après le langage d’assemblage, des langages d’ordre supérieur ont été développés ; parmi les premiers, on trouve FORTRAN et BASIC. Une déclaration dans une langue d’ordre élevé correspond à une phrase en anglais. Un programme appelé compilateur lit les instructions d’un fichier source et génère un fichier contenant des instructions de machine, appelé fichier objet. Le fichier objet peut ensuite être chargé et exécuté par l’ordinateur. Un langage d’ordre élevé est plus portable qu’un programme de langage d’assemblage ; le même fichier source peut être compilé pour n’importe quel ordinateur tant qu’un compilateur approprié existe.
Les premiers langages d’ordre élevé ne sont autorisés que pour les types de données simples tels que entier, nombre à virgule flottante ou chaîne (une séquence de lettres). La seule structure de données disponible était le tableau. Un tableau est une liste d’éléments qui sont tous du même type de données; par exemple, une liste de nombres ou une liste de chaînes. Une base de données a été créée à l’aide d’un groupe de tableaux. Par exemple, une base de données de produits peut contenir trois tableaux appelés Numéro de produit, Description du produit et Prix du produit. C’était au programmeur de garder les tableaux alignés; par exemple, de s’assurer que le troisième élément de chaque tableau correspondait au même produit.
Langages structurés.
L’étape suivante dans l’évolution des langages de programmation informatique a été le développement de langages structurés, comme le C et le PASCAL, et l’introduction de structures de données. Une structure de données est un assemblage de types de données plus simples en un seul enregistrement. Par exemple, une base de données de produits pourrait être construite sous la forme d’un tableau d’enregistrements de produits, chaque enregistrement contenant le Numéro de produit, la Description du produit et les champs de prix du produit. Maintenant, un enregistrement peut contenir toutes les informations nécessaires sur un seul élément. Les structures sont également devenues plus définies dans la partie procédurale du langage. Une fonction ou une procédure est une petite partie d’un programme plus vaste qui pourrait être écrite pour fournir une opération de base sur une structure de données telle qu’un enregistrement.
Langages Orientés Objet.
L’étape suivante de l’évolution des langages de programmation informatique, l’orientation objet, a été introduite dans le langage Smalltalk. L’orientation des objets prend les concepts de programmation structuréeun pas plus loin. Maintenant, au lieu de structures de données et de structures de programme distinctes, les éléments de données et de programme sont combinés en une seule structure appelée objet. Les éléments de données d’objet sont appelés attributs, tandis que les éléments de programme d’objet sont appelés méthodes. Collectivement, les attributs et les méthodes sont appelés les membres de l’objet. Habituellement, les méthodes d’un objet sont les seuls programmes capables d’opérer sur les attributs de l’objet.
Avec l’orientation des objets, un changement fondamental est survenu dans la façon dont les programmes sont vus. L’opinion antérieure était que les données devaient être manipulées d’une manière ou d’une autre pour obtenir un résultat final, et un programme était considéré comme un moyen séquentiel d’effectuer les manipulations. Du point de vue de l’orientation des objets, un programme est considéré comme un groupe d’objets qui réagissent aux messages de l’utilisateur, d’autres programmes ou d’autres objets. Ce point de vue a conduit à l’idée d’une programmation événementielle; c’est-à-dire lorsque l’événement A se produit, cet objet effectue l’action B. Un message est envoyé à un objet en appelant l’une de ses méthodes.
Caractéristiques de la programmation Orientée objet
Les principales caractéristiques de la programmation orientée objet comprennent l’encapsulation et le masquage des données, l’héritage et le polymorphisme.
Encapsulation et masquage des données.
L’idée centrale de la programmation orientée objet (POO) est que les attributs de l’objet et les méthodes qui opèrent sur les attributs sont liés ensemble, ou encapsulés, dans l’objet. Les méthodes de l’objet fournissent les seules interfaces entre l’objet et les autres parties du programme. Ceci est différent des langues antérieures, où n’importe quelle partie d’un programme pouvait fonctionner sur n’importe quelle donnée à tout moment. Bien que cela semble restrictif, les restrictions se traduisent par un programme plus modulaire, plus facile à développer et moins susceptible de contenir des erreurs. Cela signifie également qu’il est plus facile de déplacer un objet dans un environnement différent tout en le faisant fonctionner correctement.
Un objet logiciel est quelque peu similaire à un objet physique. Par exemple, un moteur peut être utilisé pour alimenter une voiture. Il a des composants internes, correspondant à des attributs, mais il n’est pas nécessaire de se préoccuper de ce qu’ils sont ou de leur fonctionnement. Le moteur doit s’interfacer avec les collecteurs d’accélérateur, de carburant, de transmission, d’admission et d’échappement, qui correspondent tous à des méthodes. Il est inconcevable que le carburant pénètre dans le moteur par d’autres moyens que le système d’alimentation en carburant. Tant que les interfaces correctes sont maintenues, le moteur fonctionnera. C’est donc avec des objets. Les attributs de l’objet sont cachés de l’extérieur. L’objet interagit avec son environnement à travers ses méthodes.
Héritage.
Un autre concept important de la programmation orientée objet est l’héritage. Une classe d’objets est définie dans une hiérarchie, et on dit qu’elle hérite du comportement de ses ancêtres (les objets au-dessus d’elle dans la hiérarchie). Par exemple, un programme de dessin peut inclure trois classes d’objets : Forme, Rectangle et Cercle. Ils pourraient être définis de telle sorte que le Rectangle et le Cercle soient tous deux des descendants de la forme.
La forme inclut des attributs communs à n’importe quelle forme, tels que l’emplacement de la forme sur une surface de dessin. Shape fournit également des méthodes pour manipuler ces attributs. Par exemple, une méthode de déplacement modifierait l’emplacement de la forme. En outre, il fournirait une définition des méthodes auxquelles toutes les formes doivent pouvoir répondre, par exemple, une méthode de dessin pourafficher la forme sur une surface de dessin. La méthode draw dans ce cas est dite abstraite; elle ne fait rien d’autre que de créer une exigence selon laquelle les classes descendantes doivent l’implémenter.
Comme Rectangle est un descendant de Shape, il hérite des attributs (emplacement) et des méthodes (déplacement) de Shape. Il fournit les attributs supplémentaires dont il a besoin (largeur et hauteur) et de nouvelles méthodes qui manipulent ces attributs (setWidth, setHeight). Rectangle doit également fournir une méthode de dessin qui peint un rectangle sur la surface de dessin, car chaque descendant de Forme doit implémenter une méthode de dessin. De même, Circle fournit un nouvel attribut (radius), des méthodes pour le manipuler (setRadius) et une méthode de dessin qui lui est propre.
Avec ce type d’arrangement, le programme gestionnaire de dessins aurait une liste de formes sur la surface de dessin. Pour déplacer un objet, il appellerait la méthode move de l’objet. Pour dessiner un objet, le gestionnaire appelle la méthode draw de l’objet. Le gestionnaire ne sait ni ne se soucie de la façon dont l’objet se déplace ou se dessine, tant que le travail est fait. En fait, il peut même ne pas savoir quel type de forme un objet particulier est vraiment. Il peut s’agir d’un rectangle, d’un Cercle ou de tout autre objet descendant de Shape. Il suffit de savoir qu’il est descendant de la Forme, de sorte qu’il peut lui envoyer n’importe quel message qu’une Forme peut recevoir.
La capacité d’héritage d’un langage orienté objet a ajouté une toute nouvelle dimension à la programmation. L’apprentissage d’une langue antérieure d’ordre élevé était principalement impliqué dans l’apprentissage de la syntaxe du langage (comment les instructions linguistiques sont construites), ce qui n’est pas si difficile. Dans un langage orienté objet, l’apprentissage de la syntaxe est toujours nécessaire, mais se familiariser avec les hiérarchies de classes standard – qui peuvent inclure des milliers de classes, chaque classe avec ses propres méthodes — est une tâche beaucoup plus importante. Cela en vaut la peine, cependant, car un objet hérite des attributs et du comportement de son parent. Un programmeur peut éviter le travail inutile en trouvant un objet existant qui fait déjà la plupart de ce qui est nécessaire. Ensuite, de nouvelles capacités peuvent être ajoutées progressivement. Le résultat est un logiciel moins coûteux et de meilleure qualité.
Cette caractéristique a également conduit à l’inclusion de fonctionnalités de documentation automatique dans plusieurs langages orientés objet. Dans les langues antérieures, la documentation — si elle était générée – était faite séparément, presque après coup. Désormais, les informations de documentation peuvent être incluses dans le code source de l’objet et utilisées pour générer automatiquement un document HTML (Hypertext Markup Language), avec des hyperliens de haut en bas des hiérarchies de classes, qui peuvent être visualisés avec un navigateur Internet. Il est ainsi beaucoup plus facile de maintenir une documentation précise et à jour.
Polymorphisme.
La caractéristique suivante importante du langage orienté objet est le polymorphisme, ce qui signifie qu’un objet descendant n’a pas à répondre à un message exactement comme le fait son ancêtre. Un nouvel objet peut remplacer les méthodes de son parent, ce qui provoque une réaction différente du nouvel objet à un message. Par exemple, une classe commune dans un système de fenêtrage est un composant, qui représente un objet visible. Un composant est une classe ancêtre pour chaque objet visible à l’écran : icônes, boutons, menus, barres de diapositives, cases à cocher, boutons radio, voire fenêtres. Toutes ces classes descendantes remplacent certaines des méthodes du composant pour modifier le comportement. Par exemple, un objet Icône doit s’afficher sous la forme d’une petite image. L’icône remplace la méthode de dessin du composant pour afficher l’image.
Langages orientés objet courants
Les langages orientés objet courants incluent Smalltalk, C, Java et d’autres langages tels que BASIC et PASCAL.
Petite discussion.
Smalltalk était le langage orienté objet original, développé au début des années 1970 par Xerox. Depuis lors, plusieurs variantes ont été introduites. Il est toujours utilisé, mais son acceptation généralisée a été entravée par l’absence d’une norme universelle.
C++.
C++ est une extension du langage C qui fournissait des capacités de POO. C’est probablement le langage orienté objet le plus répandu actuellement utilisé. C est un langage hybride car il compile des programmes C standard; il ne nécessite pas l’utilisation d’objets. Cela lui permet de tirer parti des logiciels C existants, tout en utilisant l’orientation des objets pour les nouveaux logiciels. C est contrôlé par les normes ANSI.
Java.
Java est le langage orienté objet pur le plus largement accepté. Il a été développé par Sun Microsystems à l’origine comme langage de contrôle pour les petits appareils. Cependant, il s’est avéré idéal pour une utilisation avec Internet. Une applet Java peut être intégrée dans une page Web. Lorsqu’un navigateur charge la page Web, il charge et affiche également l’applet. Sun maintient toujours un contrôle strict de la norme linguistique.
Pour faciliter l’opérabilité multiplateforme (travailler sur des types d’ordinateurs entièrement différents sans recompilation), Java est implémenté en deux parties. Le compilateur produit un fichier objet qui ne peut être exécuté que par une machine virtuelle Java (JVM). Une machine virtuelle JAVA distincte est disponible pour chaque système d’exploitation pris en charge (Windows, Unix/Linux ou Solaris). Cela rend les programmes Java capables de s’exécuter sur n’importe lequel de ces systèmes sans recompilation.
Autres langues.
La plupart des langages couramment utilisés aujourd’hui permettent une certaine forme d’orientation d’objet. BASIC a évolué en Visual BASIC orienté objet ; PASCAL en DELPHI orienté objet. Généralement, ce sont des langages hybrides, comme C, qui prennent en charge l’orientation des objets sans l’exiger.
voir aussi Compilateurs; Souris; Langages procéduraux.
Donald M. McIver
Bibliographie
Deitel, Harvey M. et Paul J. Deitel. Java: Comment programmer, 2e éd. Rivière Saddle supérieure, NJ : Prentice Hall, 1998.
Voss, Greg. Programmation Orientée Objet, Une Introduction. En 1991, il est nommé à la tête de l’Académie des Sciences.