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.
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.
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.