Programmation objet
Objectif
Se familiariser avec la programmation objet.
Mise en situation
Il est parfois plus intéressant, ou plus efficace et intuitif, de représenter des concepts, idées ou objets du monde physique dans un programme.
La programmation orientée objet
La programmation impérative sépare le comportement d'un programme de son état, et la programmation déclarative ne présente pas d'état.
Cependant, nous disposons d'un troisième paradigme de programmation qui nous permet de mélanger le comportement d'un programme avec son/ses état(s).
En d'autres termes, il est possible de créer des briques qui représentent une entité bien précise, et qui encapsulent son état et son comportement propres.
Exemple : Voiture
Un exemple typique est la voiture.
Un développeur a besoin d'intégrer l'idée de voiture dans son programme, cela peut être pour un jeu vidéo de course, une simulation du trafic routier ou tout autre programme ayant besoin du concept de voiture.
Il va utiliser un langage orienté objet pour créer une classe « Voiture » ; cette classe va permettre de stocker deux choses :
L'état d'une voiture : le développeur stocke dans l'état des informations sur une voiture, comme sa couleur, sa marque ou son nombre de chevaux. L'état d'un objet est donc composé de variables et peut être amené à évoluer. Ces variables sont appelées des attributs. Un objet peut aussi contenir d'autres objets. Dans le cas présent il pourrait y avoir un tableau de quatre variables contenant des objets « Roue ».
Le comportement : c'est un ensemble de fonctions (appelées méthodes) propres à toutes les voitures et qui permettent de savoir ce qu'un objet peut faire. Dans le cas de la classe « Voiture », il pourrait y avoir une méthode démarrer, accélérer ou arrêter.
Les méthodes ont accès à l'état de l'objet et peuvent donc interagir avec.
Remarque : Classe et objet
En programmation orientée objet, une classe représente la structure d'un objet. On y indique à quoi devrait ressembler l'état et on y implémente les méthodes propres à l'objet. Un objet représente une instance de la classe, un élément particulier.
Par exemple, la classe « Voiture » nous dit qu'une voiture a une couleur, une marque, un nombre de chevaux et nous indique le comportement d'une voiture via ses méthodes. Un objet « Voiture » pourrait être une voiture rouge de la marque Renault avec une puissance de 5 chevaux. Lorsque la méthode « accélérer » de cet objet en particulier est appelée, elle aura accès à l'état de l'objet et pourra ainsi modifier une variable accélération.
Exemple : Java
public class Car {
public String color;
public String brand;
private int horsepower;
public int acceleration;
public bool started;
public Voiture(String color, String brand, int horsepower) {
this.color = color;
this.brand = brand;
this.horsepower = horsepower;
this.started = false;
this.acceleration = 0;
}
public getHorsepower() {
return this.horsepower;
}
public start() {
this.started = true;
}
public accelerate() {
this.acceleration = this.acceleration + 10;
}
public stop() {
this.acceleration = 0;
this.started = false;
}
}
La première méthode « public Voiture » correspond au constructeur de la classe, c'est la méthode qui est appelée lorsqu'un objet est instancié.
public static void main(String[] args) {
Car myCar = new Car("red", "Renault", 5);
System.out.println("La marque de ma voiture est" + myCar.brand);
System.our.println("Elle a" + myCar.getHorsepower() + "chevaux");
}
Encapsulation
On remarque dans l'exemple précédent que les attributs ont pu être marqué publics ou privés. C'est une possibilité de Java qui permet d'intégrer une idée propre à la programmation objet : l'encapsulation.
C'est l'idée que certains éléments d'un objet ne peuvent être accessibles que par l'objet lui-même.
Dans l'exemple ci-dessus, l'attribut chevaux
est à private
et donc depuis l'extérieur de l'objet aucun élément n'y a accès. C'est pourquoi il y a aussi une méthode getChevaux
(qui elle est à public
) qui renvoie la variable chevaux
.
Exemple : TypeScript
class Car {
public color: string;
public brand: string;
private horsepower: number;
public acceleration: number;
public started: boolean;
public constructor(color: string, brand: string, horsepower: number) {
this.color = color;
this.brand = brand;
this.horsepower = horsepower;
this.acceleration = 0;
this.started = false;
}
public getHorsepower() {
return this.horsepower;
}
public start() {
this.started = true;
}
public accelerate() {
this.acceleration += 10;
}
public stop() {
this.acceleration = 0;
this.started = false;
}
}
let myCar = new Car("red", "Renault", 5);
console.log(`La marque de ma voiture est ${myCar.brand}`);
console.log(`Elle a ${myCar.getHorsepower()} chevaux`);
À retenir
La programmation orientée objet permet de mélanger état et comportement d'un objet.
Un objet représente un concept, une idée ou un élément du monde physique.
La classe correspond à la structure générale de l'objet et la définition de ses méthodes, l'objet correspond à une instance de la classe.