Avec le C++ la possibilité d'utiliser des objets est apparue.
La programmation objet facilite grandement le codage de certaines choses car elle les rend plus faciles et moins complexes.
Tout d'abord une petite introduction au lexique de la programmation objet :
Les classes
Elles représentent des objets et donc des entités, par exemple : Un vecteur, un bouton, une voiture, un rectangle.
Les instances
Ce sont les objets créés à partir d'une classe en le déclarant, par exemple : Rectangle monPetitRectangle; monPetitRectangle sera une instance de la classe Rectangle.
Les méthodes
Les méthodes sont des fonctions propres à une classe. Une fonction est un bloc de code auquel on peut envoyer et recevoir des informations. Par exemple on pourrait imaginer une méthode "Afficher()" à une classe CompteEnBanque qui afficherait les données du compte.
Les attributs
Ce sont les variables propres à la classe. Par exemple une classe Rectangle aurait comme propriétés une longueur et une largeur.
Les propriétés
Ce sont les méthodes utilisées pour lire/écrire les attributs de la classe. Celles-ci sont donc publiques (accessibles depuis une autre classe).
Un objet en programmation est une entité propre, prenons l'exemple d'une voiture :
Une voiture à un moteur, une couleur, un nombre de sièges.
Ces variables sont appelées attributs en programmation objet. Les attributs sont privés et propres aux objets.
Une voiture peut aussi avancer.
Cette "fonction" de la voiture est appelée méthode.
Pour interagir avec les attributs on fait appel à des propriétés. Dans certains langages comme en C++ il n'y a pas de type propriété comme en C# par exemple. Donc nous ferons appel à des méthodes.
Pour créer des objets et les initialiser nous faisons appel à des constructeurs. les constructeurs sont appelés par le mot clé new suivi d'un espace et du nom de la classe avec les paramètres entre parenthèses.
Après la théorie, la pratique! Prenons l'exemple de notre voiture :
Voici donc ce qui "déclare" notre classe au compilateur.
class Voiture{
/*On utilise "private:" pour indiquer au compilateur que les variables qui seront précédemment créées devront être privées. C'est à dire qu'elles pourront être lues et modifiées que par la classe elle-même et pas par un autre objet. Si notre classe est appellée à être héritée par une autre, il faudra mettre ces attributs en "protected" pour que la classe qui héritera de ces attributs puissent les modifier.*/
private:
Couleur *_couleur;
Moteur *_moteur;
int _positionX, _positionY;
int _nombrePlaces;
/*On utilise "public:" pour indiquer au compilateur que les attributs/méthodes suivantes sont publiques, c'est à dire qu'elles peuvent être appelées depuis un autre objet.*/
public:
/*Constructeurs*/
/*Le premier constructeur est un constructeur vide, on l'utilisera pour créer une voiture en plaçant des paramètres par défaut. Un constructeur porte le même nom que la classe qui le contient.*/
Voiture();
/*Le deuxième constructeur prend en compte des arguments, comme cela, on pourra directement "paramétrer" notre voiture avec ce constructeur. Notez qu'une classe peut utiliser une autre classe, on utilisera donc une instance d'une classe nommée "Couleur" et une autre de "Moteur"*/
Voiture(Couleur couleur, int nombrePlaces, Moteur moteur);
/*Propriétés*/
void setCouleur(Couleur couleur);
void setMoteur(Moteur moteur);
void setNombrePlaces(int nombrePlaces);
void setPosition(int positionX,int positionY);
Couleur getCouleur();
Moteur getMoteur();
int getNombrePlaces();
int getPositionX();
int getPositionY();
/*Méthodes*/
void avancer(int x,int y);
};
Ensuite il faut décrire les méthodes dans un fichier normalement nommé "Voiture.cpp". Pour indiquer au programme que nous décrivons la méthode/propriété de la classe "Voiture" il faut placer "Voiture::" devant le nom des méthodes/propriétés :
#include "Voiture.h"
Voiture::Voiture(){
_couleur = new Couleur();
_moteur = new Moteur();
_positionX=0;
_positionY=0;
_nombrePlaces=0;
}
Voiture::Voiture(Couleur couleur, int nombrePlaces, Moteur moteur){
_couleur=couleur;
_nombrePlaces=nombrePlaces;
_moteur=moteur;
}
void Voiture::setCouleur(Couleur couleur){
_couleur=couleur;
}
void Voiture::setMoteur(Moteur moteur){
_moteur=moteur;
}
void Voiture::setNombrePlaces(int nombrePlaces){
_nombrePlaces=nombrePlaces;
}
void Voiture::setPosition(int positionX,int positionY){
_positionX=positionX;
_positionY=positionY;
}
Couleur Voiture::getCouleur(){
return _couleur;
}
Moteur Voiture::getMoteur(){
return _moteur;
}
int Voiture::getNombrePlaces(){
return _nombrePlaces;
}
int Voiture::getPositionX(){
return _positionX;
}
int Voiture::getPositionY(){
return _positionY;
}
void Voiture::avancer(int x,int y){
_positionX+=x;
_positionY+=y;
}
Maintenant voici comment notre objet peut s'utiliser :
#include "Voiture.h"
int main(void){
//On déclare une instance de Voiture nommée maVoiture
Voiture *maVoiture;
//On initialise l'instance de la classe Voiture avec le constructeur par défaut
maVoiture= new Voiture();
//On appelle la méthode avancer de maVoiture pour la faire avancer jusqu'à la position (1;1)
maVoiture->avancer(1,1);
//On quitte le programme
return 0;
}