Vous êtes sur la page 1sur 6

TP6 : OO

TP6 : L’orienté objet


python

Exercice 1
I.
1) Définir une classe Rectangle avec un constructeur donnant des valeurs (longueur et
largeur) par défaut et un attribut nom=’rectangle’, une méthode d’affichage et une
méthode surface renvoyant la surface d’une instance
2) Définir une classe Carre héritant de Rectangle et qui surcharge l’attribut d’instance :
Nom= « carré »
3) Dans le programme principal, instanciez un Rectangle et un carré et les afficher.
II.
1) Définir une classe Point avec un constructeur fournissant les coordonnées par défaut d’un
point du plan. (par exemple : x=0.0 ET y=0 .0).
2) Définir une classe Segment dont le constructeur possède quatre paramètres : deux pour
l’origine et deux pour l’extrémité. Ce constructeur définit de deux attributs : orig et
exterem, instance de la classe Point. De cette manière, vous concevez une classe
composite : la classe Segment est composée de deux instances de la classe Point
3) Ajouter une méthode d’affichage
4) Enfin écrire un auto-test qui affiche une instance de Segment initialisée par les valeurs 1,
2, 3 et 4

Exercice 2 :
Définissez une classe Voiture permettant d’instancier des objets reproduisant le comportement de
voitures automobiles. Le constructeur de cette classe initialisera les attributs d’instance suivants,
avec les valeurs par défaut indiquées :
Marque=’ford’, couleur=’rouge’, pilote=’personne’, vitesse =0
Lorsque l’on instanciera un nouvel objet Voiture(), on pourra choisir sa marque et sa couleur, mais
pas sa vitesse, ni le nom de son conducteur.
Les méthodes suivantes seront définies :
1) Choix_conducteur(nom) permettra de désigner le nom du conducteur.
2) Accélérer (taux, durée) permettra de faire varier la vitesse de la voiture. La variation
de vitesse obtenue sera égale au produit : taux* durée.
3) Une méthode pénaliser(self) qui permet de pénaliser l’abonner.

Page 1
TP6 : OO

Par exemple, si la voiture accélérer au taux de 1.3m/s pendant 20 secondes, son gain de vitesse doit
être égale à 26m/s. des taux négatifs seront accepter (ce qui permettra de décélérer).
La variation de vitesse ne sera pas autorisée si le conducteur est ‘personne’.
4) Affiche_tout() permettra de faire apparaitre les propriétés présentes de la voiture, càd sa marque,
sa couleur, le nom de son conducteur, sa vitesse
Exemple d’utilisation de cette classe :
a1= Voiture('Peugeot' , 'bleue')
a2= Voiture(couleur= ‘verte')
a3= Voiture(‘Mercedes’)
a1.choix_conducteur(‘Roméo’)
a2.choix_conducteur(‘Juliette’)
a2. Accélérer(1.8,12)
a2. Accélérer(1.9,11)
cette voiture n’a pas de conducteur :
a2.affiche_tout
ford verte pilotée par Juliette, vitesse =21.6 m/s
a3.affiche_tout()
Mercedes rouge pilotée par personne, vitesse= 0 m/s
Exercice 3
On désire définir une classe Cercle. Les objets construits à partir de cette classe seront des cercles de
tailles variées.
1. Définir le constructeur qui utilisera un paramètre rayon,
2. Définir une méthode surface() qui devra renvoyer la surface d’un cercle.
3. Définir une classe Cylindre dérivée de la classe Cercle. Le constructeur de cette nouvelle classe
comportera les deux paramètres rayon et hauteur.
4. Définir une méthode volume() qui devra renvoyer le volume du cylindre.
(Rappel : Volume d’un cylindre = surface de section * hauteur)
5. Définir une classe Cône qui devra dériver cette fois de la classe Cylindre et dont le constructeur
comportera lui aussi les deux paramètres rayon et hauteur. Cette nouvelle classe possèdera sa propre
méthode volume(), laquelle devra renvoyer le volume du cône.
(Rappel : Volume d’un cône = volume du cylindre correspondant divisé par 3)
Exercice 4
A .Définir une classe Date qui permet de représenter une date sous la forme jour, mois, année (3
entiers naturels).
1) La classe contient un attribut de classe NB_jours qui est un tuple définit comme suit :

Page 2
TP6 : OO

NB_jours=(31,28,31,30,31,30,31,31,30,31,30,31)

2) Définir le constructeur qui doit initialiser les trois attributs d’instances (jour, mois, année).

3) Implémenter la méthode affiche_date() permettant de représenter une date sous la forme


d’une chaine « jour-mois-année »

B. Définir une classe Adresse permet de représenter une adresse sous la forme rue, ville.
1. Définir le constructeur qui doit initialiser les trois attributs privés (num, rue, ville). Le num
est une chaine qui est formée de 2 chiffres.
C. Définir une classe Personne dont les attributs sont nom, adresse et date_naissance.

1) Définir le constructeur qui possède 3 paramètres pour initialiser les 3attributs d’instances.

2) La classe doit contenir un attribut privé age mis à jour à partir de l’attribut date_naissance.

3) Définir la méthode affiche_personne() qui permet l’affichage de toutes les informations


d’une personne.

Exemple : Foulen ben foulen habite à 07 ali belhouane Sousse né le 06-07-2000 agé de 22 ans

D. Définir une classe Etudiant qui hérite de la classe Personne.


1) Définir le constructeur qui doit initialiser l’attribut d’instance filière.

2) Définir la méthode magique __str__() pour afficher les informations d’un étudiant dans le
programme principal.

Exercice 5
On veut implémenter en python, une application pour la gestion d’une bibliothèque. Une conception
orienté objet partielle du problème nous conduit vers la décomposition suivante :
1) Définir la classe Date, qui permet de représenter une date sous la forme jour, mois, et année
(3entier naturels). Proposer une implémentation Python pour cette classe qui doit répondre aux
spécifications suivantes :
La classe doit contenir un attribut de classe NB_Jour et qui indique le nombre de jours de
chaque mois (pour simplifier nous supposera que toute les années sont non bissextiles c’est-
à-dire le mois de février contient 28jours) .NB_Jour sera un tuple définit comme suit :
o NB_Jour = (31,28,31,30,31,30,31,31,30,31,30,31)
Le constructeur de classe doit initialiser les trois attributs d’instances (Jour, Mois et Année)
après avoir effectué les vérifications nécessaires, prévoir des exceptions si les paramètres de
constructeur ne sont pas valides.
La méthode magique __str__, permettant de représenter une date sous la forme d’un str de la
forme « jour /mois/année » par exemple « 09/12/2021 »

Page 3
TP6 : OO

La méthode__add__ permettant d’additionner une date D et un entier n (nombre de jour), le


résultat est une instance de la classe Date avancée de n jours par rapport à la date D. par
exemple print (Date(14, 3, 2020) +21) donne "4/4/2020 "
La méthode __eq__ permettent de vérifier l’égalité de deux instances de la classe Date le
résultat sera un booléen
La méthode__lt__, permettant d’appliquer l’opérateur relationnel < sur deux instances de la
classe Date

2) Classe Livre qui permet de représenter la fiche d’un livre dans la bibliothèque.
Proposer une implémentation Python pour cette classe en respectant les directives suivantes :
La classe doit contenir un attribut de classe privé num_livres initialisé à 0 et utilisé par le
constructeur afin de générer un identifiant unique pour chaque livre (incrémenté après
chaque appel du constructeur).
Un constructeur qui reçoit deux paramètres (t et nb_ex) et qui permet d’initialiser une
nouvelle instance de cette classe avec les attributs suivants :
o num: attribut public initialisé à partir de l’attribut de classe num_livres
o titre :un attribut d’instance public contenant le titre du livre initialisé par le paramètre t
o nb_exemplaires : un attribut d’instance privé indiquant le nombre d’exemplaires
actuellement disponibles dans la bibliothèque initialisé par le paramètre nb_ex .
La méthode magique str : permettant de représenter un livre sous forme d’un str
Exemple :
« Livre N°5 ;intitulé : Apprendre à programmer avec Python 3;5exemplairedisponibles ».
Une méthode est_disponible(self) qui retourne un booléen permettant d’indiquer s’il y a un
exemplaire disponible en stock.
Une méthode retirer_un_exemplaire(self) permettant de retirer un seul exemplaire du
stock disponible. Prévoir une exception dans le cas où le stock est déjà épuisé.
Une méthode retour _exemplaire(self) permettant d’ajouter un seul exemplaire au stock
disponible
3) Classe Abonné, qui représente les fiches des abonnées de la bibliothèque. Proposer une
implémentation Python pour cette classe en suivant les indications ci-dessous :
Un attribut de classe privé de type liste contenant tous les numéros des cartes d’identités des
abonnées déjà instanciés. Le constructeur doit utiliser cet attribut pour s’assurer de l’unicité du
numéro de l’instance en cours de création et doit lever une exception si ce n’est pas le cas.
Un constructeur qui reçoit deux paramètres NCIN : une chaine formée par 8 chiffres,

nom : une chaine et dn une instance de la classe Date), le constructeur doit vérifier l’unicité de
l’attribut NCIN par rapport aux instances déjà crée ensuite il créé les attributs d’instance suivants
:
Page 4
TP6 : OO

o Ncin : l’identifiant unique de l’abonné(privé) initialisé par le paramétré NCIN


o Nom : le nom de l’abonné initialisé par le paramètre Nom.
o Dn: la date de naissance de l’abonné
o Est_pénalisé : un attribut privé de type booléen permettant d’indiquer si l’abonné
est pénalisé ou pas. Un abonné initialement créé n’est pas pénalisé.
o Nb_emprunt : un attribut privé de type entier indiquant le nombre de livres
empruntés par l’abonné. Un abonné initialement créé n’a aucun livre en sa possession.
La méthode magique __str__ : permettant de représenter un Abonné sous forme d’une chaine de
caractère
Exemple :
« NCIN :05344430 ;Nom :Foulen Ben Foulen ; état : non pénalisé »
Une méthode est_pénalisé(self) retournant un booléen indiquant si l’abonné est actuellement
pénalisé ou pas
Une méthode pénaliser(self) qui permet de pénaliser l’abonner.
Une proprety NCIN permettant d’accéder en lecture seule à l’attribut privé NCIN
Une méthode marquer_retour(self) permettant de marquer le retour d’un livre de la part de
l’abonné en décrémentant le nombre de livres en sa possession.
Une méthode marquer_emprunt(self) permettant de marquer l’emprunt d’un nouveau livre
par l’abonné en incrémentant par conséquent le nombre de livres en sa possession.

4) Classe Abonné_restreint qui étend (hérite d’Abonné) et qui représente une catégorie spéciale
d’abonné dont le nombre maximum d’emprunts est limité à une borne_max_emprunt, cette
borne est passé au constructeur avec les autres informations nécessaires pour l’initialisation d’un
abonné. Redéfinir les méthodes nécessaires afin de tenir compte de cette particularité (lever une
exception si tentative d’emprunt dans le cas où le nombre maximum d’emprunts est déjà atteint
5) Classe Emprunt, une instance de cette classe représente une opération d’emprunt d’un seul
exemplaire d’un livre par un abonné de la bibliothèque.
Proposer une implémentation Python pour cette classe en respectant les consignes suivantes :

Le constructeur de cette classe doit recevoir trois paramètres supposé valides (le numéro du livre
emprunté, le CIN de l’abonné et la date de l’emprunt). Ces 3 paramètres sont utilisés pour initialiser
les cinq attributs de l’instance crée :

o Num_livre : le numéro de livre emprunté


o Ncin_abonné : le NCIN de l’abonné
o De : la date de l’emprunt

Page 5
TP6 : OO

o Dpr : la date prévue du retour= date de l’emprunt- 10jours


o Pénalité : un bool qui indique si cette opération est pénalisée (dans le cas où la date prévue
de retour est dépassée). Initialement, l’opération n’est pas pénalisée

Une méthode maj_pénalit(self,da) : qui permet de mettre à jour la pénalité suivante la dpr
et la date actuelle da
6) Classe bibliothèque qui représente l’application de la bibliothèque. Proposer une
implémentation Python pour cette classe qui doit respecter les consignes suivantes :
Le constructeur de cette classe est sans paramètres il doit initialiser les attributs d’instance
suivants :
o Livres : un dictionnaire (initialement vide) qui contient les fiches des titres disponibles
; les clés de ce dictionnaire sont les numéros des livres et les valeurs sont les instances
de la classe livre qui encapsulent les informations associées
o Emprunteurs : un dictionnaire (initialement vide) contenant les fiches des abonnés de
la bibliothèque. Les clés de ce dictionnaire sont les NCIN des abonnés et les valeurs
associées sont des instances de la classe Abonné
o Opérations : un dictionnaire (initialement vide) contenant les opérations d’emprunt en
cours. Les clés de ce dictionnaire sont des paires (des tuples de taille 2) contenant le
ncin de l’abonnée et le numéro du titre emprunté, les valeurs associés sont des instances
de la classe Emprunt
Une méthode ajouter_livre (self, l) permettant d’ajouter l, une instance de la classe Livre à
la bibliothèque (et de mettre à jour le dictionnaire concerné).
Une méthode ajouter_abonné (self,a) permet d’ajouter un abonnée a et de mettre à jour le
dictionnaire concerné
Une méthode magique _ _str_ _ qui permet de représenter l’inventaire de la bibliothèque
sous format str
Une méthode livres_empruntés (self, ncin) qui retourne l’ensemble (instance de la
classe set) des numéros des livres empruntés par l’abonné ayant le numéro ncin
Une méthode ont_emprunté (self, num_liv) qui retourne l’ensemble des ncin des
abonnés qui ont emprunté le livre ayant le numéro num_liv
Une méthode emprunter (self, ncin, num_liv, date_emprunt) permettant à l’abonné
désigné par ncin (si ce dernier est présent dans le dictionnaire d’abonné, s’il n’est pas pénalisé et
s’il ne possède pas déjà le même livre en sa possession) d’emprunter un exemplaire du
livre identifié par num_liv si ce dernier est disponible en stock. L’opération est marquée
(marquer_emprunt), ensuite le livre emprunté est déduit du stock et le dictionnaire des
opérations est mis à jour.si le livre n’est pas en stock alors une erreur est

Page 6

Vous aimerez peut-être aussi