11 février 2013

Introduction à la programmation orienté objet

Par Jean-Marc Amon
Il devient de plus en plus rare de nos jours de trouver des langages de programmation qui ne soient pas orienté objet. Ce terme médiatique et innovateur est presque devenu un gage de qualité pour le langage mais peut laisser encore perplexe bon nombre de profane dans le domaine.
Cet article se donne pour objectif de vous donner un aperçu, un peu plus claire, des nouveaux concepts de programmation introduit pas l’orienté objet et de ses avantages.
Avant de se lancer dans le vif du sujet nous allons commencer par définir certain terme qui pourrait suscités des questions à la longue.
Orienté objet

Qu’est-ce qu’un objet ?

En effet, il impossible de parler de programmation orienté objet sans parler d’objet : Un objet est une structure de donnée comme toutes les autres à la différence qu’elle contient en son sein les données et les différentes opérations possible sur ces données… un objet contient donc à la fois des variables appelées champs ou propriétés et des fonctions nommées méthodes.
Autant il est impossible de parler de programmation orienté objet sans parler d’objet, il est impossible de parler de d’objet sans parler de classe.

Qu’est-ce qu’une classe ?

La notion d’objet étant assimilé, il est plus facile d’aborder les classes étant donné qu’un objet est la représentation d’une classe en mémoire, en d’autres termes un objet est une instance d’une classe. Cela signifie simplement que la classe représente le type de données et l’objet, la variable issue de ce type.
Considérons une classe nommé Personne. Personne étant une classe, il devient automatiquement un type de données ; si une variable marc est de ce type alors marc est un objet de type Personne, il possède donc toutes les propriétés et méthodes que possèdent Personne mais peut donner une valeur à chacune de ses propriétés ; et ce processus s’appelle l’instanciation. Nous n’évoquerons aucun langage de programmation ici, même si cela nous aiderait à comprendre mieux, pour la simple raison que le concept d’orienté objet est une notion générale, chaque langage de programmation ayant une approche différente de ce concept, comprendre ce concept en se basant sur un langage définit pourrait être, pour ma part un handicap dans l’apprentissage des autres. L’essentiel est donc de comprendre le concept et de l’appliquer ensuite aux langages de son choix si possible.

Les fondements

La programmation orienté objet ou encore POO pour les intimes cache encore d’autres notions qui font tous son charme et qui sont même son fondement.

L’encapsulation

Dans ce nom qui peut paraître un peu barbare, se cache tout le concept de l’Objet. L’encapsulation, c’est la nouvelle manière de gérer les données introduit par le concept de l’orienté objet. Il n’est plus question d’écrire de nombreuses lignes de code de fonctions ou de procédures dispersées ici et là et qui n’ont souvent aucune relation entre elles mais de les classer par type, par relation. L’encapsulation permet aussi de voiler des données sensibles et ainsi les rendre invisible aux utilisateurs de la classe.
L’héritage
Si l’encapsulation est un peu difficile à illustrer au travers d’exemple concret l’héritage quant à lui est un peu plus accessible. Tout le monde c’est déjà ce que c’est que l’héritage, surtout chez nous les africains (on se tue pour ça). Alors c’est presque la même définition alors je ne vais pas répéter. Juste donner un exemple.
Imaginons une classe Personne qui contient les propriétés suivantes
  • Nom
  • Prénom
  • Age
Et les méthodes suivantes
    • Parler ()
    • Mentir () lol
    • Manger ()
    • Travailler ()
Et sachant que les femmes et les hommes sont des personnes, ils héritent de la classe Personne, pourtant les femmes et les hommes ne font pas les même choses, n’ont pas les mêmes aptitudes (malgré l’égalité des sexes). Une femme peut enfanter, un homme ne peut pas. Bon exemple non ?
Ainsi la classe Femme hérite de la classe Personne mais en lui ajoutant la méthode enfanter().

Le polymorphisme

Le polymorphisme découle directement de la notion d’héritage et j’explique pourquoi. Poly signifie plusieurs et morphisme = forme ainsi un objet polymorphe est un objet qui peut posséder plusieurs forme. Continuons avec notre exemple de tout à l’heure.
Imaginons maintenant qu’une femme ne parle pas de la même façon qu’on homme, qu’ils ne mangent pas la même façon et surtout qu’ils ne mentent pas pareillement. Tout ça pour dire que les classes enfants (Homme et Femme) héritent de toutes (enfin presque nous y reviendrons) les propriétés et méthodes de leur mère (Personne) mais peuvent à leur guise les redéfinir, les modifier. Et c’est en cela qu’on parle de polymorphisme.
La POO est un concept assez large, en parler dans un seul article serait trop long et pourrait être ennuyeux alors nous allons nous arrêter là pour continuer dans un autre article mais avant, une dernière petite chose.
La visibilité
La notion de visibilité descend directement du concept de l’encapsulation. Souvenez de cette phrase « L’encapsulation permet aussi de voiler des données sensibles et ainsi les rendre invisible aux utilisateurs de la classe » et ce sur quoi se base cette affirmation, c’est effectivement la visibilité.
Une méthode ou une propriété possède une visibilité et il en existe généralement trois(3).