TP. Programmation Orientée Objet en Python
TP. Programmation Orientée Objet en Python
Chapitre 2
Exercice 2.
1. Définir une classe Python nommé « Time » définie par les variables d’instances pour mémoriser les heures,
minutes et secondes. Exemple : (12 : 32 : 45).
2. Créer un objet instant de type Time.
3. Créer une fonction affiche_heure(t) qui serve à visualiser les attributs d’un objet t de la classe Time.
4. Redéfinir la méthode affiche_heure (self), à l’intérieur de la classe Time. Le premier paramètre « self » est
obligatoire, car il représente l’instance à laquelle la méthode sera associée.
5. Créer un objet maintenant de type Time et tester la nouvelle méthode sur cet objet.
Exercice 3.
Définissez une classe CompteBancaire ( ), qui permette d’instancier des objets tels que compte1, compte2, etc.
Le constructeur de cette classe initialisera deux attributs nom et solde, avec les valeurs par défaut ’Salim’ et 1000.
1. Trois autres méthodes seront définies :
a. depot(self,somme) permettra d’ajouter une certaine somme au solde ;
b. retrait(self,somme) permettra de retirer une certaine somme du solde ;
c. __repr__(self) permettra d’afficher le nom du titulaire et le solde de son compte.
Exercice 5.
1. Les classes sont souvent utilisées pour modéliser des objets dans le monde réel. Nous pouvons représenter
les données sur une personne dans un programme par une classe Personne, contenant le nom de la personne,
son prénom, son numéro de téléphone, et son email. Une méthode __str__ peut imprimer les données de la
personne.
Exemples :
>>> amir = Personne('Ben Salem', 'Amir', '55593581', "[email protected]")
>>> print(amir)
Ben Salem, Amir -- Telephone: 55593581 -- Email: "[email protected]"
>>> mariem = Personne('Abassi', 'Mariem', '55519403',"[email protected]")
>>> print(mariem)
Abassi, Mariem -- Telephone : 55519403 -- Email :"[email protected]"
Travail à faire : Implémentez la classe Personne.
3. Un scientifique est un type spécial de travailleur. La classe Scientifique peut donc être dérivée de la classe
Travailleur. Ajouter des données sur la discipline scientifique (physique, chimie, mathématiques,
informatique, ...). On peut aussi ajouter le type de scientifique : théorique, expérimental ou informatique. La
valeur d’un tel attribut de type ne doit pas être limitée à une seule catégorie, car un scientifique peut être
classé comme, par exemple, à la fois expérimental et informatique (c’est-à-dire, vous pouvez représenter la
valeur sous la forme d’une liste ou d’un tuple).
Travail à faire : Mettre en œuvre la classe Scientifique.
4. Enfin, faites un programme principal de démonstration où vous créez et imprimez des instances de classes
Personne, Travailleur et Scientifique. Imprimez le contenu des attributs de chaque instance.
Exercice 6.
Dans cet exercice vous allez construire un carnet d’adresses en utilisant la classe Personne définie dans le
l’exercice précédent afin d’enregistrer vos contacts (amis, famille, ...). Chaque entrée du carnet d’adresses sera
une instance de la classe Personne.
Le carnet d’adresses doit vous permettre de chercher et retourner les informations de vos contacts.
Travail à faire :
Créer une classe CarnetAdresses contenant les méthodes suivantes :
1. La méthode constructeur __init__
2. La méthode d’impression __str__
3. Une méthode nommée ajouter_contact qui vous permet d’ajouter une personne à votre carnet d’adresses.
4. Une méthode chercher_contact qui recherche un contact par son nom parmi les personnes enregistrées dans
votre carnet d’adresses et affiche dans une nouvelle ligne chaque contact possédant le nom en question. Cette
méthode doit accepter deux arguments :
• Un argument obligatoire : le nom du contact à rechercher.
• Un deuxième argument optionnel : le prénom du contact, permettant de réduire le résultat si plusieurs
contacts ont le même nom.
Ceci est un exemple qui vous montre comment votre classe doit fonctionner après l’implémentation de ces deux
méthodes.
Par exemple, votre carnet d’adresses contient les entrées "Ali Ben Salem" et sa sœur "Sana Ben Salem":
>>> a = CarnetAdresses()
>>> a.ajouter_contact(Personne('Ben Salem', 'Ali', ... ))
>>> a.ajouter_contact(Personne('Ben Salem', 'Sana', ... ))
>>> a.chercher_contact('Ben Salem')
Ben Salem, Ali -- Telephone : ...
Ben Salem, Sana -- Telephone : ...
>>> a.chercher_contact('Ben Salem', 'Ali')
Ben Salem, Ali -- Telephone : ...
Exercice 8 :
Programmons une classe Vect2d dont les objets modéliseront des vecteurs à deux composantes réelles dans un
repère orthonormé (O ; I ; J), gradué avec la même unité (OI = OJ = 1 unité). Lorsque le mathématicien dit : «
Soit le vecteur 𝑢
⃗ (3,-2) », le programmeur Python dira : « u = Vect2d (3,-2) ».
1. Programmez le constructeur, chargé d’initialiser les attributs x et y de l’instance courante, qui se nomme
self. Par défaut, x et y seront mis à 0.
2. Si je veux additionner deux vecteurs, j’ai deux solutions. Ou bien je programme une fonction mathématique
add(v1,v2) à l’extérieur de la classe. Ou bien, dans une optique de pure programmation par objets, je
programme add comme méthode d’instance à l’intérieur de la classe. Adoptez cette seconde solution, pour
laquelle le résultat de l’addition avec la méthode add sera un nouveau vecteur.
Exercice 9 :
Dans cet exercice on s’intéresse à créer des classes pour gérer les vols d’une compagnie aérienne locale qui
organise des vols entre des villes. Plus précisément on s’intéressera aux plans de vol entre les différentes villes.
Càd les vols disponibles ainsi que l’heure de départ.
1. Pour créer une classe Vol_direct qui représentera un vol direct entre deux villes (pas d’escale dans une ville
intermédiaire) , on doit :
1.1. Définir le constructeur de cette classe qui a quatre attributs :
• dep et arr qui désigne respectivement la ville de départ et la ville d’arrivée
• jour qui désigne le jour de la semaine (lundi, mardi, …)
• heure (un entier entre 0 et 24 qui représente l’heure de départ )
1.2. Ecrire une méthode Affiche qui affiche une chaine bien formatée de la forme :
« Ce vol part de ‘Tunis’ vers ‘Djerba’ le ‘lundi’ à 9 heure »
2. Créer une classe Vols qui représentera tous les vols le long de la semaine en utilisant la classe Vol_direct.
Pour ce faire on doit :
2.1. Définir le constructeur de cette classe avec un seul attribut qui est une liste de vols
2.2. Ecrire une méthode Liste_successeurs qui retourne une liste contenant les villes arrivées d’une ville de
départ passée comme paramètre
2.3. Ecrire une méthode Appartient qui vérifie si une ville appartient au plan du vol que ce soit comme
ville d’arrivée ou de départ
2.4. Ecrire une méthode Affiche qui affiche tous les vols directs
On se propose de construire la classe PolynomeCreux à coefficients réels dont le squelette (à compléter) est défini
par :
class PlynomeCreux :
"""Manipulation des polynômes creux à une seule variable """
def __init__(self):
self.data = {} #initialisation à un polynôme nul
def degree(self):
#réponse à la question 2
⁞
def primitive(self):
#réponse à la question 7
⁞
Travail demandé :
Question 1 :
Compléter le script de la méthode ajout_monome. On rappelle que cette méthode ajoute un monôme saisi au
clavier (en faisant les contrôles nécessaires) si le paramètre monome est nul ou ajoute le monôme nommé monome
sinon.
Question 2 :
Ecrire le script de la méthode, nommée degree, qui retourne le degré du polynôme.
Question 3 :
Ecrire le script de la méthode, nommée __call__ qui retourne la valeur du polynôme pour un réel x0 donné.
Question 4 :
Ecrire le script de la méthode, nommée __add__ , qui retourne le polynôme somme de deux polynômes. Remarque
: aucun monôme nul ne doit apparaître dans le polynôme résultat.
Question 5 :
Ecrire le script de la méthode, nommée __mul__ , qui retourne le polynôme produit de deux polynômes.
Remarque : aucun monôme nul ne doit apparaître dans le polynôme résultat.
Question 6 :
Ecrire le script de la méthode, nommée __str__, qui retourne la chaîne représentant l'expression du polynôme
ordonné par ordre décroissant.
Pour le polynôme représenté par { 4:4, 0:4 , 12:6 , 9:1 , 7 :-l}, la chaîne retournée est : " 6*x**12 + x**9 - x**7
+ 4*x**4 + 4"
Question 7 :
Ecrire le script de la méthode, nommée primitive, qui retourne le polynôme représentant la primitive. On suppose
que la constante d'intégration est nulle.
Question 8 :
𝑏
On définit, l'intégrale d'un polynôme creux P en x entre les bornes a et b, par: 𝑆 = ∫𝑎 𝑃𝑑𝑥
Ecrire le script de la fonction, nommée integrale, permettant de retourner la valeur de S à partir d'un polynôme
P, de type PolynomeCreux, et des bornes d'intégration a et b réels.