sio:bloc2:2a:td2

Ceci est une ancienne révision du document !


TD2 : Système de Gestion de Bibliothèque

Créez une classe Livre avec :

  1. Attributs privés : titre, auteur, isbn, disponible (boolean)
  2. Constructeur avec validation (ISBN ne peut pas être null/vide)
  3. Getters/setters appropriés
  4. Méthode emprunter() qui change le statut si disponible
  5. Méthode retourner() qui remet le livre disponible
  6. toString() bien formaté

Créez une classe LivreNumerique qui hérite de Livre :

  1. Attribut supplémentaire : tailleFichier (en Mo)
  2. Constructeur approprié
  3. Redéfinition de toString()
  4. Les livres numériques sont toujours disponibles (redéfinir emprunter())

Créez une exception personnalisée LivreIndisponibleException et modifiez la méthode emprunter() pour la lancer quand nécessaire.

Créez une classe Bibliotheque avec :

  1. Une ArrayList<Livre> privée
  2. Méthode ajouterLivre(Livre livre) avec gestion des doublons (même ISBN)
  3. Méthode emprunterLivre(String isbn) avec gestion d'exceptions
  4. Méthode listerLivresDisponibles() qui retourne une liste filtrée
  5. Méthode rechercherParAuteur(String auteur)

Créez une classe BibliothequeTest avec les tests JUnit suivants :

  1. testAjouterLivre() : vérifier l'ajout normal et la gestion des doublons
  2. testEmprunterLivreDisponible() : vérifier qu'un livre disponible peut être emprunté
  3. testEmprunterLivreIndisponible() : vérifier que l'exception est bien lancée
  4. testLivreNumeriqueToujours Disponible() : vérifier que les livres numériques restent disponibles
  5. testRechercherParAuteur() : vérifier le filtrage par auteur

Annotations à utiliser : `@Test`, `@BeforeEach` (pour initialiser une bibliothèque de test)Assertions à utiliser : assertEquals(), assertTrue(), assertThrows()

  • ✅ Encapsulation respectée
  • ✅ Héritage correct avec redéfinition
  • ✅ Constructeurs avec validation
  • ✅ Exception personnalisée utilisée
  • ✅ Collections manipulées correctement
  • ✅ Tests unitaires pertinents et réussis


@startuml
skinparam classAttributeIconSize 0
skinparam backgroundColor white

class Livre {
- titre: String
- auteur: String
- isbn: String
- disponible: boolean

+ Livre(titre: String, auteur: String, isbn: String)
+ getTitre(): String
+ getAuteur(): String
+ getIsbn(): String
+ isDisponible(): boolean
+ emprunter(): void
+ retourner(): void
+ toString(): String
}

class LivreNumerique {
- tailleFichier: double

+ LivreNumerique(titre: String, auteur: String, isbn: String, tailleFichier: double)
+ getTailleFichier(): double
+ emprunter(): void
+ toString(): String
}

class Bibliotheque {
- livres: ArrayList

+ ajouterLivre(livre: Livre): boolean
+ emprunterLivre(isbn: String): void
+ listerLivresDisponibles(): List
+ rechercherParAuteur(auteur: String): List
}

class LivreIndisponibleException {
+ LivreIndisponibleException(message: String)
}

class BibliothequeTest {
- bibliotheque: Bibliotheque

+ setUp(): void
+ testAjouterLivre(): void
+ testEmprunterLivreDisponible(): void
+ testEmprunterLivreIndisponible(): void
+ testLivreNumeriqueToujours Disponible(): void
+ testRechercherParAuteur(): void
}

LivreNumerique --|> Livre : hérite
Bibliotheque "1" *-- "0..*" Livre : contient
Bibliotheque ..> LivreIndisponibleException : throws
Exception <|-- LivreIndisponibleException : hérite
BibliothequeTest ..> Bibliotheque : teste

note right of LivreNumerique::emprunter
Redéfinition :
Les livres numériques
restent toujours disponibles
end note

note right of LivreIndisponibleException
Exception personnalisée
lancée quand un livre
n'est pas disponible
end note

@enduml

  • sio/bloc2/2a/td2.1757897563.txt.gz
  • Dernière modification : il y a 7 mois
  • de jcheron