Menu
Coddy logo textTech

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 implémenter l'encapsulation en C#. Au lieu d'exposer directement les champs, vous les enveloppez avec des propriétés qui contrôlent la manière dont les données sont accédées et modifiées.

Le modèle combine un champ privé avec 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é agit comme un garde-barrière, garantissant que votre 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 via une interface contrôlée.

Vous pouvez également 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 vous permettent de modifier les détails d'implémentation sans casser le code qui utilise votre classe — un avantage clé d'une encapsulation appropriée.

challenge icon

Défi

Facile

Construisons un système d’inventaire de produits qui utilise des propriétés pour garantir l’intégrité des données. Vous allez créer une classe dans laquelle les prix ne peuvent jamais devenir négatifs et les quantités restent toujours dans des limites valides — démontrant ainsi comment les propriétés servent de gardiennes pour vos données.

Vous organiserez votre code sur deux fichiers :

  • Product.cs : créez une classe Product dans l’espace de noms Inventory qui gère les informations sur les produits avec une validation via des propriétés. Votre produit doit comporter :
    • un champ privé price (decimal) avec une propriété publique Price qui garantit que le prix ne soit jamais inférieur à 0 — si quelqu’un essaie de définir un prix négatif, la valeur stockée doit être 0 à la place
    • un champ privé quantity (int) 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 implémentée automatiquement Name (string)
    • une propriété calculée en lecture seule TotalValue qui renvoie Price * Quantity
    Incluez un constructeur qui accepte le nom, le prix et la quantité (dans cet ordre) et qui définit toutes les valeurs via les propriétés afin que la validation soit appliquée.
  • Program.cs : dans votre fichier principal, créez un Product à l’aide des valeurs saisies. Essayez ensuite de modifier le prix et la quantité avec des valeurs supplémentaires qui peuvent être invalides. Affichez l’état du produit après sa création et après chaque modification afin d’observer comment les propriétés protègent les données.

Vous recevrez cinq entrées :

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

Affichez la sortie 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, la sortie doit être :

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

Remarquez comment le prix négatif est devenu 0 et comment la quantité de 1500 a été limitée à 1000. Vos 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 en utilisant les valeurs initiales
        
        // TODO: Afficher l'état du produit après la 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