Logo du site

Jeu Vidéo 3

Techniques d'intégration multimédia

Programmation Orientée-Objet (concepts)

Introduction

La programmation orientée-objet est un concept qui effraie la plupart des programmeurs en herbe. Cela semble mystérieux et complexe. En fait, la plupart des langages de programmation modernes vous permettent d'utiliser les principes de la POO, souvent sans vous en rendre compte.

Concepts généraux... simplifiés

Identité
Chaque objet (instance) issu d'une classe a une identité qui lui est propre. Chaque objet est doté des mêmes caractéristiques que les autres objets issus de la même classe que lui (nom, rotation, age, etc...), mais les valeurs de ces caractéristiques lui sont propres. Exemple: toutes les automobiles ont une propriété couleur mais la valeur de cette propriété est distincte d'une instance à l'autre...

Abstraction
Lorsqu'on regarde un objet de l'extérieur, seulement certaines propriétés et/ou fonctions sont disponibles pour lui faire réaliser des tâches. Le reste du code est "caché" à l'usager de l'objet. Autrement dit, la personne qui utilise une classe n'a pas à savoir tous les détails du code de cette classe: seules les méthodes et propriétés essentielles lui seront offertes.

Encapsulation
C'est le principe selon lequel les constituants du code décrivant un objet sont regroupés dans une classe, où les accès extérieurs et internes aux méthodes et propriétés sont contrôllés de façon à protéger l'intégrité de fonctionnement de l'objet. En gros, l'encapsulation consiste à se soucier de l'intégrité des objets.

Héritage
Construction d'une classe à partir d'une autre, en lui ajoutant quelque chose (en la spécialisant). L'héritage permet de structurer, organiser et hiérarchiser le code. Ce dernier devient modulaire et plus réutilisable, donc mieux adapté au développement de gros projets.

Polymorphisme
Le polymorphisme représente la capacité des objets d'être utilisés comme des objets issus d'autres classes dans des situations similaires.

On distingue 3 types de polymorphisme:

  1. Polymorphisme "ad hoc": Il permet d'avoir des méthodes ou propriétés de mêmes noms, avec des fonctionnalités similaires, dans des classes différentes. Exemple: Un tank, un bateau et un soldat peuvent tout les 3 posséder une méthodes Tirer() qui bien entendu produira des résultats différents, mais tout de même similaires. De même façon, un fourneau, une télé et une automobile possèdent des méthodes Demarrer() dont le sens est similaire pour le programmeur/utilisateur de l'objet.
  2. Polymorphisme paramétrique: Il permet de défnir des méthodes qui adaptent leur traitement selon la nature des données reçues. Par exemple, une méthode fusionner() pourrait pouvoir recevoir 2 tableaux et les souder avec concat(), ou 2 chaînes et les unir avec une opération +.
  3. Polymorphisme d'héritage: Il indique la possibilité de redéfinir une méthode dans une classe fille par rapport à sa classe mère. Cela permet d'utiliser les méthodes d'objets apparentés à une même classe sans se soucier des particularités des classes spécialisées. Par exemple, un rond de la classe Rond.as et un carré de la classe Carre.as peuvent présenter une méthode CalculerAire() qui serait définie par la classe mère Forme.as mais qui adapte sont résultat selon le type d'objet enfant. Ainsi, toutes les formes héritent de Forme.as une méthode CalculerAire() mais cette fonction est "spécialisée" par les classes filles Rond.as et Carre.as.

Pourquoi la POO

Réutilisation
La programmation orientée-objet permet d'écrire des séries d'instructions spécialisées (classes) permettant de définir des objets et de le réutiliser dans différentes situations. Le programmeur expérimenté peut se constituer s'il le désire des banques de classes facilement réutilisables dans divers projets.

Lisibilité
La POO minimise le nombre de scripts et de lignes de codes requis puisque les mêmes objets sont souvent réutilisés plutôt que réécrits. De plus, la POO est souvent réalisée en faisant usage de règles de rédaction de code qui favorisent le développement de code clair, concis et facilement éditable.

Organisation
Les objets sontissu de classes organisées de façon hiérarchique, ce qui en facilite l'agencement et rends les liens entre divers objets plus clairs, de la même façon que notre diagramme décrivant l'objet "Georges" (voir plus base) facilite la compréhension de cet objet. L'organisation hiérarchique des objets et des codes grâce aux classes rends toute la programmation plus efficace et cohérente.

Présentation conceptuelle de l'héritage

Imaginez que nous voulions décrire de façon hiérarchisée un individu nommé Georges. Le diagramme pourrait ressembler à ceci:

En effet, Georges fait parti de la superclasse des animaux; comme tous les animaux, il possède des fonctions de base pour respirer, voir, entendre etc. Avec tous les animaux de la classe des omnivores il partage la fonction de pouvoir s'alimenter de végétaux et de protéines animales. Mais il hérite en plus de son appartenance à la classe humain des fonctions reliées à cette classe; imaginer, réfléchir, marcher debout, parler etc.

  1. "Un objet est une entité, un membre d'une classe donnée". L'objet "Georges" est un membre de la classe "Humain". On dit qu'il en est une instance (un objet généré par cette classe). Nous pouvons également dire que la classe "Humain" hérite des fonctions (appelée méthodes en POO) de la classe "Omnivore" qui elle même hérite des méthodes de la superclasse "Animal".
  2. "Tous les objets isus de la classe partagent la même capacité à agir d'une manière donnée". L'objet "Georges" partage avec tous les autres objets de la classe "Humain" les mêmes méthodes.
  3. "…mais chacun possède des propriétés uniques pouvant lui faire produire un effet différent". Bien sur "Georges" est particulier; il possède les mêmes attributs que tous les membres de la classe "Humain", mais qui sont réglés à des valeurs qui lui sont propre; sa taille, son poids, son sexe, la couleur de ses cheveux et de ses yeux etc.

Voici un exemple d'objet et de ses propriétés et méthodes:

  Propriétés et méthodes Provient de...
Attributs
(propriétés)
  • age (réglée à 19 à la création de l'objet "Georges")
  • sexe (réglée à masculin à la création de l'objet "Georges")
  • poids (réglée à 170 à la création de l'objet "Georges")
  • taille (réglée à 1.8 à la création de l'objet "Georges")
  • anniversaire (réglée à "22 octobre" à la création de l'objet "Georges")
Héritage de la classe "Animal"
  • couleurYeux (réglée à brun à la création de l'objet "Georges")
  • couleurCheveux (réglée à noir à la création de l'objet "Georges")
  • nbBras (réglée à 2 à la création de l'objet "Georges")
  • nbJambes (réglée à 2 à la création de l'objet "Georges")
Dans la classe "Humain"
Méthodes
  • Respirer( )
  • Voir( )
  • Entendre( )
  • Dormir( )
Héritage de la superclasse "Animal"
  • DigererViande( )
  • DigererLegumes( )
Héritage de la classe "Omnivore"
  • Marcher( )
  • Reflechir( )
Dans la classe "Humain"
Héritage multiple (Attention: Interdit en C#)

Quand le langage de programmation utilisé le permet, on peut organiser différemment notre exemple.

Puisque après tout, être omnivore, c'est être à la fois carnivore et herbivore, on pourrait dire que la classe Omnivore hérite des méthodes des classes Carnivore et Herbivore.

En théorie, les classes peuvent donc hériter de méthodes venant de plusieurs classes apparentées à la même superclasse.

ATTENTION!

L'héritage multiple est interdit en C#: une classe fille ne peut hériter que d'une seule classe mère.


Mais bien entendu, cette classe mère pourrait elle aussi avoir une classe mère, qui aurait aussi une classe mère, etc...


Les langages C++ et Python, pour ne nommer que ceux-là, autorisent quand à eux l'héritage multiple.



Remarque: Le présent document a été élaboré d'après quelques articles sur la programmation orientée-objet du site www.commentcamarche.net. Malheureusement, ces articles ne semblent plus être disponibles.