sio:bloc2:2a:td0

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
sio:bloc2:2a:td0 [2026/08/21 12:04] – [Points de vigilance] jcheronsio:bloc2:2a:td0 [2026/08/26 10:31] (Version actuelle) – jcheron
Ligne 272: Ligne 272:
 ---- ----
  
 +==== Héritage ====
  
 +<html><div class="imageB"></html>
 +<uml>
 +@startuml
 +
 +title Diagramme de classes - Gestion de caserne de pompiers (V3)
 +
 +abstract class Pompier {
 +  - matricule: String
 +  - nom: String
 +  - prenom: String
 +  - grade: String
 +  - disponible: boolean
 +  --
 +  + Pompier(matricule: String, nom: String, prenom: String, grade: String)
 +  --
 +  + isDisponible(): boolean
 +  + setDisponible(disponible: boolean): void
 +  + getMatricule(): String
 +  + getNom(): String
 +  + getPrenom(): String
 +  + getGrade(): String
 +  + toString(): String
 +}
 +
 +class PompierProfessionnel {
 +  - salaireBase: double
 +  --
 +  + PompierProfessionnel(matricule: String, nom: String, prenom: String, grade: String, salaireBase: double)
 +  --
 +  + getSalaireBase(): double
 +}
 +
 +class PompierVolontaire {
 +  - employeur: String
 +  - heureDebutTravail: LocalTime
 +  - heureFinTravail: LocalTime
 +  - quotaHeuresMensuel: int
 +  - heuresEffectueesMoisCourant: int
 +  --
 +  + PompierVolontaire(matricule: String, nom: String, prenom: String, grade: String, employeur: String, heureDebutTravail: LocalTime, heureFinTravail: LocalTime, quotaHeuresMensuel: int)
 +  --
 +  + isDisponible(): boolean
 +  + ajouterHeuresIntervention(heures: int): void
 +  - estEnHorairesTravail(): boolean
 +  + getEmployeur(): String
 +  + getHeuresEffectueesMoisCourant(): int
 +}
 +
 +Pompier <|-- PompierProfessionnel
 +Pompier <|-- PompierVolontaire
 +
 +class Caserne {
 +  - nomCaserne: String
 +  - pompiers: List<Pompier>
 +  --
 +  + Caserne(nomCaserne: String)
 +  --
 +  + ajouterPompier(p: Pompier): void
 +  + nombrePompiersDisponibles(): int
 +  + afficherEffectif(): void
 +  + rechercherParMatricule(matricule: String): Pompier
 +}
 +
 +Caserne "1" o-- "0..*" Pompier
 +
 +note on link
 +  Agrégation : le Pompier existe indépendamment de la Caserne
 +  (pas de dépendance dans le constructeur).
 +end note
 +
 +@enduml
 +
 +</uml>
 +<html></div></html>
 +
 +===== Evolutions =====
 +
 +==== Encapsulation ====
 +
 +  * Ajoutez à Pompier un attribut privé dateEmbauche: LocalDate, avec un getter getAnciennete(): int qui calcule le nombre d'années depuis dateEmbauche (pas de setter pour anciennete — elle ne doit jamais être stockée directement).
 +  * Ajoutez une méthode distanceVers(autre: Location): double dans Location, utilisant la formule de distance euclidienne simplifiée sur latitude/longitude. Utilisez-la dans Caserne pour écrire une méthode casernePlusProche(sinistre: Sinistre): boolean (nécessite que Caserne ait elle-même une Location — à ajouter).
 +
 +==== Héritage ====
 +Ajoutez à PompierProfessionnel une redéfinition de méthode manquante : une méthode calculerSalaireMensuel(): double dans Pompier (retournant 0 par défaut ou étant abstraite), redéfinie dans :
 +
 +  * PompierProfessionnel → salaireBase + prime d'ancienneté (2% par année de service)
 +  * PompierVolontaire → heuresEffectueesMoisCourant * tauxHoraire (il faudra ajouter tauxHoraire)
 +
 +Créer une classe Officier héritant de PompierProfessionnel avec :
 +  * un attribut primeCommandement: double
 +  * une redéfinition de calculerSalaireMensuel() qui appelle super.calculerSalaireMensuel() et ajoute la prime
 +  * une redéfinition de toString() qui appelle super.toString() et ajoute la mention du grade d'officier
 +
 +
 +Ajoutez à Pompier une méthode abstraite peutIntervenirSur(type: TypeSinistre): boolean. Chaque sous-classe la redéfinit :
 +
 +  * PompierProfessionnel → toujours true
 +  * PompierVolontaire → true sauf pour FUITE_GAZ (compétence non acquise, à simuler par une contrainte simple)
 +  * Officier → toujours true, et en plus logue dans la console qu'un officier prend le commandement
 +
 +Utilisez cette méthode dans Intervention.ajouterPompier() pour refuser l'ajout d'un pompier incompétent sur ce type de sinistre.
  • sio/bloc2/2a/td0.1787306662.txt.gz
  • Dernière modification : il y a 2 mois
  • de jcheron