0% ont trouvé ce document utile (0 vote)
5 vues8 pages

POO Python : Classes et Méthodes Essentielles

Le document présente une formation sur la programmation orientée objet (POO) avec Python, comprenant plusieurs exercices. Les exercices incluent la création de classes pour représenter des points, des personnes, des adresses, des messages codés, et des structures de données comme une pile bornée et une file d'attente. Chaque exercice détaille les attributs et méthodes à implémenter, ainsi que des instructions spécifiques pour tester les fonctionnalités développées.

Transféré par

hamdimoez987
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues8 pages

POO Python : Classes et Méthodes Essentielles

Le document présente une formation sur la programmation orientée objet (POO) avec Python, comprenant plusieurs exercices. Les exercices incluent la création de classes pour représenter des points, des personnes, des adresses, des messages codés, et des structures de données comme une pile bornée et une file d'attente. Chaque exercice détaille les attributs et méthodes à implémenter, ainsi que des instructions spécifiques pour tester les fonctionnalités développées.

Transféré par

hamdimoez987
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

DM : POO avec Python

Formation 2025

Exercice 1 :
Considérons une classe appelée Point ayant les attributs suivants :
— abs : un attribut de type float
— ord : un attribut de type float
1. Définissez la classe Point et un constructeur à deux paramètres
2. Définissez la méthode __str__() qui retourne la représentation mathématique d’un point :
(abs,ord).
3. Écrivez la méthode calculer_distance(self, p: ’Point’) -> float: qui permet de
calculer la distance entre le point de l’objet courant (self) et l’objet p passé en paramètre.
Nous rappelonsp que la distance entre deux points A(x1 , y1 ) et B(x2 , y2 ), en mathématiques,
est égale à : (x1 − x2 )2 + (y1 − y2 )2
4. Écrivez la calculer_milieu(self, p: ’Point’) -> ’Point’: qui permet de calculer et
de retourner un objet correspondant au milieu du segment défini par le point de l’objet
courant (self) et l’objet Point p passé en paramètre. Nous rappelons que les coordonnées
d’un point M (xM , yM ) milieu de A(x1 , y1 ) et B(x2 , y2 ), en mathématiques, sont :
x2 + x1
xM = (1)
2
y2 + y1
yM = (2)
2
La méthode doit retourner un objet Point et pas les coordonnées.
Considérons maintenant une deuxième classe appelée TroisPoints ayant les attributs suivants :
— premier : un attribut de type Point
— deuxième : un attribut de type Point
— troisième : un attribut de type Point
5. Écrivez une méthode sont_alignes(self) -> bool: qui retourne True si les trois points
premier, deuxième et troisième sont alignés, False sinon. Nous rappelons que trois points A,
B et C sont alignés si AB = AC + BC, AC = AB + BC ou BC = AC + AB (AB désigne
la distance séparant le point A du point B, pareillement pour AC et BC).
6. Écrivez une méthode est_isocele(self) -> bool: qui retourne True si les trois points
premier, deuxième et troisième forment un triangle isocèle, False sinon. Nous rappelons
qu’un triangle ABC est isocele si AB = AC ou AB = BC ou BC = AC.

1
DM : POO avec Python Formation 2025

Exercice 2
Considérons les deux classes Personne et Adresse. Les attributs de la classe Adresse sont :
— rue : un attribut de type chaîne de caractères.
— ville : un attribut de type chaine de caractères.
— code postal : un attribut de type chaîne de caractères.
Les attributs de la classe Personne sont :
— nom : un attribut de type chaîne de caractères.
— sexe : un attribut de type chaîne de caractères (cet attribut aura comme valeur soit ’M’
soit ’F’).
— adresses : un attribut de type tableau d’objet de la classe Adresse.
1. Créez les deux classes Adresse et Personne dans deux fichiers différents
2. Créez une troisième classe ListePersonnes ayant un seul attribut personnes : un tableau
d’objets Personne. Définissez le constructeur de cette classe.
3. Écrivez la méthode find_by_nom(s: str) qui permet de chercher dans le tableau personnes
si l’attribut nom d’un est égal à la valeur du paramètre s. Si c’est le cas, elle retourne le
premier objet correspondant, sinon null.
4. Écrivez la méthode exists_code_postal(cp: str) qui permet de vérifier dans le tableau
personnes si un objet possède au moins une adresse dont le code postal égal au paramètre
cp. Si c’est le cas, elle retourne True, sinon False.
5. Écrivez la méthode count_personne_ville(ville: str) qui permet de calculer le nombre
d’objets dans le tableau personnes ayant une adresse dans la ville passée en paramètre.
6. Écrivez la méthode edit_personne_nom(oldNom: str, newNom: str) qui remplace les
noms de personnes ayant un nom égal à la valeur oldNom par newNom
7. Écrivez la méthode edit_personne_ville(nom: str, newVille: str) qui remplace les
villes de personnes ayant un nom égal à la valeur du paramètre nom par newVille
8. Dans ListePersonnes, définissez un indexeur sur personnes.
9. Dans Personne, définissez un indexeur sur adresses.
10. Dans main, testez toutes les méthodes réalisées dans les questions précédentes.

2
DM : POO avec Python Formation 2025

Exercice 3 :
Codage de César :
Le codage de César, également connu sous le nom de chiffrement par décalage, est une méthode
de chiffrement simple qui décale chaque lettre d’un message d’un certain nombre de positions
dans l’alphabet. Voici comment cela fonctionne :
1. Choisissez un décalage, généralement représenté par un nombre entier positif, qui indique
combien de positions chaque lettre du message original doit être décalée vers la droite dans
l’alphabet.
2. Chaque lettre du message original est remplacée par la lettre située à une position décalée
dans l’alphabet. Les lettres en fin d’alphabet “rebouclent” vers le début de l’alphabet. Par
exemple, avec un décalage de 3, “A” deviendrait “D”, “B” deviendrait “E”, et ainsi de suite.
3. Les caractères qui ne sont pas des lettres (tels que les espaces, la ponctuation, etc.) ne sont
pas modifiés et restent tels quels dans le message codé.
Exemple :
Supposons que nous voulions coder le message “HELLO, WORLD !” avec un décalage de 3.
Message original : “HELLO, WORLD !”
Étape par étape :
— “H” est décalé de 3 positions vers la droite, devenant “K”.
— “E” est décalé de 3 positions, devenant “H”.
— “L” est décalé de 3 positions, devenant “O”.
— “L” est décalé de 3 positions, devenant “O”.
— “O” est décalé de 3 positions, devenant “R”.
Le message codé serait donc : “KHOOR, ZRUOG !”
Pour décoder le message, vous feriez simplement l’opération inverse en décalant chaque lettre de
3 positions vers la gauche dans l’alphabet.
Objectif : Écrire une classe en Python qui permet de coder et décoder des messages à l’aide
de la méthode de codage de César.
Instructions :
1. Créez une classe nommée “CesarCoder” avec les méthodes suivantes :
— __init__(self, decalage) : Un constructeur qui initialise la classe avec un décalage
spécifié.
— coder(self, message) : Une méthode pour coder un message en utilisant le décalage
spécifié.
— decoder(self, message_crypte) : Une méthode pour décoder un message codé en
utilisant le décalage spécifié.
2. Assurez-vous que la classe prend en charge les lettres majuscules et minuscules, ainsi que
les caractères non alphabétiques (ils ne doivent pas être modifiés lors du codage/décodage).

Exercice 4 :
Vous devez créer une classe appelée PileB qui simule le fonctionnement d’une pile bornée. Une
pile bornée est une pile dont la taille est limitée, ce qui signifie que vous ne pouvez pas ajouter
d’éléments une fois qu’elle atteint sa taille maximale. La classe PileB possède deux attributs : une
liste C qui contient les objets insérés dans la pile et un entier L qui représente la taille maximale
de la pile.
Voici les méthodes que votre classe PileB doit implémenter :

3
DM : POO avec Python Formation 2025

— __init__(self, taille) : Un constructeur qui initialise la pile avec une taille maximale
spécifiée taille et crée une liste vide C.
— __len__ : Une méthode spéciale pour renvoyer la taille actuelle de la pile (le nombre
d’éléments dans la liste C).
— estvide() : Une méthode qui renvoie True si la pile est vide (c’est-à-dire si la liste C est
vide), sinon False.
— estplein() : Une méthode qui renvoie True si la pile est pleine (c’est-à-dire si la taille
actuelle est égale à la taille maximale L), sinon False.
— empiler(element) : Une méthode pour ajouter un élément à la pile si elle n’est pas pleine.
Si la pile est pleine, elle ne doit pas ajouter d’éléments.
— depiler() : Une méthode pour retirer et retourner l’élément en haut de la pile (c’est-à-dire
le dernier élément ajouté) si la pile n’est pas vide. Si la pile est vide, elle ne doit pas essayer
de retirer d’éléments.
Assurez-vous de mettre en œuvre ces méthodes de manière à ce qu’elles respectent les règles
de fonctionnement d’une pile bornée.
Travail demandé :
1. Définir la classe PileB
2. Ecrire le constructeur __init__
3. Ecrire la méthode __len__
4. Ecrire la méthode estVide
5. Ecrire la méthode estplein
6. Ecrire la méthode empiler
7. Ecrire la méthode depiler

Exercice 4 :
Hypothèses de travail
– Les réponses seront écrites en langage Python.
– Les tableaux à une ou à deux dimensions (vecteurs et matrices) sont représentés par des
instances de la classe [Link].
– Une région de l’image est représentée par un ensemble (instance de la classe set) de tuples
p (p=(y,x)) décrivant les coordonnées des pixels appartenant à cette région.
– La bibliothèque numpy est importée par : import numpy as np.
– Les opérations énumérées ci-dessous sont de complexité asymptotique constante (O(1)) :
— L’ajout d’un élément à un dictionnaire ou à un ensemble ;
— La vérification de l’appartenance d’une clé à un dictionnaire ;
— L’accès à la valeur associée à une clé k dans un dictionnaire ;
— L’accès à un pixel de coordonnées (y,x) dans une image.
L’algorithme de segmentation par la méthode de partage des eaux, à implémenter en Partie
II fera intervenir les classes utilitaires à construire dans la Partie I.

4
DM : POO avec Python Formation 2025

Partie I
Description des classes
– Classe PEPS :
Rôle : Cette classe permet de représenter une file d’attente où les opérations d’ajout et de
retrait sont basées sur le principe « Premier Entré Premier Sorti ».
Attributs :
— items est un dictionnaire où :
- chaque clé, notée t, est un réel indiquant l’instant d’enfilement du pixel ;
- chaque valeur notée p, est un tuple formé par les coordonnées (y,x) du pixel
actuellement enfilé.
Méthodes :
— __init__(...) : permet d’initialiser l’attribut items à un dictionnaire vide ;
— __len__(...) : permet de retourner la taille de la file ;
— estvide(...) : retourne True si la file est vide, False sinon ;
— enfiler(...) : permet d’enfiler les coordonnées relatives au pixel p passé en paramètre.
L’instant d’enfilement t est obtenu en invoquant la fonction perf_counter du module
time. (Cette fonction ne prend aucun paramètre et retourne un réel) ;
— tete(...) : retourne les coordonnées relatives au pixel le plus ancien dans la file sans
le retirer si la file n’est pas vide, sinon déclencher une exception ;
— defiler(...) : permet de retirer les coordonnées relatives au pixel le plus ancien de
la file puis le retourner si la file n’est pas vide, sinon déclencher une exception ;
— queue(...) : retourne les coordonnées relatives au pixel le plus récent introduit dans
la file sans le retirer si la file n’est pas vide, sinon déclencher une exception.
– Classe RegionsUniformes :
Rôle : Cette classe permet de représenter les régions uniformes d’une image en niveaux de gris.
Attributs :
— nimg : une matrice représentant une image en niveaux de gris normalisée ;
— reg : un dictionnaire où :
- chaque clé est un niveau de gris de nimg ;
- chaque valeur est un ensemble de couples (instance de la classe set) contenant les
coordonnées relatives aux pixels ayant le niveau de gris dans nimg.
— niv_g : un tableau unidimensionnel contenant les clés de reg triées dans l’ordre croissant.
Méthodes :
— __init__(...) : permet de créer une nouvelle instance à partir d’une matrice représentant
une image normalisée nimg passée en paramètre ;
— __getitem__(...) : qui prend en entrée un seul paramètre p :
- si p est un tuple formé par une paire d’entiers, retourne le niveau de gris du pixel de
coordonnées p (p=(y,x)) ;
- si p est un réel dans l’intervalle [0,1], retourne l’ensemble des coordonnées associées
aux pixels ayant le niveau de gris p ;
- Sinon déclencher une exception avec un message instructif.
Cette méthode doit avoir une complexité asymptotique en O(1).
Travail demandé
Pour la classe PEPS :

5
DM : POO avec Python Formation 2025

1. Écrire la méthode __init__.


2. Écrire la méthode __len__.
3. Écrire la méthode estvide.
4. Écrire la méthode enfiler.
5. Écrire la méthode tete.
6. Écrire la méthode defiler.
7. Écrire la méthode queue.
Pour la classe RegionsUniformes :
8. Écrire la méthode __init__.
9. Exprimer en fonction de h et w, respectivement le nombre de lignes et de colonnes de l’image
nimg, la complexité asymptotique des instructions permettant de créer le dictionnaire reg.
10. Écrire la méthode __getitem__. Cette méthode doit avoir une complexité asymptotique en O(1).

Exercice 6 :
Une région est définie comme un ensemble de pixels représentant une partie ou la totalité
d’une image. Dans cet exercice, nous considérons une image composée de 3 lignes et 5 colonnes, où
certaines cases hachurées forment une région. Chaque pixel possède des coordonnées (posi, posj)
et un niveau de gris ton compris entre 0 et 255.

Figure 1 – Exemple de matrice représentant une région d’une image. Les cases hachurées
indiquent les pixels appartenant à la région.

L’objectif est de binariser une région d’une image. Pour cela, deux classes sont proposées :
Pixel et Region.

Description de la classe Pixel


La classe Pixel permet de représenter un pixel dans une image avec ses caractéristiques
principales.

Attributs
— posi : un entier représentant la position verticale (ligne) du pixel.
— posj : un entier représentant la position horizontale (colonne) du pixel.
— ton : un entier compris entre 0 et 255 représentant le niveau de gris du pixel.

Méthodes
1. __init__(self, posi: int, posj: int, ton: int) : Constructeur qui initialise un objet
Pixel avec les attributs spécifiés.
2. __str__(self) -> str : Méthode spéciale qui retourne une chaîne de caractères décrivant le
pixel selon un format spécifique.

6
DM : POO avec Python Formation 2025

Exemple
Voici un exemple de création d’un objet Pixel :

px = Pixel(1, 3, 64)

Dans cet exemple :


— Le pixel est situé à la ligne 1 et à la colonne 3.
— Son niveau de gris est 64.

Description de la classe Region

Classe Region
Attributs
— label : chaîne de caractères, désignant la région ;
— dict_pixel : un dictionnaire où :
— chaque clé représente un ton de gris ;
— chaque valeur représente la liste des coordonnées des pixels ayant ce ton de gris.
Exemple : Le dictionnaire associé à l’instance de la classe Region donnée par l’exemple de
la Figure 1 est :

dict_pixel = {255 : [(1,1), (2,2)], 64 : [(1,3), (2,3)], 0: [(1,2)]}

Méthodes
— __init__(...) : permet l’initialisation des attributs de la classe Region et dont le script
Python est donné par :

def __init__(self, lab):


[Link] = lab
self.dict_pixel = dict()

— __len__(...) : retourne la taille de la région, en nombre de pixels. Pour l’exemple de


région de la Figure 1, cette méthode retourne 5.
— __call__(...) : retourne la liste des coordonnées des pixels de la région ayant un ton de
gris t. Dans le cas où ce ton n’existe pas dans la région, cette méthode retourne None. Pour
l’exemple de la Figure 1 et le ton 64, cette méthode retourne la liste [(1,3), (2,3)].
— __contains__(...) : retourne True si un pixel px appartient à la région et False sinon.
— ajouter_pixel(...) : ajoute un pixel px à la région.
— supprimer_pixel(...) : supprime un pixel px de la région.
— binariser_reg(...) : retourne, à partir d’un ton t, une nouvelle région à deux tons 0 et
255 tels que le ton 0 est associé aux pixels ayant un ton strictement inférieur à t et le ton
255 est associé aux autres. Le label de la nouvelle région est celui de la région d’origine
post-fixé par la chaîne ‘bin’.

7
DM : POO avec Python Formation 2025

Exemple d’Instance
Considérons une région avec le dictionnaire suivant :

dict_pixel = {255 : [(1,1), (2,2)], 64 : [(1,3), (2,3)], 0: [(1,2)]}

Pour cette région :


— La méthode __len__ retourne 5.
— La méthode __call__(64) retourne [(1,3), (2,3)].
— La méthode __contains__ vérifie si un pixel appartient à la région.
— La méthode binariser_reg(128) crée une nouvelle région binarisée.

Vous aimerez peut-être aussi