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 ?

Énoncé: Exercice 4 · Bac Numérique et Sciences Informatiques Métropole 1 remplacement 2021

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