La programmation orientée objet
Cours · NSI (terminale), chapitre 9 · terminale, spécialité numérique et sciences informatiques · le début du chapitre, la suite sur Adloun
La programmation orientée objet (POO) est un paradigme de programmation, c'est-à-dire une manière de concevoir et d'organiser un programme. Plutôt que de séparer d'un côté les données et de l'autre les fonctions qui les manipulent, la POO regroupe ces deux aspects au sein d'entités cohérentes appelées objets. Chaque objet possède des caractéristiques (les attributs) et des comportements (les méthodes).
Ce paradigme, omniprésent dans le développement logiciel moderne (Python, Java, C++, etc.), facilite la modélisation de problèmes complexes, favorise la réutilisation du code et améliore sa maintenabilité. Dans ce chapitre, nous étudierons les notions fondamentales de classes et d'objets, le mécanisme du constructeur, la référence self, le principe d'encapsulation, les méthodes spéciales, ainsi qu'une introduction à l'héritage. Nous mettrons enfin ces concepts en pratique en réimplémentant les structures de données du programme (pile, file, arbre binaire de recherche) selon une approche objet.
9.1 Classes et objets
9.1.1 Notion de classe
Une classe peut être vue comme un plan de construction ou un moule : elle décrit la structure et le comportement communs à tout un ensemble d'objets, sans être elle-même un objet concret.
Une classe est un modèle (ou type) définissant un ensemble d'attributs (les données caractérisant les objets) et de méthodes (les fonctions agissant sur ces objets). Elle sert de patron à partir duquel on peut créer des objets.
Un objet est une réalisation concrète d'une classe, dotée de ses propres valeurs d'attributs. On dit aussi que l'objet est une instance de la classe. Créer un objet à partir d'une classe s'appelle l'instanciation.
En Python, une classe se définit avec le mot-clé class. Par convention, le nom d'une classe commence par une majuscule (notation CamelCase).
class Point:
"""Un point du plan repere par ses coordonnees."""
pass
# Instanciation : creation de deux objets de la classe Point
a = Point()
b = Point()
print(type(a)) # <class '__main__.Point'>
print(a is b) # False : ce sont deux objets distincts
9.1.2 Attributs et méthodes
Un attribut est une variable associée à un objet (attribut d'instance) ou à une classe (attribut de classe). Il représente une donnée caractérisant l'objet, par exemple l'abscisse d'un point.
Une méthode est une fonction définie à l'intérieur d'une classe. Elle décrit un comportement de l'objet et peut accéder à ses attributs. Son premier paramètre est toujours self, qui désigne l'objet sur lequel la méthode est appelée.
9.2 Le constructeur et la référence self
9.2.1 La méthode __init__
Méthode : Le constructeur __init__
La méthode __init__ est le constructeur de la classe. Elle est appelée automatiquement lors de l'instanciation et sert à initialiser les attributs du nouvel objet. Sa signature est typiquement :
def __init__(self, parametre1, parametre2, ...):
self.attribut1 = parametre1
self.attribut2 = parametre2
Méthode : La référence self
self est le premier paramètre de toute méthode d'instance. Il désigne l'objet courant, celui sur lequel la méthode est appelée. Il permet d'accéder à ses attributs (self.x) et à ses autres méthodes. Python le passe automatiquement : lors de l'appel p.deplacer(1, 2), l'objet p est transmis comme self.
Point complète
class Point:
def __init__(self, x, y):
self.x = x # attribut d'instance abscisse
self.y = y # attribut d'instance ordonnee
def deplacer(self, dx, dy):
"""Translate le point du vecteur (dx, dy)."""
self.x += dx
self.y += dy
def distance_origine(self):
"""Renvoie la distance du point a l'origine."""
return (self.x ** 2 + self.y ** 2) ** 0.5
p = Point(3, 4)
print(p.x, p.y) # 3 4
print(p.distance_origine()) # 5.0
p.deplacer(1, -1)
print(p.x, p.y) # 4 3
La distance à l'origine d'un point vaut .
Exercices du chapitre
- Encapsulation d'une température corrigé
- Surcharge de l'opérateur
+corrigé - Hauteur d'un ABR corrigé
- Problème — Dictionnaire ordonné par ABR corrigé
- Classe
Rectanglecorrigé - Vider une pile et vérifier l'ordre LIFO corrigé