Course Website
Cours : Jeudi 8h15–9h00, CM 1 4
Exercices : Jeudi 9h15–11h, INF 3, BC 07-08
Cette série a pour objectif de pratiquer l’usage de l’héritage, du sous-typage et du polymorphisme.
Avant de commencer cette série, il est prévu que vous ayez suivi le tutoriel de cette semaine :
Nous vous recommandons de créer un nouveau projet Python pour chaque série d’exercices. Cela vous permettra d’isoler plus facilement le contenu des différentes semaines.
Cette série contient 2 exercices :
Il s’agit dans cet exercice de proposer une conception modélisant une boîtes aux lettres.
Une boîte aux lettres recueille des lettres, des colis et des publicités.
Une lettre est caractérisée par :
Un colis est caractérisé par :
Une publicité est caractérisée par :
Voici les règles utilisées pour affranchir le courrier :
Les trois méthodes principales liées à la boîte aux lettre sont les suivantes :
frank()
permettant d’associer à chaque courrier de la boîte, le montant nécessaire pour l’affranchir (frank en anglais).
Cette méthode retournera le montant total d’affranchissement du courrier de la boîte.invalid_mails()
calculant et retournant le nombre de courriers invalides présents dans la boîte aux lettres.display()
qui retourne une list[str]
représentant le contenu de la boîte aux lettres tel qu’on l’afficherait à l’écran.
Chaque élément de la liste représente une ligne, correspondant à un courrier.
On veillera à inclure les informations utiles, y compris si le courrier est valide.Sur papier, commencez par lister les classes dont vous aurez besoin, ainsi que des relations d’héritage/sous-typage éventuelles, afin de mettre en œuvre la conception suggérée en tenant compte des contraintes mentionnées. Ensuite, implémentez et testez vos classes de manière adéquate.
Vos classes doivent éviter de dupliquer inutilement des méthodes ou des attributs. Lesquelles de vos classes devraient être muables ou immuables ?
Veillez à respecter le LSP.
Réflexion bonus : quel type de données est approprié pour représenter les prix ?
Avec toutes les nouvelles constructions en cours, la ville d’Écublens VD peine à gérer son cadastre. Par cadastre, on entend ici l’inventaire des bâtiments et de leurs propriétaires (c’est une simplification). Nous allons l’aider.
Il y a deux types de bâtiments (building) : les maisons (house) et les immeubles (appartment building).
Les maisons sont caractérisées par une surface habitable (en m²), un nombre de pièces, et une taille de jardin (en m²).
Les immeubles sont constitués de plusieurs appartments (appartment). Chaque appartement est caractérisé par une surface habitable (en m²), un nombre de pièces, et une taille de balcon (en m²).
Chaque bâtiment a un ou une propriétaire (owner), qui est une personne. Une personne est caractérisée par son nom complet. Une personne peut posséder plusieurs bâtiments.
Un bâtiment peut être vendu et donc changer de propriétaire. En revanche, on supposera qu’aucuns travaux ne seront nécessaires une fois les bâtiments construits.
La ville veut pouvoir calculer à combien taxer les propriétaires. Chaque bâtiment est taxé selon la formule suivante :
\[\text{Impôt} = \text{TauxA} \cdot \text{surface habitable} + \text{TauxB} \cdot \text{surface de jardin}\]Les valeurs cette années sont de $\text{TauxA} = 5.6$ et $\text{TauxB} = 1.5$. La surface habitable d’un immeuble est la somme des surfaces habitables de tous ses appartements.
Concevez et implémentez un système de classes permettant de représenter les concepts ci-dessus. La ville voudra pouvoir produire un raport de l’impôt à imputer à chaque propriétaire.
Sur papier, commencez par lister les classes dont vous aurez besoin, ainsi que des relations d’héritage/sous-typage éventuelles, afin de mettre en œuvre la conception suggérée en tenant compte des contraintes mentionnées.
Vos classes doivent éviter de dupliquer inutilement des méthodes ou des attributs. Lesquelles de vos classes et/ou de leurs attributs devraient être muables ou immuables ?
Veillez à respecter le LSP.