Menu
CoddyTech

Propriétés pour l'encapsulation

Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy. Leçon 32 sur 70.

Les propriétés sont l’outil principal pour mettre en œuvre l’encapsulation en C#. Au lieu d’exposer directement les champs, vous les encapsulez dans des propriétés qui contrôlent la manière dont les données sont consultées et modifiées.

Le modèle associe un champ privé à une propriété publique qui inclut une validation ou une logique dans ses accesseurs :

public class Temperature
{
    private double celsius;
    
    public double Celsius
    {
        get { return celsius; }
        set
        {
            if (value < -273.15)
                celsius = -273.15;  // Minimum du zéro absolu
            else
                celsius = value;
        }
    }
}

Désormais, le code externe ne peut pas définir une température impossible. La propriété joue le rôle de gardienne, en veillant à ce que ton objet reste toujours dans un état valide. C’est l’encapsulation en action : les données internes sont protégées tout en restant accessibles par une interface contrôlée.

Tu peux aussi utiliser des propriétés pour calculer des valeurs ou déclencher des effets secondaires :

public double Fahrenheit
{
    get { return celsius * 9 / 5 + 32; }
    set { celsius = (value - 32) * 5 / 9; }
}

Le monde extérieur voit deux propriétés, mais, en interne, il n’y a qu’un seul champ. Les propriétés te permettent de modifier les détails de l’implémentation sans casser le code qui utilise ta classe — un avantage clé d’une bonne encapsulation.

challenge icon

Défi

Facile

Créons un système d’inventaire de produits qui utilise des propriétés pour protéger l’intégrité des données. Tu vas créer une classe où les prix ne peuvent jamais être négatifs et où les quantités restent toujours dans des limites valides — une démonstration de la façon dont les propriétés servent de gardiennes de tes données.

Tu vas organiser ton code dans deux fichiers :

  • Product.cs : crée une classe Product dans l’espace de noms Inventory qui gère les informations sur les produits en validant les données au moyen de propriétés. Ton produit a besoin des éléments suivants :
    • Un champ privé price (décimal) avec une propriété publique Price qui garantit que le prix ne descend jamais en dessous de 0 : si quelqu’un essaie de définir un prix négatif, la valeur enregistrée doit être 0
    • Un champ privé quantity (entier) avec une propriété publique Quantity qui maintient les valeurs entre 0 et 1000 : les valeurs inférieures à 0 deviennent 0, et les valeurs supérieures à 1000 deviennent 1000
    • Une propriété publique auto-implémentée Name (chaîne de caractères)
    • Une propriété calculée en lecture seule TotalValue qui renvoie Price * Quantity
    Ajoute un constructeur qui accepte le nom, le prix et la quantité (dans cet ordre) et définit toutes les valeurs au moyen des propriétés afin que la validation soit appliquée.
  • Program.cs : dans ton fichier principal, crée un Product à partir des valeurs saisies. Essaie ensuite de modifier le prix et la quantité à l’aide de valeurs supplémentaires qui pourraient être invalides. Affiche l’état du produit après sa création, puis après chaque modification, pour voir comment les propriétés protègent les données.

Tu recevras cinq entrées :

  • Nom du produit
  • Prix initial (décimal)
  • Quantité initiale (entier)
  • Nouveau prix à définir (décimal, qui peut être négatif)
  • Nouvelle quantité à définir (entier, qui peut être hors limites)

Affiche le résultat dans ce format :

After creation:
{Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
After modifications:
{Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}

Par exemple, si les entrées sont Laptop, 999.99, 50, -100 et 1500, le résultat devrait être :

After creation:
Laptop: Price=999.99, Qty=50, Total=49999.50
After modifications:
Laptop: Price=0, Qty=1000, Total=0

Remarque que le prix négatif est devenu 0 et que la quantité de 1500 a été limitée à 1000. Tes propriétés protègent l’objet contre les états invalides : c’est l’encapsulation en action !

Essayez vous-même

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // Lire les entrées
        string name = Console.ReadLine();
        decimal initialPrice = Convert.ToDecimal(Console.ReadLine());
        int initialQuantity = Convert.ToInt32(Console.ReadLine());
        decimal newPrice = Convert.ToDecimal(Console.ReadLine());
        int newQuantity = Convert.ToInt32(Console.ReadLine());

        // TODO: Créer un Product avec les valeurs initiales
        
        // TODO: Afficher l’état du produit après sa création
        Console.WriteLine("After creation:");
        // Format d’affichage : {Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
        
        // TODO: Modifier le prix et la quantité avec les nouvelles valeurs
        
        // TODO: Afficher l’état du produit après les modifications
        Console.WriteLine("After modifications:");
        // Format d’affichage : {Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C# en ligne