Une approche de l'objet
Principe de l’objet, une notion évidente
1. Avant de continuer
Vous voici dans l’avant-dernier chapitre de ce livre. Si votre objectif était d’apprendre à programmer dans des langages procéduraux ou fonctionnels, c’est-à-dire basés sur l’utilisation de sous-programmes tels que présentés ici, vous pourriez vous arrêter là. En effet, dès à présent vous disposez de tous les éléments indispensables pour programmer en langage C ou en Pascal.
Cependant, il serait dommage de ne pas continuer, ceci même si vous n’aurez pas tout de suite à programmer en objet. La programmation objet est depuis le début des années 1990 non seulement un classique, mais fait partie de la culture informatique. Un langage comme le C++, évolution du langage C et même d’autres comme Delphi dérivé du Pascal, Visual Basic dérivé du Basic, ainsi que la plupart des langages de macros sous MS Office ou OpenOffice.org, ou encore les langages de certains gestionnaires de bases de données, sont des langages objet.
Ne pas comprendre l’objet, c’est risquer de se couper de beaucoup de produits, beaucoup de fonctionnalités et parfois aussi d’une plus grande simplicité dans certains traitements.
2. Rappels sur la programmation procédurale
Les procédures ou fonctions reçoivent des données en arguments (paramètres). Elles retournent des valeurs soit par le même chemin (pointeurs ou références), soit en renvoyant directement une donnée comme résultat de la fonction.
Dans un langage procédural (ou fonctionnel) les données sont séparées des programmes qui les utilisent.
a. Les données
Chaque variable dispose d’un type qui indique quelle sorte de valeur elle peut contenir. Ces types sont dits primitifs quand ils sont directement proposés par le langage lui-même. Ils peuvent différer selon les langages mais le C propose une série d’entiers, de réels et de caractères. D’autres incluent les chaînes de caractères.
Le type de la variable peut aussi être défini par le programmeur. Ce sont les types structurés que vous décrivez vous-même.
Les tableaux...
Manipuler les objets
1. Les constructeurs
a. Déclaration
Quand vous instanciez une classe, c’est-à-dire quand vous créez un objet du type de classe donné, il vous faut bien souvent appeler diverses méthodes pour remplir ses attributs avec les bonnes valeurs. Pour reprendre l’exemple de la classe Ecran, nul doute qu’en créant un objet de ce type vous voudrez positionner les attributs type, marque, modèle, etc., aux bonnes valeurs. La solution actuelle consiste à appeler explicitement les méthodes prévues à cet effet : modif_type(), modif_ marque(), modif_modèle() et ainsi de suite.
Il existe un moyen plus efficace et implicite de positionner les bonnes valeurs des attributs (et d’effectuer toute autre opération nécessaire) dès l’instanciation. Ce moyen, c’est le constructeur.
Le constructeur est une méthode particulière qui est appelée automatiquement dès que vous créez un objet sans que vous ayez à le préciser, que ce soit par déclaration ou allocation dynamique (via un pointeur). Dans cette méthode, libre à vous de faire ce que vous voulez, mais dans 90 % des cas son rôle sera de donner aux attributs leurs bonnes valeurs initiales, ou des valeurs par défaut.
Un constructeur doit respecter les deux propriétés suivantes :
-
Il porte le même nom que la classe.
-
Il ne retourne pas de valeur.
Via le polymorphisme paramétrique (qu’on appelle aussi la surcharge des méthodes) vous pouvez créer autant de constructeurs que vous le souhaitez, un par cas selon les paramètres passés. En algorithmique vous ajouterez le mot-clé Constructeur devant le nom de la méthode en remplacement de Procédure ou Fonction. Ce n’est pas forcément obligatoire car aucune autre méthode ne doit avoir le même nom que la classe.
b. Appel implicite
La classe Ecran se voit complétée de deux constructeurs : le premier ne reçoit aucun paramètre et sera utilisé lorsque l’objet ne reçoit aucune valeur lors de sa création. Le second prend trois paramètres (type, marque, modèle) pour les initialiser à la création de l’objet.
Un constructeur qui ne reçoit...
L’objet en PHP
1. Les langages objet
Les deux parties précédentes de ce chapitre vous ont présenté ce qu’est la programmation objet. Il existe plusieurs langages orientés objet. On parle de programmation orientée objet (POO). Les prémices de la programmation objet sont anciennes (pour de l’informatique) : 1967 avec le langage Simula, puis Smalltalk. L’âge d’or débute au début des années 1980, avec tout d’abord l’Objective C (encore très utilisé notamment dans le développement de Mac OS et de ses outils), puis le "C with Classes" en 1983, qui deviendra le C++, puis Eiffel, puis le Lisp Objet et ainsi de suite.
Les années 1990 ont vu l’explosion de l’objet à toutes les sauces pour le meilleur et pour le pire et pas uniquement dans les langages. Ainsi des bases de données objet sont apparues. D’anciens langages comme le Pascal, le Basic ou même le COBOL ont évolué vers l’objet : Delphi, Visual Basic, Cobol Objet, etc. Même les langages macros propres à des suites bureautiques (MS Office, OpenOffice.org) ou de base de données (Access, Paradox) se targuent d’être des langages objet. Si la définition de l’objet correspond à peu près à ce qui vous a été présenté depuis le début de ce chapitre, les puristes doivent dans certains cas bien rire.
L’arrivée de Java comme vrai langage objet de haut niveau a changé beaucoup de choses : reprenant les bonnes idées du C++, il l’adapte en un tout plus simple et plus pratique, adapté aux besoins modernes des développeurs et surtout des applications.
La force de SUN a été de proposer un langage adapté à une large gamme de besoins : des applets Java, l’apprentissage de l’objet, les applications déportées, les serveurs d’applications, etc.
Un gros concurrent de la plate-forme Java (Java, ses outils, ses API, etc.) se nomme .NET avec le langage C# (prononcez C sharp) et est évidemment objet. Les exemples de ce livre auraient parfaitement pu être développés en C#, sachant que le langage est maintenant disponible ailleurs que sous Windows. ...
Exercices
Exercice 1
Créer les cinq classes du schéma suivant en tenant compte de leur héritage. Toutes les méthodes sont publiques et les attributs sont privés.
Exercice 2 (suite du 1)
Créer les accesseurs de tous les attributs. Créer un constructeur dans la classe Vehicule prenant en paramètres la couleur et le poids. Modifier la méthode rouler() pour qu’elle affiche "Le véhicule roule". Modifier la méthode ajouter_personne(poids_personne) pour qu’elle change le poids du véhicule en fonction du poids de la personne passé en paramètre.
Créer une page affichage.php créant un véhicule noir de 1500 kg. Le faire rouler.
Ajouter une personne de 70 kg et afficher le nouveau poids du véhicule.
Exercice 3 (suite du 2)
Implémenter la méthode repeindre(couleur) pour changer la couleur définie dans la classe Vehicule. Implémenter la méthode mettre_essence(nombre_litre) pour changer le poids défini dans la classe Vehicule. Pour cet exercice, un litre correspond à un kilogramme.
Implémenter les méthodes ajouter_pneu_neige(nombre) et enlever_pneu_ neige(nombre) modifiant l’attribut nombre_pneu_neige.
Implémenter la méthode ajouter_remorque(longueur_remorque) modifiant l’attribut longueur.
Dans la page affichage.php, créer une voiture verte...