Exercice 4 · Bac Numérique et Sciences Informatiques Métropole 1 remplacement 2021
Thème : Programmation orientée objet : classes, attributs, méthodes · Tiré du sujet Métropole France 1 remplacement (2021)
Énoncé
Exercice 4 (4 points)
Principaux thèmes abordés: Structure de données (programmation objet) et langages et programmation (spécification).
La société LOCAVACANCES doit gérer la réservation de l'ensemble des chambres de ses gîtes. Chaque chambre d'un même complexe sera différenciée par son nom.
Pour cela, d'un point de vue informatique, on a créé deux classes: Chambre et Gite dont le code est donné dans l'annexe 1 de l'exercice 4.
Exercice 4 - Annexe 1
class Chambre:
def __init__(self, nom: str):
self._nom = nom
self._occupation = [False for i in range(365)]
def get_nom(self):
return self._nom
def get_occupation(self):
return self._occupation
def reserver(self, date: int):
self._occupation[date - 1] = True
class Gite:
def __init__(self, nom: str):
self._nom = nom
self._chambres = []
def __str__(self):
n = len(self._chambres)
if n == 0:
return "L'hôtel " + self._nom + " n'a aucune chambre."
else:
return "L'hôtel " + self._nom + " a " + str(n) + " chambre(s)"
def get_chambres(self):
return self._chambres
def get_nchambres(self):
return [ch.get_nom() for ch in self._chambres]
def ajouter_chambres(self, nom_ch: str):
self._chambres.append(Chambre(nom_ch))
def mystere(self, date):
l_ch = []
for ch in self._chambres:
if ch.get_occupation()[date - 1] == False:
l_ch.append(ch.get_nom())
return(l_ch)
Partie A - Étude de la classe Chambre:
1.
Lister les attributs en donnant leur type. Préciser s'ils sont modifiables dans la classe, en explicitant la méthode associée.
2.
Écrire un assert dans la méthode reserver pour vérifier si le nombre date passé en paramètre est bien compris entre 1 et 365 (on ne gère pas les années bissextiles).
3.
Écrire la méthode AnnulerReserver(self, date: int) qui annule la réservation pour le jour date.
Partie B - Étude de la classe Gite:
Le gîte « BonneNuit » a 5 chambres dénommées:
'Ch1', 'Ch2', 'Ch3', 'Ch4', 'Ch5'
On définit l'objet GiteBN par l'instruction: GiteBN = Gite("BonneNuit").
1.
Méthode ajouter_chambres()
Écrire l'instruction Python pour ajouter 'Ch1' à l'objet GiteBN.
Dans les questions suivantes 2, 3 et 4, on considère que l'objet GiteBN contient toutes les chambres du gîte « BonneNuit ».
2.
La méthode ajouter_chambres permet d'enregistrer une nouvelle chambre, mais elle ne teste pas si le nom de cette chambre existe déjà.
Modifier la méthode pour éviter cet éventuel doublon.
3.
Étude des méthodes: get_chambres() et get_nchambres()
a) Parmi les 4 propositions ci-dessous, quel est le type renvoyé par l'instruction Python: GiteBN.get_chambres()
b) Qu'affiche la suite d'instructions suivante ?
Ch = GiteBN.get_chambres()[1]
print(Ch.get_nom())
c) Quelle différence existe-t-il entre les deux méthodes get_nchambres() et get_chambres() ?
4.
Les chambres 'Ch1', 'Ch3', 'Ch5' sont réservées pour tout le mois de Janvier 2021.
La méthode mystere étant précisée dans l'annexe 1 de l'exercice 4, répondre aux questions suivantes:
a) Que va renvoyer l'instruction GiteBN.mystere(3) ?
b) Dans la méthode mystère, quel est le type des variables en paramètre et en sortie ? Quelles sont les méthodes ou attributs dont elle a besoin ?

Corrigé
Corrigé proposé par AprenAI (non officiel)
1. Lister les attributs en donnant leur type. Préciser s'ils sont modifiables dans la classe, en explicitant la méthode associée.
Réponse : Les attributs de la classe Chambre sont : - `_nom` : de type `str` (chaîne de caractères). Il n'est pas modifiable dans la classe (aucun mutateur / setter défini). - `_occupation` : de type `list` de booléens (`bool`) de longueur 365. Il est modifiable via la méthode `reserver(self, date: int)` qui passe la valeur de l'élément à l'index `date - 1` à `True`.
2. Écrire un assert dans la méthode reserver pour vérifier si le nombre date passé en paramètre est bien compris entre 1 et 365 (on ne gère pas les années bissextiles).
Réponse : ```python assert 1 <= date <= 365 ```
3. Écrire la méthode AnnulerReserver(self, date : int) qui annule la réservation pour le jour date.
Réponse : ```python def AnnulerReserver(self, date: int): self._occupation[date - 1] = False ```
1. Méthode ajouter_chambres() : Écrire l'instruction Python pour ajouter 'Ch1' à l'objet GiteBN.
Réponse : ```python GiteBN.ajouter_chambres('Ch1') ```
2. Modifier la méthode ajouter_chambres pour éviter cet éventuel doublon.
Réponse : ```python def ajouter_chambres(self, nom_ch : str): if nom_ch not in self.get_nchambres(): self._chambres.append(Chambre(nom_ch)) ```
Les réponses des 5 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium
Résous-le ici : correction automatique, indices et corrigé détaillé.
‹ Exercice 5 - Questions 1 à 4 : Programmation orie… · Métropole 2022 (sujet 2) · Exercice 1 - Programmation orientée objet · Métropole 2021 (sujet 2) ›
Plus d’exercices de Programmation orientée objet : classes, attributs, méthodes
- Exercice 3 - Partie A · Métropole 2024 (sujet 2)
- Exercice 3 · Métropole 2023 (sujet 1)
- Exercice 5 · Métropole 2022 (sujet 1)
- Exercice 2 - POO · Métropole 1 remplacement 2022
- Exercice 5 - Questions 1 à 4 : Programmation orie… · Métropole 2022 (sujet 2)
- Exercice 1 - Programmation orientée objet · Métropole 2021 (sujet 2)
- Exercice 4 - POO · Métropole 2 remplacement 2021