Вы находитесь на странице: 1из 5

A 2010

Téléphone : 022 93
65 50 (L.G.)
Session et Année
Fax : 022 93 65 59, Courriel : epcam@iam.net.ma

GLO1900 Introduction à la programmation avec Python

Sigle du cours Titre du cours

TD 7 Classes/Héritage

EXERCICE 1

1- Définir une classe CompteBancaire qui permette de gérer un compte


bancaire, défini par un nom de client et un solde (nombre d'euros sur le
compte).

On aura au moins les méthodes suivantes :

• __init__(self, nom, montant_initial=0) : créateur;


• affiche(self) : affiche l'état du compte à l'écran;
• depose(self, montant) : dépot sur le compte;
• retire(self, montant) : retrait.

Les méthodes de depot et retrait vérifieront que le montant est positif, et que le
solde reste positif; dans le cas contraire, elles lanceront l'exception ValueError.

2- Définir une classe ComptePrivilege identique à la précédente, sauf que la


méthode retire autorise des découverts jusqu'à 1000 euros.

3- Définir une classe Banque qui gère un ensemble de comptes. La classe


devra posséder les fonctionnalités suivantes :

1. ajout d'un compte;


2. retrouver un compte connaissant le nom du client;
3. sauvegarde de tous les comptes dans un fichier texte;
4. création d'une banque à partir d'un fichier texte.

GLO1900 (24/12/2010) tarik.fassali@polytechnique.ma


1
EXERCICE 2

Le programme suivant affiche quelques formes géométriques à l'aide


d'un canvas tk :

from tkinter import *


WIDTH = 400
HEIGHT = 300
root = Tk()
canvas = Canvas(root, width=WIDTH, height=HEIGHT)
canvas.pack(fill='both', expand=1)
canvas.create_line( 100,40, 130,50)
canvas.create_oval(10,10,100,40)
canvas.create_rectangle(100,40, 150,90)

Les coordonnées sont toujours celles du rectangle englobant l'objet.

Soit un programme gérant une liste d'éléments graphiques de différents types


(lignes, ovales, rectangles).

Dans une première version, on décide de représenter chaque élément par un


tuple ( type_element, x1, x2, ... ), où type_element est une chaine de caractères
(le nom du type d'élémént) et x1, x2, etc les coordonnées de l'élémént.

1- Soit L une liste d'éléments. Écrire une fonction qui permette d'afficher
(comme dans le programme exemple) tous les éléments de la liste dans un
canvas existant.

2- Outre ses coordonnées, un élément peut posséder d'autres caractéristiques


comme sa largeur de trait (width), sa couleur de remplissage (fill) et sa couleur
de contour (outline). Ainsi, l'appel

canvas.create_rectangle(100,40, 150,90, fill='red', outline='green', width=4)

affiche un rectangle de couleur rouge, dont les côtés sont verts et de largeur 4
pixels.

Comment pourrait-on gérer ses caractéristiques dans la représentation


précédente ? Est-il facile de définir un nouveau type d'élément comme des
« ovales rouges »' ?

3- On décide d'adopter une représentation objet pour les éléments graphiques.

GLO1900 (24/12/2010) tarik.fassali@polytechnique.ma


2
En effet, l'écriture de la fonction d'affiche s'en trouve simplifiée :

def AfficheListeOOP(L):
for elem in L:
elem.affiche()

Ici L est une liste d'instances de la classe ElementGraphique (ou de l'une de ses
sous-classes).

Définir la classe ElementGraphique, ainsi que les sous-classes permettant de


représenter les différents types d'éléments graphiques (lignes, rectangles etc).

EXERCICE 3

On reprend l'exercice 1 du TD précédent (gestion d'un compte bancaire).

1- Afin d'ajouter une interface graphique permettant de visualiser l'état d'un


compte en banque, on définira une classe InterfaceCompte dont héritera la
classe CompteBancaire.

La classe InterfaceCompte ne se charge que des aspects présentation. La


classe CompteBancaire ne sera pas modifiée (à l'exception éventuelle de son
constructeur).

2- De la même manière, ajouter une interface graphique à la classe Banque,


permettant de créer, visualiser et supprimer des comptes.

EXERCICE 4

On veut concevoir un programme qui modélise un train et ses diverses


propriétés. On va donc concevoir une classe d'objets ``Train'', qui pourrait par
exemple être utilisée dans un programme simulant certains aspects du trafic
ferroviaire.

Bien évidemment, notre classe Train va constituer une représentation très


simplifiée. Voici ses principales caractéristiques :

GLO1900 (24/12/2010) tarik.fassali@polytechnique.ma


3
1. un train a un nom;
2. un train possède des wagons;
3. un train a une masse (incluant les wagons et leur contenu).

Certains trains ont des propriétés supplémentaires; par exemple les TGV et les
RER sont constituées de plusieurs rames (on aura un attribut ``nombre de
rames''). Il y a aussi plusieurs types de TGV (``Méditerranée'', ``Atlantique'',
``Thalys'', ``Eurostar'', ...).

1- Définir une hierarchie de classes adaptée à la modélisation des différents


trains évoqués ci-dessus. On listera les méthodes et les attributs de chaque
classe, en précisant leur type, mais on n'écrira pas le code.

2- Les wagons seront représentés par des instances de la classe Wagon (ou de
l'un de ses sous-classes).

Écrire les méthodes AjouteWagon et RetireWagon de la classe Train. Bien sur,


on ajoute toujours un wagon en queue du train, et on ne peut retirer que le
dernier wagon du train.

3- Tout wagon possède une masse; la méthode getMasse() est supposée


retourner la masse d'un wagon. La masse d'un train est la somme de celles de
ses wagons (on considère la locomotive comme un wagon particulier). Écrire la
méthode getMasse() de la classe Train.

4- En fait on distingue deux grandes catégories de wagons : ceux qui ont une
masse fixe (en réalité souvent un majorant, comme pour la wagons de
voyageurs où seule la capacité maximale est prise en compte) et ceux qui ont
une masse variable (wagons de marchandises transportant un certains nombre
de colis).

De même, un objet transporté par un wagon peut parfois contenir d'autres


objets (c'est le cas des containers). Un container est un sorte de ``boite'' (les
containers formeront donc une sous-classe de la classe Boite). La masse d'une
boite est donnée par la masse propre de la boite (la tare), plus la masse des
objets qu'elle contient.

La masse d'un objet qui n'est pas une boite est supposée contenue, on l'obtient
aussi grace à sa méthode getMasse().

Définir une hiérarchie de classes pour les objets transportés par les wagons
(boites ou pas), puis écrire la méthode getMasse() de la classe Boite.

5- Définir une hiérarchie de classes pour les wagons, et écrire les


méthodes getMasse() de chaque classe.

GLO1900 (24/12/2010) tarik.fassali@polytechnique.ma


4
GLO1900 (24/12/2010) tarik.fassali@polytechnique.ma
5

Вам также может понравиться