SD2 - Programmation Orientée Objet
Exercice 1
Utilisation d’objets
Voici la classe
Cartedont on vous donne les en-têtes de méthodes :
class Carte:
couleurs = ('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 __init__(self, nom, couleur):
# Affectation de l'attribut nom et de l'attribut couleur
assert nom in Carte.noms,"le nom n'existe pas"
assert couleur in Carte.couleurs, "la couleur n'existe pas"
self.nom = nom
self.couleur = couleur
def setNom(self, nom):
# Mutateur de l'attribut nom (de la liste noms)
self.__init__(nom, self.couleur)
pass
def getNom(self):
# renvoie le nom de la carte (de la liste noms): Accesseur
return self.nom
def getCouleur(self):
# renvoie la couleur de la carte (de la liste couleur): Accesseur
return self.couleur
def getValeur(self):
# renvoie la valeur de la carte (du dictionnaire valeurs) : Accesseur
return Carte.valeurs[self.nom]
def egalite(self, carte):
''' Renvoie True si les cartes self et carte ont même valeur, False sinon
carte: Objet de type Carte '''
return Carte.valeurs[self.nom] == Carte.valeurs[carte.nom]
def estSuperieureA(self, carte):
''' Renvoie True si la valeur de self est supérieure à celle de carte,
False sinon
carte: Objet de type Carte
'''
return Carte.valeurs[self.nom] > Carte.valeurs[carte.nom]
def estInferieureA(self, carte):
''' Renvoie True si la valeur de self est inférieure à celle de carte,
False sinon
carte: Objet de type Carte
'''
return Carte.valeurs[self.nom] < Carte.valeurs[carte.nom]
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
PieceetAppartement, 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
PieceetAppartementde 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
Totoqui échange les attributsatt1etatt2?
b. Compléter le code de la méthodemeth3afin qu’elle prenne en argument l’entier c et qu’elle multiplie l'attributatt3parc. -
Écrire la ligne de code permettant, à l’aide des méthodes de la classe
Totod’échanger les attributsatt1etatt2detiti. -
Écrire la ligne de code permettant, à l’aide d’une méthode de la classe
Totode multiplier par 2 l’attributatt3detoto. -
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.