{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Programmation orientée objet _ Exercices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercice 1 : une Voiture\n", "On considère une classe dont le code en python est le suivant :" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "class Voiture :\n", " def __init__(self, annee, coul, vmax) :\n", " self.annee = annee \n", " self.couleur = coul\n", " self.vitesse_max = vmax\n", " self.age = 2025 - self.annee\n", "\n", " def petite_annonce(self) :\n", " return \"À vendre voiture \"+ str(self.couleur)+ \" de \" + str(self.annee) +\\\n", " \", vitesse maximale \"+ str(self.vitesse_max)+ \" km/h.\"" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "1. Quels sont les attributs des instances de cette classe ? Quelles sont les méthodes ?\n", "....." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

2. Le type des attributs n'est pas documenté dans le code ni le rôle de la méthode.\n", " \n", " Proposer une documentation.

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

3. Ecrire dans la cellule qui suit le code nécessaire à la création d'un objet `ma_voiture` datant de 1957, de couleur grise et roulant à 110 km/h maximum.

\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Appliquer la méthode `petite_annonce` à cette instance.

\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Exercice 2 Les Elèves

\n", "\n", "
    \n", "
  1. Écrire une classe Eleve dont les objets possèdent les attributs prenom, classe, age.
  2. \n", "
  3. Instancier trois élèves de cette classe.
  4. \n", "
  5. Ajouter à cette classe une méthode est_majeur qui renvoie True si l'élève est majeur et False sinon.
  6. \n", "
  7. Testez si tout fonctionne !
  8. \n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class Eleve:\n", " pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# instanciation de 3 èleves" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# scénario de test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercice 3 Une Alarme\n", "Une alarme est un système qui émet un son lorsqu'elle est armée et déclenchée.\n", "Par défaut l'alarme est armée mais on peut la désarmer. Dans ce cas elle n'émettra pas de son si on la déclenche.\n", "\n", "On souhaite écrire une classe Alarme qui ait le comportement suivant :
\n", "```python\n", ">>> mon_alarme = Alarme (\"Pin Pon Pin Pon Pin Pon\")\n", ">>> mon_alarme.declencher()\n", "Pin Pon Pin Pon Pin Pon\n", ">>> mon_alarme.desarmer()\n", ">>> mon_alarme.declencher() # rien ne se passe car l'alarme est désarmée\n", "```\n", "\n", "1. Quels sont les attributs et les méthodes des instances de cette classe ?
\n", "2. Ecrire la classe
\n", "3. Compléter le code des méthodes.
\n", "4. Proposer un scénario de test " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "question 1 : " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class Alarme:\n", " pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#tests" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercice 4 La serrure.\n", "Une serrure fonctionne avec un code secret qui est une séquence de 4 chiffres. La serrure peut être verrouillée ou déverrouillée. Pour déverrouiller la serrure il faut fournir le bon code." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " 1. Ecrire une classe Serrure.\n", " Cette classe doit implémenter les méthodes \n", " - `verrouiller()` met la serrure en etat verrouillee,\n", " - `deverrouiller(code) ` deverrouille la serrure si le code est egale au code secret. \n", " \n", " renvoie True si le deverrouillage a réussi, False sinon\n", " - `changer_code_secret(code)` remplace le code secret par code si c'est un code valide,\n", " renvoie True si le changement a réussi, False sinon\n", " \n", " Cette classe doit permettre d'écrire le code suivant :\n", " ```python\n", " >>> ma_serrure = Serrure(1925) # le code de la serrure est 1925\n", " >>> ma_serrure.verrouillee # etat de la serrure \n", " True\n", " >>> ma_serrure.deverrouiller(1965) # tentative de deverrouillage\n", " False\n", "```\n", " \n", " 2. Compléter le code de chaque méthode.\n", " 3. Documenter le code\n", " 4. Proposer un petit scénario de test" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Question 1 , 2 et 3" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Question 4\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Exercice 5 : Une classe Temps

\n", "

On souhaite créer une classe Temps définissant des objets de type Temps définis par des heures, minutes, secondes.
On souhaite également pouvoir :

\n", "" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# écriture de la classe\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#tests\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercice 6 Le coffre fort.\n", "Un coffre fort contient un montant. Ce montant est nul si le coffre est vide.\n", "Le coffre peut être ouvert ou fermé.\n", "Si le coffre est ouvert, on peut le consulter, y déposer de l’argent ou en retirer.\n", "Si le coffre est fermé, ces opérations sont impossibles.\n", "On ne peut pas retirer plus que ce que contient le coffre.\n", "\n", " 1. Compléter le code de la classe Coffre\n", " " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "class Coffre :\n", " \"\"\" Une classe pour les coffres-forts \n", " attributs : \n", " ouvert : bool \n", " contenu : float\n", " \"\"\" \n", " \n", " def __init__(self, montant) :\n", " \"\"\" Coffre(montant) , crée un coffre fermé avec montant comme contenu initial \"\"\"\n", " assert montant >=0 # Le montant initial doit être positif ou nul\n", " self.ouvert = False # par défaut le coffre est fermé\n", " self.contenu = montant\n", " \n", " def ouvrir(self) :\n", " \"\"\" met le coffre en etat ouvert \"\"\"\n", " self.ouvert = True\n", " pass\n", " \n", " def fermer(self) :\n", " \"\"\" met le coffre en etat fermé \"\"\"\n", " pass\n", " \n", " def consulter(self) :\n", " \"\"\" donne le contenu du coffre s'il est ouvert, -1 sinon\"\"\"\n", " pass\n", " \n", " def deposer(self, montant) :\n", " \"\"\"ajoute le montant au contenu si le coffre est ouvert. Renvoie le montant déposé (0 si fermé) \"\"\"\n", " pass\n", " \n", " def retirer(self, montant) :\n", " \"\"\" retire le montant du coffre s'il est ouvert . Renvoie le montant déposé (0 si fermé) \"\"\"\n", " pass\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " 2. Ecrire un scénario utilisant cette classe pour tester les différentes méthodes.\n", " " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# scénario " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" } }, "nbformat": 4, "nbformat_minor": 2 }