Voila voila, on y est. La Programmation Oriénté Objet, la POO. Le meilleur outils de programmation qui puisse être actuellement.
Je préviens de suite, que le concept POO est loin d'être évident à saisir, cependant une fois que vous l'aurez compris, vous vous rendrez compte de son incroyable utilité. Je vous conseil donc de prendre du temps à bien relire chaque chose jusqu'à le comprendre. Et surtout à la moindre question n'hésitez pas à les poser.
On va donc commencer par la 'classe', qui est tou bêtement l'abstraction d'un objet. Oula, vous êtes déjà perdu!! vite un exemple simplifié.
Prenons ma voiture. C'est un objet concret qui a des propriétés qui la rendent unique (immatriculation, marque sur la carrosserie, etc..) et je peux interragir avec (ouvrir une porte, tourner le volant, demarrer, etc...). Cependant MA voiture, est avant tout UNE voiture. Attention, ce n'est pas du tout la même chose, MA voiture est un objet concret, UNE voiture est abstrait, c'est ce que l'on appelera une 'classe'.
Précisons la chose en prenant un constructeur automobile quelconque, Renaud par exemple. Prétez bien attention au terme 'constructeur', je n'ai pas choisis l'exemple de la voiture au hazard. Ce constructeur fabrique des nouvelles voitures, c'est à dire construire un objet concret à partir de plans définissant une voiture.
Essayons de définir quelles sont les propriétés d'une voiture, et ce que l'on peut faire avec :
- Code:
-
Voiture
____________________
Propriétés :
- Nombre de roues
- Couleur
- Poid
- Cylindré
- Vitesse Max
- Nombre de vitesse
- Longueur
- Largeur
- Hauteur
- Volume du réservoir
- Nombre de portes
- imatriculation
Fonctionnalités :
- Ouvrir une porte
- Démarrer
- Accelerer
- changer de vitesse
- Freiner
- Eteindre
- Remplir le réservoir
- Tourner le volant
Cela reste une vision rapide de ce que peut être UNE voiture, elle posséde des propriétés ou 'attributs', ainsi que des fonctionnalités ou 'méthodes' qui lui sont propre. Cependant tant qu'elle n'est pas construite, je ne peux pas intéragir avec.
Si je veux une nouvelle voiture, je vais donc donner des paramètres au constructeur pour qu'il me fournisse une voiture personnalisée, qui deviendra MA voiture : couleur = noir, nombre de portes = 5, le reste des paramètres sont définit par le constructeur par défaut selon le modèle que je choisi.
A la sortie de l'usine le constructeur aura créé MA voiture selon les plans qu'il posséde et les paramètres que je lui ais transmis. En langage objet, on appel cette action, une instanciation de classe. Une instance de classe est appelé un objet. Je rappel que les termes sont importants, prenez le temps de bien tout relire, pour bien comprendre les bases.
Donc dans une classe, les attributs seront des variables de classe qui ne seront accessible que dans l'objet de classe, elles sont donc privées par défaut. Et les méthodes seront des fonctions de classe qui seront appelable via l'objet de classe créé, elles sont donc publiques. Ca peut paraitre compliqué, mais avec quelques exemples, ça le sera un peu moins.
on va donc créer une classe rectangle :
- Code:
-
classe rectangle
____________________
Attributs :
- largeur
- longueur
Méthode :
- changer_largeur
- changer_longueur
- calculer_perimetre
- calculer_surface
Je pense que l'on a fait le tour de ce que peut faire d'un rectangle. Voila comment cette classe est déclaré en Ruby :
- Code:
-
class Rectangle
def initialize
@largeur = 0
@longueur = 0
end
def changer_largeur(param_largeur = 0)
@largeur = param_largeur
end
def changer_longueur(param_longueur = 0)
@longueur = param_longueur
end
def calculer_perimetre
return ( @largeur * 2 ) + ( @longueur * 2 )
end
def calculer_surface
return @largeur * @longueur
end
end
Récapitulons les instructions importantes :
class : permet de déclarer une nouvelle classe
def : permet de déclarer des fonctions ou procédures de classe, donc des méthodes
Attention, une variable de classe doit avoir comme préfixe le caractère '@' pour qu'elle puisse être accessible dans l'intégralité de la classe.
Attention, la méthode initialize est le constructeur. Cette méthode est appelé automatiquement lors de la crèation d'un objet de classe.
Pour plus de clarté, voici un exemple d'utilisation de cette classe :
- Code:
-
un_rectangle = Rectangle.new
un_rectangle.changer_largeur(6)
un_rectangle.changer_longueur(9)
print un_rectangle.calculer_perimetre
print un_rectangle.calculer_surface
La syntaxe pour créer un objet de classe :
[nom de l'objet] = [nom de la classe].new
L'on peut très bien passer des paramètre au constructeur, en les définissant à la méthode initialize, et en les passant via l'opérateur 'new'
La syntaxe d'appel de méthode :
[nom de l'objet].[nom de la méthode]
Je vous conseille d'essayer de faire de nouvelles classes dans un projet vierges (script aussi), pour vous habituer à la mécanique.
Je posterai à la suite un petit rajout concernant la modification d'accés aux attributs.