Aller au contenu

Exercices sur les classes et les exceptions

Thématique 1 : Commerce et Argent

Produit

  • Propriétés : Nom (string), Prix (double), Quantite (int).
  • Constructeur : Un constructeur qui accepte le nom, le prix et la quantité. La validation doit être faite ici.
  • Validation :
    • Le Prix ne peut pas être inférieur à 0.
    • La Quantite ne peut pas être négative.
    • Le Nom ne peut pas être une chaîne vide ou null.
    • La validation doit s'appliquer aussi dans les setters des propriétés si elles sont modifiables.
  • Action : Lever une ArgumentException si une des validations échoue.

CompteBancaire

  • Propriétés : Titulaire (string), Solde (decimal).
  • Constructeur : Un constructeur qui accepte le titulaire et un solde initial. Le solde initial doit être positif ou nul.
  • Méthodes : Deposer(montant) et Retirer(montant).
  • Validation :
    • Deposer : Le montant doit être positif.
    • Retirer : Le montant doit être positif et ne peut pas être supérieur au Solde. La méthode doit retourner false si le retrait échoue, ou lever une InvalidOperationException.
  • Note : Le Solde ne devrait avoir qu'un get public pour empêcher les modifications directes.

Facture

  • Propriétés : Numero (int), MontantTotal (double), Taxes (double).
  • Constructeur : Un constructeur qui initialise le Numero et le MontantTotal.
  • Validation :
    • Le Numero de facture doit être un entier positif.
    • Le MontantTotal doit être positif.
    • La propriété Taxes doit être validée dans son setter pour être comprise entre 0% et 50% du montant total.
  • Note : On pourrait aussi avoir une propriété calculée pour les taxes basée sur un taux fixe.

ArticleDeStock

  • Propriétés : CodeBarre (string), Poids (double).
  • Constructeur : Accepte le code-barre et le poids.
  • Validation :
    • Le CodeBarre doit avoir une longueur de 8 ou 12 caractères.
    • Le Poids doit être supérieur à 0.
    • La validation doit se faire dans le constructeur et les setters.

Thématique 2 : Géométrie et Physique

Rectangle

  • Propriétés : Largeur (double), Hauteur (double).
  • Propriété Calculée : Aire (n'a qu'un get, retourne Largeur * Hauteur).
  • Constructeur : Accepte la largeur et la hauteur.
  • Validation :
    • Dans les setters de Largeur et Hauteur, refuser toute valeur inférieure ou égale à 0. L'ancienne valeur est conservée ou une ArgumentException est levée.

Cercle

  • Propriété : Rayon (double).
  • Propriétés Calculées : Diametre (get retourne Rayon * 2), Aire (get retourne Math.PI * Rayon * Rayon).
  • Constructeur : Accepte le rayon.
  • Validation : Le Rayon doit être positif. La validation se fait dans le constructeur et le setter.

Thermostat

  • Propriété : Temperature (double, en degrés Celsius).
  • Constructeur : Accepte une température initiale.
  • Validation :
    • Dans le setter et le constructeur, la température ne peut pas être inférieure à -273.15 (zéro absolu) ni dépasser 5000.

Vitesse

  • Propriété : MetersPerSecond (double).
  • Constructeur : Accepte une vitesse initiale.
  • Validation :
    • Ne peut pas être négative.
    • Ne peut pas dépasser la vitesse de la lumière (299 792 458 m/s).
    • Validation à faire dans le constructeur et le setter.

Thématique 3 : Gestion de Personnes (RPG ou Réalité)

Etudiant

  • Propriété : NoteGlobale (int).
  • Constructeur : Accepte une note initiale.
  • Validation (Clamping) :
    • Dans le setter et le constructeur, la note est "clampée" (limitée) entre 0 et 100.
    • Si la valeur est supérieure à 100, elle est ramenée à 100.
    • Si la valeur est inférieure à 0, elle est ramenée à 0.

Employe

  • Propriétés : SalaireHoraire (decimal), HeuresTravaillees (int).
  • Constructeur : Accepte le salaire horaire et les heures travaillées.
  • Validation :
    • Le SalaireHoraire ne peut être inférieur au salaire minimum (ex: 15.00).
    • Les HeuresTravaillees ne peuvent dépasser 168 par semaine (ou être négatives).
    • Validation à faire dans le constructeur et les setters.

PersonnageRPG

  • Propriétés : Nom (string), PointsDeVie (int), Niveau (int).
  • Constructeur : Accepte le nom, les points de vie et le niveau.
  • Validation :
    • Le Niveau doit être entre 1 et 99 (clamping).
    • Les PointsDeVie ne peuvent pas être négatifs (ramener à 0 si une valeur négative est assignée).
    • Le Nom ne doit pas être vide.

Utilisateur

  • Propriétés : Identifiant (string), MotDePasse (string).
  • Constructeur : Accepte un identifiant et un mot de passe.
  • Validation :
    • L'Identifiant ne doit pas contenir d'espace.
    • Le MotDePasse doit faire au moins 8 caractères.
    • Lever une ArgumentException si la validation échoue dans le constructeur ou les setters.

Thématique 4 : Temps et Logique

Horloge

  • Propriétés : Heures (int), Minutes (int), Secondes (int).
  • Constructeur : Accepte les heures, minutes et secondes.
  • Validation :
    • Heures : Doit être entre 0 et 23.
    • Minutes / Secondes : Doit être entre 0 et 59.
    • Si une valeur invalide est assignée dans un setter, refuser la modification (lancer une exception ou ignorer).

DateSimplifiee

  • Propriétés : Jour (int), Mois (int), Annee (int).
  • Constructeur : Accepte le jour, le mois et l'année.
  • Validation (simplifiée) :
    • Mois : Doit être entre 1 et 12.
    • Jour : Doit être entre 1 et 31.
    • Annee : Ne peut être inférieure à 1900.
    • La validation doit être effectuée dans le constructeur et les setters.

Chronometre

  • Propriété : TempsEcoule (int, en secondes).
  • Constructeur : Initialise le temps à 0.
  • Méthodes : Reset() (remet à 0), Incrementer().
  • Validation : TempsEcoule ne peut être négatif. Le setter doit l'empêcher.

Thématique 5 : Objets Mécaniques / Divers

Batterie

  • Propriété : NiveauCharge (int).
  • Constructeur : Accepte un niveau de charge initial (entre 0 et 100).
  • Méthode : Charger(int pourcentage) qui additionne la charge sans dépasser 100.
  • Validation (Clamping) :
    • NiveauCharge est clampé entre 0 et 100 dans le constructeur et le setter.

Ascenseur

  • Champs statiques : EtageMin = -2, EtageMax = 10.
  • Propriété : EtageCourant (int).
  • Constructeur : Initialise l'ascenseur à un étage de départ (par défaut 0).
  • Méthode : AllerA(int etage).
  • Validation :
    • La méthode AllerA doit vérifier que l'étage demandé est dans les limites (EtageMin, EtageMax). Si ce n'est pas le cas, lancer une ArgumentOutOfRangeException.
    • Le setter de EtageCourant doit aussi faire cette validation.

ReservoirVoiture

  • Propriétés : Capacite (double), NiveauActuel (double).
  • Constructeur : Accepte la capacité et le niveau actuel. La capacité doit être positive et le niveau actuel ne peut excéder la capacité.
  • Méthode : AjouterEssence(double quantite).
  • Validation (Clamping) :
    • Le NiveauActuel ne peut jamais dépasser la Capacite. Si on essaie de mettre plus, le niveau est plafonné à la Capacite.
    • Le niveau ne peut être négatif.

Livre

  • Propriétés : Titre (string), NombreDePages (int).
  • Constructeur : Accepte le titre et le nombre de pages.
  • Validation :
    • NombreDePages : Doit avoir au moins 1 page.
    • Titre : S'il est null ou vide, il doit être remplacé par "Titre Inconnu".
    • Validation à faire dans le constructeur et les setters.

Bouteille

  • Propriétés : EstOuverte (bool), ContenuEnMl (double).
  • Constructeur : Accepte le contenu initial et si la bouteille est ouverte.
  • Méthodes : Ouvrir(), Fermer(), Vider(double quantite).
  • Validation :
    • On ne peut appeler Vider que si EstOuverte est true. Sinon, lever une InvalidOperationException.
    • Vider ne peut pas retirer plus de liquide qu'il n'y en a.