Menu
Coddy logo textTech

Récapitulatif : La boîte secrète

Fait partie de la section Object Oriented Programming du Journey C de Coddy — leçon 21 sur 61.

challenge icon

Défi

Facile

Construisons un module Box qui démontre une encapsulation complète. Votre boîte aura trois dimensions cachées — largeur, hauteur et profondeur — qui ne peuvent être accédées que par les fonctions que vous fournissez. C'est le modèle du pointeur opaque (opaque pointer pattern) en action !

Vous allez créer trois fichiers :

  • box.h : Votre interface publique. Déclarez un type Box opaque en utilisant uniquement une déclaration anticipée (forward declaration) — le corps de la structure reste caché. Déclarez ces fonctions :
    • create_box — prend trois entiers (largeur, hauteur, profondeur) et retourne un pointeur Box
    • destroy_box — libère la mémoire allouée
    • get_volume — prend un const Box * et retourne le volume (largeur × hauteur × profondeur)
    • set_dimensions — prend un pointeur Box et trois nouvelles valeurs de dimension, retourne un int (1 pour le succès, 0 si une dimension est négative ou nulle)
    Utilisez des gardes d'inclusion avec le symbole BOX_H.
  • box.c : Définissez la structure réelle struct Box avec trois membres cachés : int width, int height, et int depth. Implémentez les quatre fonctions. Votre constructeur doit allouer et initialiser la boîte. La fonction set_dimensions doit valider que les trois valeurs sont positives (supérieures à zéro) avant d'appliquer les changements — si une valeur échoue à la validation, rejetez l'ensemble de la mise à jour et retournez 0.
  • main.c : Démontrez votre boîte encapsulée en en créant une, en vérifiant son volume, en tentant des changements de dimensions (valides et invalides), et en nettoyant correctement.

Vous recevrez cinq entrées : la largeur initiale, la hauteur initiale, la profondeur initiale, suivies de trois nouvelles dimensions à tenter de définir (qui peuvent inclure des valeurs invalides).

Dans votre fichier principal, créez une Box avec les dimensions initiales et affichez son volume. Tentez ensuite de définir les nouvelles dimensions — affichez si la mise à jour a réussi et le volume résultant. Enfin, libérez la boîte et confirmez le nettoyage.

Affichez la sortie dans ce format :

Volume: {volume}
Set: {0 or 1}
Volume: {volume}
Destroyed

Par exemple, avec les entrées 2, 3, 4, 5, 5, 5, la sortie serait :

Volume: 24
Set: 1
Volume: 125
Destroyed

Avec les entrées 2, 3, 4, -1, 5, 5, la sortie serait :

Volume: 24
Set: 0
Volume: 24
Destroyed

Remarquez comment la validation dans set_dimensions protège votre boîte des états invalides — le code externe ne peut pas contourner vos règles car les dimensions sont complètement cachées derrière votre interface.

Essayez vous-même

#include <stdio.h>
#include "box.h"

int main() {
    // Lire les dimensions initiales
    int width, height, depth;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &depth);
    
    // Lire les nouvelles dimensions à tenter
    int new_w, new_h, new_d;
    scanf("%d", &new_w);
    scanf("%d", &new_h);
    scanf("%d", &new_d);
    
    // TODO: Créer une Box avec les dimensions initiales
    
    
    // TODO: Afficher le volume initial au format : "Volume: {volume}"
    
    
    // TODO: Tenter de définir de nouvelles dimensions et stocker le résultat
    
    
    // TODO: Afficher si la modification a réussi au format : "Set: {0 or 1}"
    
    
    // TODO: Afficher le volume résultant au format : "Volume: {volume}"
    
    
    // TODO: Détruire la box et afficher "Destroyed"
    
    
    return 0;
}

Toutes les leçons de Object Oriented Programming