Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| sio:bloc2:2a:td0 [2026/08/17 11:03] – créée jcheron | sio:bloc2:2a:td0 [2026/08/26 10:31] (Version actuelle) – jcheron | ||
|---|---|---|---|
| Ligne 2: | Ligne 2: | ||
| ===== Encapsulation, | ===== Encapsulation, | ||
| + | < | ||
| <uml> | <uml> | ||
| @startuml | @startuml | ||
| - | title Diagramme de classes - Gestion de caserne de pompiers (partie encapsulation) | + | title Diagramme de classes - Gestion de caserne de pompiers (V1) |
| class Pompier { | class Pompier { | ||
| Ligne 56: | Ligne 57: | ||
| </ | </ | ||
| + | < | ||
| + | ===== Associations ===== | ||
| + | |||
| + | < | ||
| + | <uml> | ||
| + | @startuml | ||
| + | |||
| + | title Diagramme de classes - Gestion de caserne de pompiers (V2) | ||
| + | |||
| + | enum TypeSinistre { | ||
| + | INCENDIE | ||
| + | ACCIDENT | ||
| + | INONDATION | ||
| + | FUITE_GAZ | ||
| + | SAUVETAGE | ||
| + | } | ||
| + | |||
| + | enum NiveauGravite { | ||
| + | FAIBLE | ||
| + | MODERE | ||
| + | ELEVE | ||
| + | CRITIQUE | ||
| + | } | ||
| + | |||
| + | class Pompier { | ||
| + | - nom: String | ||
| + | - prenom: String | ||
| + | - matricule: String | ||
| + | - grade: String | ||
| + | - anneesService: | ||
| + | - disponible: boolean | ||
| + | -- | ||
| + | + Pompier() | ||
| + | + Pompier(nom: | ||
| + | + Pompier(nom: | ||
| + | -- | ||
| + | + getNom(): String | ||
| + | + getPrenom(): | ||
| + | + getMatricule(): | ||
| + | + getGrade(): String | ||
| + | + getAnneesService(): | ||
| + | + isDisponible(): | ||
| + | + setGrade(grade: | ||
| + | + setAnneesService(anneesService: | ||
| + | + setDisponible(disponible: | ||
| + | + augmenterAnciennete(): | ||
| + | + augmenterAnciennete(nbAnnees: | ||
| + | + augmenterAnciennete(nbAnnees: | ||
| + | + afficherFiche(): | ||
| + | + toString(): String | ||
| + | } | ||
| + | |||
| + | class Caserne { | ||
| + | - nomCaserne: String | ||
| + | - pompiers: List< | ||
| + | -- | ||
| + | + Caserne(nomCaserne: | ||
| + | -- | ||
| + | + ajouterPompier(p: | ||
| + | + retirerPompier(matricule: | ||
| + | + nombrePompiersDisponibles(): | ||
| + | + afficherEffectif(): | ||
| + | + rechercherParMatricule(matricule: | ||
| + | } | ||
| + | |||
| + | class Location { | ||
| + | - adresse: String | ||
| + | - ville: String | ||
| + | - codePostal: String | ||
| + | - latitude: double | ||
| + | - longitude: double | ||
| + | -- | ||
| + | + Location(adresse: | ||
| + | + Location(adresse: | ||
| + | -- | ||
| + | + getAdresse(): | ||
| + | + getVille(): String | ||
| + | + getCodePostal(): | ||
| + | + getLatitude(): | ||
| + | + getLongitude(): | ||
| + | + toString(): String | ||
| + | } | ||
| + | |||
| + | class Sinistre { | ||
| + | - type: TypeSinistre | ||
| + | - niveauGravite: | ||
| + | - dateDeclaration: | ||
| + | - location: Location | ||
| + | -- | ||
| + | + Sinistre(type: | ||
| + | -- | ||
| + | + getType(): TypeSinistre | ||
| + | + getNiveauGravite(): | ||
| + | + getDateDeclaration(): | ||
| + | + getLocation(): | ||
| + | + toString(): String | ||
| + | } | ||
| + | |||
| + | class Intervention { | ||
| + | - dateDebut: LocalDateTime | ||
| + | - dateFin: LocalDateTime | ||
| + | - sinistre: Sinistre | ||
| + | - pompiersMobilises: | ||
| + | -- | ||
| + | + Intervention(sinistre: | ||
| + | -- | ||
| + | + ajouterPompier(p: | ||
| + | + terminerIntervention(): | ||
| + | + dureeIntervention(): | ||
| + | + afficherRapport(): | ||
| + | } | ||
| + | |||
| + | Caserne " | ||
| + | |||
| + | note on link | ||
| + | Agrégation : le Pompier existe indépendamment de la Caserne | ||
| + | (pas de dépendance dans le constructeur). | ||
| + | end note | ||
| + | |||
| + | Sinistre " | ||
| + | |||
| + | note on link | ||
| + | Composition : la Location n'a de sens | ||
| + | qu'à travers le Sinistre. | ||
| + | end note | ||
| + | |||
| + | Sinistre " | ||
| + | Sinistre " | ||
| + | |||
| + | Intervention " | ||
| + | |||
| + | note on link | ||
| + | Agrégation : le Sinistre peut exister | ||
| + | avant qu'une intervention soit déclenchée. | ||
| + | end note | ||
| + | |||
| + | Intervention " | ||
| + | |||
| + | note on link | ||
| + | Agrégation : les pompiers mobilisés | ||
| + | existent indépendamment de l' | ||
| + | end note | ||
| + | |||
| + | |||
| + | @enduml | ||
| + | |||
| + | </ | ||
| + | < | ||
| + | |||
| + | ===== Descriptif des méthodes - Location, Sinistre, Intervention ===== | ||
| + | |||
| + | ==== Location ==== | ||
| + | |||
| + | === Constructeurs === | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | === Getters === | ||
| + | |||
| + | Un par attribut ('' | ||
| + | |||
| + | === toString() === | ||
| + | |||
| + | Retourne une chaîne lisible, ex : "12 rue des Lilas, 75001 Paris" | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Sinistre ==== | ||
| + | |||
| + | === Constructeur === | ||
| + | |||
| + | * '' | ||
| + | |||
| + | === Getters === | ||
| + | |||
| + | * '' | ||
| + | |||
| + | Pas de setters : un sinistre déclaré ne change pas de nature. | ||
| + | |||
| + | === toString() === | ||
| + | |||
| + | Doit afficher une synthèse : type, gravité, date, localisation. Ex : | ||
| + | |||
| + | [INCENDIE] Gravité : ELEVE - déclaré le 21/08/2026 à 10:32 - 12 rue des Lilas, Paris | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Intervention ==== | ||
| + | |||
| + | === Constructeur === | ||
| + | |||
| + | * '' | ||
| + | |||
| + | === ajouterPompier(Pompier p): void === | ||
| + | |||
| + | Ajoute un pompier à la liste '' | ||
| + | |||
| + | === terminerIntervention(): | ||
| + | |||
| + | * Fixe '' | ||
| + | * Repasse chaque pompier de '' | ||
| + | * Éventuellement afficher un message de confirmation. | ||
| + | |||
| + | === dureeIntervention(): | ||
| + | |||
| + | Calcule la durée en minutes entre '' | ||
| + | |||
| + | === afficherRapport(): | ||
| + | |||
| + | Affiche une synthèse complète de l' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Héritage ==== | ||
| + | |||
| + | < | ||
| + | <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: | ||
| + | -- | ||
| + | + isDisponible(): | ||
| + | + setDisponible(disponible: | ||
| + | + getMatricule(): | ||
| + | + getNom(): String | ||
| + | + getPrenom(): | ||
| + | + getGrade(): String | ||
| + | + toString(): String | ||
| + | } | ||
| + | |||
| + | class PompierProfessionnel { | ||
| + | - salaireBase: | ||
| + | -- | ||
| + | + PompierProfessionnel(matricule: | ||
| + | -- | ||
| + | + getSalaireBase(): | ||
| + | } | ||
| + | |||
| + | class PompierVolontaire { | ||
| + | - employeur: String | ||
| + | - heureDebutTravail: | ||
| + | - heureFinTravail: | ||
| + | - quotaHeuresMensuel: | ||
| + | - heuresEffectueesMoisCourant: | ||
| + | -- | ||
| + | + PompierVolontaire(matricule: | ||
| + | -- | ||
| + | + isDisponible(): | ||
| + | + ajouterHeuresIntervention(heures: | ||
| + | - estEnHorairesTravail(): | ||
| + | + getEmployeur(): | ||
| + | + getHeuresEffectueesMoisCourant(): | ||
| + | } | ||
| + | |||
| + | Pompier <|-- PompierProfessionnel | ||
| + | Pompier <|-- PompierVolontaire | ||
| + | |||
| + | class Caserne { | ||
| + | - nomCaserne: String | ||
| + | - pompiers: List< | ||
| + | -- | ||
| + | + Caserne(nomCaserne: | ||
| + | -- | ||
| + | + ajouterPompier(p: | ||
| + | + nombrePompiersDisponibles(): | ||
| + | + afficherEffectif(): | ||
| + | + rechercherParMatricule(matricule: | ||
| + | } | ||
| + | |||
| + | Caserne " | ||
| + | |||
| + | note on link | ||
| + | Agrégation : le Pompier existe indépendamment de la Caserne | ||
| + | (pas de dépendance dans le constructeur). | ||
| + | end note | ||
| + | |||
| + | @enduml | ||
| + | |||
| + | </ | ||
| + | < | ||
| + | |||
| + | ===== Evolutions ===== | ||
| + | |||
| + | ==== Encapsulation ==== | ||
| + | |||
| + | * Ajoutez à Pompier un attribut privé dateEmbauche: | ||
| + | * Ajoutez une méthode distanceVers(autre: | ||
| + | |||
| + | ==== Héritage ==== | ||
| + | Ajoutez à PompierProfessionnel une redéfinition de méthode manquante : une méthode calculerSalaireMensuel(): | ||
| + | |||
| + | * PompierProfessionnel → salaireBase + prime d' | ||
| + | * PompierVolontaire → heuresEffectueesMoisCourant * tauxHoraire (il faudra ajouter tauxHoraire) | ||
| + | |||
| + | Créer une classe Officier héritant de PompierProfessionnel avec : | ||
| + | * un attribut primeCommandement: | ||
| + | * 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' | ||
| + | |||
| + | |||
| + | Ajoutez à Pompier une méthode abstraite peutIntervenirSur(type: | ||
| + | |||
| + | * 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' | ||