Image ventilateur qui tourne fond du ventilateur Circuit imprimé (image de titrage diode verte diode rouge
Administration

Programmation orientée objet

Paradigme de programmation apparu avec les langages Simula (1967) et Smalltalk (1980).

Cet article présente les caractéristiques essentielles de la programmation orientée objet indépendamment du langage utilisé.

Le terme programmation orientée objet est ici utilisé dans son acception la plus générale, c'est à dire qu'on ne se contente pas de parler des caractéristiques des langages orientés objet à classes.

Modifier l'organisation du code ?

Les premiers langages de programmation (avant l'objet) étaient procéduraux. Un programme était alors une suite d'instructions permettant de réaliser successivement les différentes étapes d'un algorithme. Tout au plus était-il possible, en définissant des fonctions (des suites d'instructions) d'éviter la fastidieuse recopie de portions de code mais le principe qui présidait à la rédaction du code était que la succession des lignes de code correspondait à la succession temporelle de leur exécution par la machine.

L'apparition des objets a profondément modifié cette organisation.

On a commencé à créer des objets (structures de données contenant des valeurs, capables de répondre à des messages en utilisant des fonctions appelées méthodes) et à leur envoyer des messages auxquels ils répondaient.

L'écriture du code s'en est trouvé bouleversée. Le principe de succession temporelle des instructions ne subsistant qu'à l'intérieur des objets.

Certains ouvrages d'initiation semblent se contenter de cet aspect formel (une nouvelle organisation du code) qui est certes réelle mais qui ne décrit qu'une partie de la programmation orientée objet.

Il faut en effet s'intéresser de plus près à ce qu'est un objet.

Modéliser le monde

Un objet n'est pas seulement une structure de données ou la concrétisation d'une succession de ligne de code, il doit être vu par le développeur comme un conteneur symbolique et autonome qui contient des données et des méthodes qui concernent un « objet » du monde réel. Parfois un objet réel (une facture, une machine, un livre,..) parfois un « objet » abstrait (un virement, une transaction, un achat, une vente,...)

Un objet (au sens de la programmation orientée objet) représente donc un objet du monde au sens le plus général du mot objet.

Plus sur les objets

Ce qui caractérise d'abord un objet, c'est qu'il s'agit d'un monde clôt. On n'a pas accès directement aux propriétés d'un objet. Il faut passer par un accesseur. C'est le principe de l'encapsulation qui évite beaucoup d'erreurs involontaires.

Créer des objets (classes ou pas classes)

Bien entendu, ce qui fait l'intérêt du concept d'objet c'est qu'on rencontre beaucoup d'objets qui se ressemblent (même propriétés et mêmes comportements). On les regroupe alors grâce à la notion de classe.

Une classe n'est pas un ensemble d'objets, elle ne contient pas d'objet mais elle rassemble les propriétés et les méthodes qui sont communes aux objet d'un type particulier. Elle va donc permettre de créer des objets, de les instancier.

La programmation orientée objet (au sens général) n'implique cependant pas l'existence de classes. Certains langages sont des langages à objets mais ne connaissent pas les classes.

On peut donc définir deux familles de langages orientés objet :

  • Les langages objet à classes (Smalltalk, C++, Java, PHP,...), de loin les plus nombreux. Les objets sont créés en utilisant les classes. Chaque objet a le type de la classe dont il est une instance.
  • Les langages objet à prototypes (SELF, CECIL, Javascript,...). Les objets sont créés en clonant un objet prototype.
    • Notons que l'expression langage orienté objet ne désigne souvent que la première famille (les langages objet à classes) sans doute parce que c'est une famille nombreuse.

Voir
classe, classe abstraite, classe finale, objet, méthode, méthode abstraite, méthode finale, héritage,
Anglais
Object-oriented programming.
Allemand
Die objektorientierte Programmierung (kurz OOP).
Bibliographie
BERSINI H. La programmation orientée objet :  cours et exercices en UML2, Python, PHP, C#, C++ et Java, y compris Android. 7e éd. Paris : Eyrolles, 2017. 672 p.([Collection noire). ISBN : 978-2-212-67399-9.
DELANNOY C. S’initier à la programmation et à l’orienté objet :  avec des exemples en C, C++, C#, Java, Python et PHP. 2e éd., 2e tirage 2016, avec nouvelle présentation. Paris : Eyrolles, 2016. 360 p.ISBN : 978-2-212-11826-1.
DENIS P., CUVELIER T. Créer des applications graphiques en Python avec PyQt5. Anzin : D-BookeR éditions, 2017. 378 p.ISBN : 978-2-8227-0518-9.
FOURNIER J.-P. Algorithmique objet :  avec C++. 2e éd. Paris : Vuibert informatique, 2005. 442 p.(Algorithmique). ISBN : 978-2-7117-4856-3.
GERVAIS L. Apprendre la programmation orientée objet avec le langage C#. 2e é. Saint-Herblain : Éditions ENI, 2016. 410 p.(Ressources informatiques). ISBN : 978-2-409-00033-1.
KERBOEUF M. Fondements de la programmation orientée objet avec Java 8 :  des mécanismes d’exécution aux bonnes pratiques de développement logiciel. Paris : Ellipses, 2016. 597 p.(Références sciences). ISBN : 978-2-340-01482-4.
MEYER B. Conception et programmation orientées objet. Paris : Eyrolles, 2000. 1223 p.(Technologies objet). ISBN : 978-2-212-09111-3.
THUILLIER V. Programmez en orienté objet en PHP. 2e éd. Paris : Eyrolles, 2017. 456 p.(OpenClassrooms). ISBN : 978-2-212-14472-7.