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.

ExempleVoiture

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.

RemarqueClasse 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.

ExempleJava

1
public class Car {
2
    public String color;
3
    public String brand;
4
    private int horsepower;
5
    public int acceleration;
6
    public bool started;
7
8
    public Voiture(String color, String brand, int horsepower) {
9
        this.color = color;
10
        this.brand = brand;
11
        this.horsepower = horsepower;
12
        this.started = false;
13
        this.acceleration = 0;
14
    }
15
16
    public getHorsepower() {
17
        return this.horsepower;
18
    }
19
20
    public start() {
21
        this.started = true;
22
    }
23
24
    public accelerate() {
25
        this.acceleration = this.acceleration + 10;
26
    }
27
28
    public stop() {
29
        this.acceleration = 0;
30
        this.started = false;
31
    }
32
33
}

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é.

1
public static void main(String[] args) {
2
    Car myCar = new Car("red", "Renault", 5);
3
    System.out.println("La marque de ma voiture est" + myCar.brand);
4
    System.our.println("Elle a" + myCar.getHorsepower() + "chevaux");
5
}

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.

ExempleTypeScript

1
class Car {
2
  public color: string;
3
  public brand: string;
4
  private horsepower: number;
5
  public acceleration: number;
6
  public started: boolean;
7
8
  public constructor(color: string, brand: string, horsepower: number) {
9
    this.color = color;
10
    this.brand = brand;
11
    this.horsepower = horsepower;
12
    this.acceleration = 0;
13
    this.started = false;
14
  }
15
16
  public getHorsepower() {
17
    return this.horsepower;
18
  }
19
20
  public start() {
21
    this.started = true;
22
  }
23
24
25
  public accelerate() {
26
    this.acceleration += 10;
27
  }
28
29
30
  public stop() {
31
    this.acceleration = 0;
32
    this.started = false;
33
  }
34
}
1
let myCar = new Car("red", "Renault", 5);
2
console.log(`La marque de ma voiture est ${myCar.brand}`);
3
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.