IGS
La langage Python
»Accueil
»Notes Python
»Exercices POO
»ER et Tests
»Classes
»HTTP Server
»Turtle
»Tkinter GUI

1. Classe simple

1.1. Enoncé

Définir une classe MaClasse possédant les attributs suivants :

  • données : deux attributs de classes : x = 23 et y = x + 5.

  • méthode : une méthode affiche contenant un attribut d’instance z = 42 et les affichages de y et de z.

Dans le programme principal, instanciez un objet de la classe MaClasse et invoquez la méthode affiche.

Ce qui produit :
> python maclasse.py
28
42
Voila mes valeurs y = 28 z = 42
42
23

2. Vecteur 2D

2.1. Enoncé

Définir une classe Vecteur2D avec un constructeur fournissant les coordonnées par défaut d’un vecteur du plan (par exemple : x = 0 et y = 0).

Dans le programme principal, instanciez un Vecteur2D sans paramètre, un Vecteur2D avec ses deux paramètres, et affichez-les.

Ce qui produit :
> python vecteur2d.py
------------ une instance par defaut -------------
x = 0, y = 0
------------ une instance initialisee ------------
x = -5, y = 4
coucou

3. Vecteur 2D : surcharge

3.1. Enoncé

Enrichissez la classe Vecteur2D précédente en lui ajoutant une méthode d’affichage et une méthode de surcharge d’addition de deux vecteurs du plan.

Dans le programme principal, instanciez deux Vecteur2D, affichez-les et affichez leur somme.

Ce qui produit :
> python vecteur2dsurcharge.py
Vecteur(1.2, 2.3)
Vecteur(3.4, 4.5)
Vecteur(4.6, 6.8)

4. Héritage simple

4.1. Enoncé

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.

Définir une classe Carre héritant de Rectangle et qui surcharge l’attribut d’instance : nom = "carré".

Dans le programme principal, instanciez un Rectangle et un Carre et affichez-les.

Ce qui produit :
> python rectangle.py

Le rectangle de côtes 12 et 8 a une surface de 96

Le carre de côtes 10 et 10 a une surface de 100

5. Points

5.1. Enoncé

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).

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 deux attributs : orig et extrem, instances 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.

Ajouter une méthode d’affichage.

Enfin écrire un auto-test qui affiche une instance de Segment initialisée par les valeurs 1, 2, 3 et 4.

Ce qui produit :
> python point.py
Segment : [(1.0, 2.0), (3.0, 4.0)]

6. Fermeture

6.1. Enoncé

Définir une fonction fabrique creer_plus renvoyant une fonction fermeture plus. cree_plus a un argument ajout. Son code ne renferme que la fonction plus qui, elle aussi, possède un argument increment et dont le code se contente de renvoyer la somme : (ajout + increment).

Dans le programme principal, créez deux fonctions, par exemple p = creer_plus(23) et p = creer_plus(42), puis affichez les valeurs données par p(100) et q(100).

Ce qui produit :
> python fermeture.py
----- creation de deux fabriques distinctes ------
(123, 142)

7. Fabrique

7.1. Enoncé

Écriture d’une fonction fabrique renvoyant une instance de classe. Définir une classe CasNormal contenant une méthode uneMethode qui affiche "normal". Définir une classe CasSpecial contenant une méthode uneMethode qui affiche "spécial". Enfin définir la fonction fabrique casQuiConvient avec un paramètre estNormal initialisé par défaut à True. Si le paramètre est vérifié, le corps de la fonction renvoie une instance de la classe CasNormal, sinon il renvoie une instance de la classe CasSpecial.

Dans le programme principal, créez l’instance que vous désirez grâce à la fabrique, puis vérifiez son type en appelant dessus la méthode uneMethode

Ce qui produit :
> python fabrique.py
special

8. Pile et File

8.1. Enoncé

Implanter des classes Pile et File utilisant les listes comme structure de données interne et respectant l’interface suivante (utiliser l’héritage) :

class Base(object):
def pop(self):
pass
def push(self, elt):
pass
Ce qui produit :
> python pile.py
[]
True
['A', 5, ['toto', 'titi', 'tata']]
['toto', 'titi', 'tata']
5
1
A
Ce qui produit :
> python file.py
[]
True
[['toto', 'titi', 'tata'], 5, 'A']
A
5
1
['toto', 'titi', 'tata']