1.1. Les objets

Les valeurs que nous manipulons en programmation peuvent être considérées comme les éléments de modélisation d’un problème ou d’une situation. Il en existe plusieurs sortes permettant de représenter les différents objets de nos programmes : des nombres entiers, des nombres décimaux, du texte ou des booléens. Cependant, ces types de données restent très simples et ne sont pas adaptés pour représenter des objets plus complexes.

Essayons par exemple de modéliser une université dans notre programme. Puisqu’il s’agit d’un objet complexe, nous représentons ses principaux attributs à l’aide de types de base et de collections.

  • Le nom (chaîne de caractères)

  • Le nombre d’étudiants (nombre entier)

  • Le nombre de professeurs (nombre entier)

  • Le nom des différentes facultés (liste)

Et la liste pourrait s’allonger, mais commençons simplement. Nous écrivons aussi une fonction servant à présenter cette université.

name = "Micropolis"
nb_students = 4000
nb_professors = 150
faculties = ["Droit", "Économie", "Lettres", "Sciences"]


def present_univ():
    print(f"L'université de {name} compte {nb_students} étudiants "
          f"et {nb_professors} professeurs dans {len(faculties)} facultés :")
    for fac in faculties:
        print(f"- {fac}")


present_univ()
L'université de Micropolis compte 4000 étudiants et 150 professeurs dans 4 facultés :
- Droit
- Économie
- Lettres
- Sciences

Ce programme remplit sa mission correctement. Cependant, comment ferions nous s’il fallait modéliser de nombreuses universités ? Nous pourrions utiliser des listes pour chacun des quatre attributs, de la manière suivante.

names = ["Micropolis", "Megapolis", "Monopolis"]
nb_students = [4000, 15000, 10000]
nb_professors = [150, 500, 450]
faculties = [["Droit", "Économie", "Lettres", "Sciences"],
             ["Administration", "Droit", "Géosciences", "HEC", "Lettres",
              "Médecine", "Politique", "Théologie"],
             ["Droit", "Économie", "Lettres", "Sciences", "Théologie"]]


def present_uni(idx):
    print(
        f"L'université de {names[idx]} compte {nb_students[idx]} étudiants "
        f"et {nb_professors[idx]} professeurs dans {len(faculties[idx])} facultés :")
    for fac in faculties[idx]:
        print(f"- {fac}")


present_uni(0)
present_uni(1)
present_uni(2)
L'université de Micropolis compte 4000 étudiants et 150 professeurs dans 4 facultés :
- Droit
- Économie
- Lettres
- Sciences
L'université de Megapolis compte 15000 étudiants et 500 professeurs dans 8 facultés :
- Administration
- Droit
- Géosciences
- HEC
- Lettres
- Médecine
- Politique
- Théologie
L'université de Monopolis compte 10000 étudiants et 450 professeurs dans 5 facultés :
- Droit
- Économie
- Lettres
- Sciences
- Théologie

Une fois encore, le programme remplit sa tâche, mais il commence à devenir sérieusement illisible. Il serait possible d’améliorer un peu le code à l’aide des dictionnaires, cependant il resterait pénible à maintenir et à étendre. Sans compter que nous ne modélisons ici que 3 universités…

Et si à la place de longues listes inefficaces nous pouvions simplement créer des variables de type université, comme on le ferait avec des entiers ou des chaînes de caractères ? C’est au moyen des classes que nous pourrons définir de nouveaux types et créer nos propres objets. On entre ainsi dans le domaine de la programmation orientée objet (POO).

Note

En programmation, le terme « objet » désigne un ensemble de données décrivant et modélisant une entité quelconque, abstraite ou concrète, comme par exemple un nombre entier, un véhicule ou une planète.