Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Les bases de la programmation orienté objet

APERTO-NOTA

Les apports de l’objet

Objets et classes

Exercice : Gestion des utilisateurs

Solution to Exercise 1 #
class Utilisateur:
    nom_utilisateur = None
    mot_de_passe = None

    def __init__(self, nom_utilisateur, mot_de_passe):
        self.nom_utilisateur = nom_utilisateur
        self.mot_de_passe = mot_de_passe

    def afficher_infos(self):
        print(f"Nom d'utilisateur : {self.nom_utilisateur}, mot de passe : {self.mot_de_passe}")

# Création des objets
utilisateur1 = Utilisateur("alice", "azerty123")
utilisateur2 = Utilisateur("bob", "motdepasse")
utilisateur3 = Utilisateur("charlie", "123456")

# Appel de la méthode afficher_infos()
utilisateur1.afficher_infos()
utilisateur2.afficher_infos()
utilisateur3.afficher_infos()

Sortie attendue :

Nom d'utilisateur : alice, mot de passe : azerty123
Nom d'utilisateur : bob, mot de passe : motdepasse
Nom d'utilisateur : charlie, mot de passe : 123456

Définition de la classe Utilisateur :

Cette classe représente un modèle d’utilisateur. Elle contient deux attributs :

  • nom_utilisateur : le nom ou identifiant de l’utilisateur.

  • mot_de_passe : le mot de passe associé à cet utilisateur.

Méthode spéciale **__init__** :

C’est le constructeur de la classe. Il est automatiquement appelé lors de la création d’un objet. Il initialise les attributs avec les valeurs fournies.

Instanciation, destruction, encapsulation, agrégation

Exercice : Gestion d’un Utilisateur et de ses Sessions

Solution to Exercise 2 #
class Session:
    def __init__(self, id_session):
        self.id_session = id_session

    def afficher(self):
        print(f"Session active : {self.id_session}")

    def __del__(self):
        print(f"Destruction de la session : {self.id_session}")


class Utilisateur:
    def __init__(self, nom_utilisateur, mot_de_passe):
        self.nom_utilisateur = nom_utilisateur
        self._mot_de_passe = mot_de_passe  # Encapsulation
        self.sessions = []  # Agrégation

    def ajouter_session(self, session):
        self.sessions.append(session)
        print(f"Session {session.id_session} ajoutée.")

    def afficher_sessions(self):
        print(f"Sessions actives pour {self.nom_utilisateur} :")
        for session in self.sessions:
            print(f"- {session.id_session}")

    def changer_mot_de_passe(self, nouveau_mdp):
        self._mot_de_passe = nouveau_mdp
        print("Mot de passe modifié avec succès.")


# Instanciation
utilisateur = Utilisateur("alice", "azerty123")

session1 = Session("abc123")
session2 = Session("xyz789")

# Agrégation
utilisateur.ajouter_session(session1)
utilisateur.ajouter_session(session2)

# Affichage
utilisateur.afficher_sessions()

# Encapsulation
utilisateur.changer_mot_de_passe("nouveauMdp456")

# Destruction
del session2  # Déclenche __del__ pour cette session

Sortie attendue :

Session abc123 ajoutée.
Session xyz789 ajoutée.
Sessions actives pour alice :
- abc123
- xyz789
Mot de passe modifié avec succès.
Destruction de la session : xyz789

Polymorphisme et introspection

Exercice : Système d’authentification multi-rôle

Solution to Exercise 3 #
# Classe de base
class Utilisateur:
    def __init__(self, nom_utilisateur):
        self.nom_utilisateur = nom_utilisateur

    def authentifier(self):
        print(f"Authentification générique pour {self.nom_utilisateur}")

# Classes dérivées
class UtilisateurStandard(Utilisateur):
    def authentifier(self):
        print(f"Authentification standard pour {self.nom_utilisateur}")

class Administrateur(Utilisateur):
    def authentifier(self):
        print(f"Authentification sécurisée pour l’administrateur {self.nom_utilisateur}")

class Invite(Utilisateur):
    def authentifier(self):
        print(f"Accès limité pour l’invité {self.nom_utilisateur}")

# Fonction polymorphe
def authentifier_utilisateur(utilisateur):
    utilisateur.authentifier()

# Instanciation
alice = UtilisateurStandard("alice")
bob = Administrateur("bob")
charlie = Invite("charlie")

# Polymorphisme
authentifier_utilisateur(alice)
authentifier_utilisateur(bob)
authentifier_utilisateur(charlie)

# Introspection
for utilisateur in [alice, bob, charlie]:
    print(f"{utilisateur.nom_utilisateur} est une instance de : {type(utilisateur).__name__}")
    print(f"{utilisateur.nom_utilisateur} hérite de Utilisateur : {isinstance(utilisateur, Utilisateur)}")

Sortie attendue :

Authentification standard pour alice
Authentification sécurisée pour l’administrateur bob
Accès limité pour l’invité charlie
alice est une instance de : UtilisateurStandard
alice hérite de Utilisateur : True
bob est une instance de : Administrateur
bob hérite de Utilisateur : True
charlie est une instance de : Invite
charlie hérite de Utilisateur : True