SD2 - Programmation Orientée Objet
Exercice 1
Utilisation d’objets
Voici la classe
Carte
dont on vous donne les en-têtes de méthodes :
class Carte:
def __init__(self, nom, couleur):
# Affectation de l'attribut nom et de l'attribut couleur
couleur = ('CARREAU', 'COEUR', 'TREFLE', 'PIQUE')
noms = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'Valet', 'Dame',
'Roi', 'As']
valeurs = {'2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,
'10': 10, 'Valet': 11, 'Dame': 12, 'Roi': 13, 'As': 14}
def setNom(self, nom):
# Mutateur de l'attribut nom (de la liste noms)
def getNom(self):
# renvoie le nom de la carte (de la liste noms): Accesseur
def getCouleur(self):
# renvoie la couleur de la carte (de la liste couleur): Accesseur
def getValeur(self):
# renvoie la valeur de la carte (du dictionnaire valeurs) : Accesseur
def egalite(self, carte):
''' Renvoie True si les cartes self et carte ont même valeur, False sinon
carte: Objet de type Carte '''
def estSuperieureA(self, carte):
''' Renvoie True si la valeur de self est supérieure à celle de carte,
False sinon
carte: Objet de type Carte
'''
def estInferieureA(self, carte):
''' Renvoie True si la valeur de self est inférieure à celle de carte,
False sinon
carte: Objet de type Carte
'''
Ecrire (sur feuille) un programme principal qui va :
- Créer la carte Valet de CŒUR que l’on nommera c1.
- Afficher le nom, la valeur et la couleur de c1.
- Créer la carte As de PIQUE que l’on nommera c2.
- Afficher le nom, la valeur et la couleur de c2.
- Modifier le nom de la carte c2 en Roi et afficher le nom, la valeur et la couleur de c2.
- Créer la carte 8 de TREFLE que l’on nommera c3.
- Comparer les cartes c1 et c2 puis c1 et c3.
Exercice 2
Utilisation d’objets
On suppose écrites les classes
Piece
etAppartement
, dont on vous donne les en-têtes de méthodes :
class Piece:
# nom est une string et surface est un float
def __init__(self,nom,surface):
self.nom=nom
self.surface=surface
# Accesseurs: retournent les attributs d'un objet de cette classe
def getSurface(self):
return self.surface
def getNom(self):
return self.nom
# Mutateur
def setSurface(self,s): # s est un float,
...
class Appartement:
# nom est une string
def __init__(self,nom):
# L'objet est une liste de pièces (objets issus de la classe Piece)
self.listeDePieces=[]
self.nom=nom
# Accesseurs:
def getNom(self):
return self.nom
# pour ajouter une pièce de classe Piece
def ajouter(self,piece):
...
# pour avoir le nombre de pièces de l'appartement
def nbPieces(self): #
...
# retourne la surface totale de l'appartement (un float)
def SurfaceTotale(self):
...
# retourne la liste des pièces avec les surfaces
def getListePieces(self): # sous forme d'une liste de tuples
...
Ecrire, sur feuille, un programme principal utilisant ces deux classes qui va :
- Créer une pièce "chambre1", de surface 20 m² et une pièce "chambre2", de surface 15 m².
- Créer une pièce "séjour", de surface 25 m² et une pièce "sdb", de surface 10 m².
- Créer une pièce "cuisine", de surface 12 m².
- Créer un appartement "appart205" qui contiendra toutes les pièces créées.
- Afficher la surface totale del'appartement créé.
- Afficher la liste des pièces et surfaces de l'appartement créé.
Exercice 3
Rédaction de méthodes
On utilise les classes
Piece
etAppartement
de l'exercice 2, les en-têtes de méthodes restent identiques mais vous allez devoir les compléter : (... : parties à compléter)
Consignes :
En cas de difficulté, rendez-vous à la version intermédiaire
Le test suivant sera exécuté
# Programme de test
a=Appartement('appt25')
p1=Piece("chambre", 11.1)
p2=Piece("sdbToilettes", 7)
p3=Piece("cuisine", 7)
p4=Piece("salon", 21.3)
print(p4.getNom(),p4.getSurface())
p1.setSurface(12.6)
a.ajouter(p1)
a.ajouter(p2)
a.ajouter(p3)
a.ajouter(p4)
print(a.getNom(),a.getListePieces())
print('nb pièces =', a.nbPieces(),', Surface totale =',a.SurfaceTotale())
# Dans la console Python
salon 21.3
appt25 [('chambre', 12.5), ('sdbToilettes', 7), ('cuisine', 7), ('salon', 21.3)]
nb pièces = 4 , Surface totale = 47.9
-
Finaliser la classe
Piece
: écrire les méthodes accesseurs et mutateurs de la classePiece
-
Finaliser la classe
Appartement
:
a. Ecrire la méthode qui permet d'ajouter une pièce (ajouter(self, piece)
) dans la liste des pièces présentes dans l'appartement.
b. Ecrire la méthode qui permet de retourner le nombre de pièces (nbPieces(self)
) présentes dans l'appartement.
c. Ecrire la méthodegetSurfaceTotale(self)
, qui renvoie la surface totale de l'appartement.
d. Ecrire la méthodegetlistePieces(self)
, qui renvoie la liste des pièces de l'appartement. - Créer un tableau qui classe les méthodes de ces deux classes suivant leur type :
Constructeurs | Accesseurs | Mutateurs | Autres | |
---|---|---|---|---|
Piece |
||||
Appartement |
Exercice 4
On donne ci-dessous le code en Python d’une classe nommée Toto. Chaque objet de cette classe a 3 attributs de type entier et dispose de 3 méthodes. Le code d’une de ces méthodes n’est pas complètement écrit.
class Toto:
def __init__(self, i, j, k):
self.att1 = i
self.att2 = j
self.att3 = k
def meth1(self):
tmp = self.att1
self.att1 = self.att2
self.att2 = tmp
def meth2(self):
return self.att3
def meth3(self, c):
# code à compléter
Toto
, dont les attributs att1
, att2
et att3
contiennent respectivement 1, 2 et 3. De même créer un objet de nom titi
de la même classe et contenant 2, 1 et 6 dans ses attributs att1
, att2
et att3
.
-
a. Quel est le nom de la méthode de la classe
Toto
qui échange les attributsatt1
etatt2
?
b. Compléter le code de la méthodemeth3
afin qu’elle prenne en argument l’entier c et qu’elle multiplie l’argumentatt3
parc
. -
Écrire la ligne de code permettant, à l’aide des méthodes de la classe
Toto
d’échanger les attributsatt1
etatt2
detiti
. -
Écrire la ligne de code permettant, à l’aide d’une méthode de la classe
Toto
de multiplier par 2 l’attributatt3
detoto
. -
Toutes les lignes de codes précédentes ayant été exécutées, que va afficher l’instruction print(
toto
==titi
) ? Expliquer.
Exercice 5
On considère une classe Personnage
représentant un personnage de Jeu.
Le plateau de jeu est représenté par un repère orthonormé à trois axes.
La position du joueur dans le plateau est repérée par ses attributs x
, y
, z
.
1) Ecrire un constructeur initialisant les mesures.
2) Ecrire les méthodes avance
, droite
et saute
permettant respectivement de faire avancer, aller à droite et sauter le personnage, c’est-à-dire d’augmenter de 1 respectivement x
, y
et z
.
3) Implémenter une autre méthode coord
renvoyant les coordonnées sous forme d’un triplet.
4) Essayer avec : Laura = Personnage(0, 0, 0)
Exercice 6
Voici un programme en Python :
import random
class Piece :
def alea(self) :
return random.randint(0, 1)
def moyenne(self, n):
tirage = []
for i in range (n) :
tirage.append(self.alea())
return sum(tirage) / n
p = Piece()
print(p.moyenne(100))
Expliquer en détail ce qu’il permet d’afficher.
Exercice 7
On considère une classe Carre
admettant la mesure des côtés d’un carré en attribut.
1) Ecrire un constructeur initialisant les mesures.
2) Ecrire les méthodes :
- perimetre
: permettant de retourner le périmètre du carré.
- aire
: permettant de retourner son aire.
3) Créer des exemples.