Récapitulatif : La boîte secrète
Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 21 sur 61.
Défi
FacileConstruisons un module Box qui démontre un encapsulation complète. Votre boîte aura trois dimensions cachées, width, height et depth, qui ne pourront être accessibles qu’au moyen des fonctions que vous fournissez. Voici le modèle complet du pointeur opaque en action !
Vous allez créer trois fichiers :
box.h: votre interface publique. Déclarez un typeBoxopaque en utilisant uniquement une déclaration anticipée : le corps de la structure reste caché. Déclarez ces fonctions :create_box: prend trois entiers (width, height, depth) et renvoie un pointeur vers une Boxdestroy_box: libère la mémoire allouéeget_volume: prend unconst Box *et renvoie le volume (width × height × depth)set_dimensions: prend un pointeur vers une Box et trois nouvelles valeurs de dimension, et renvoieint(1 en cas de réussite, 0 si une dimension est négative ou nulle)
BOX_H.box.c: définissez lastruct Boxréelle avec trois membres cachés :int width,int heightetint depth. Implémentez les quatre fonctions. Votre constructeur doit allouer et initialiser la boîte. La fonctionset_dimensionsdoit vérifier que les trois valeurs sont positives (supérieures à zéro) avant d’appliquer les modifications ; si une valeur échoue à la validation, refusez la mise à jour entière et renvoyez 0.main.c: démontrez votre Box encapsulée en en créant une, en vérifiant son volume, en tentant de modifier ses dimensions (avec des valeurs valides et invalides), puis en effectuant correctement le nettoyage.
Vous recevrez cinq entrées : la largeur initiale, la hauteur initiale, la profondeur initiale, suivies de trois nouvelles dimensions à 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 ainsi que le volume obtenu. Enfin, libérez la boîte et confirmez le nettoyage.
Affichez la sortie dans ce format :
Volume: {volume}
Set: {0 or 1}
Volume: {volume}
DestroyedPar exemple, avec les entrées 2, 3, 4, 5, 5, 5, la sortie serait :
Volume: 24
Set: 1
Volume: 125
DestroyedAvec les entrées 2, 3, 4, -1, 5, 5, la sortie serait :
Volume: 24
Set: 0
Volume: 24
DestroyedRemarquez comment la validation dans set_dimensions protège votre boîte contre les é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 à essayer
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 les nouvelles dimensions et stocker le résultat
// TODO: Afficher si la définition 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 Programmation Orientée Objet
1Bases de la programmation modulaire
Fichiers d'en-têteGardes d'inclusionFichiers sourcesFonctions statiquesRécapitulatif : Calculatrice modulaire4Encapsulation
Concept des pointeurs opaquesDéfinir des structures opaquesGetters et settersValidation dans les settersRécapitulatif : La boîte secrète2Objets et méthodes
Structs comme objetsLe pointeur 'Self'Rigueur du mot-clé constPointeur vs ValeurMéthodes utilitairesRécapitulatif : Point Manager5Projet : Compte bancaire simple
Configuration du projetImplémentation du compte8Polymorphisme
Pointeurs de fonctions dans les structuresSimulation de méthodesLe concept d'interfaceImplémentation d'interfacesItération polymorphiqueRécapitulatif : Greeter11Patrons de conception en C
Patron SingletonPatron FabriquePatron ItérateurRécapitulatif : Logger Factory3Cycle de vie des objets
Pattern de constructeurPattern de destructeurInitialisation sur la pileCopie profondeRécapitulatif : String Wrapper6Héritage par composition
Imbrication de structLa règle du premier membreAccès aux membres parentsUpcastingRécapitulatif : Hiérarchie des formes9Projet : Dessinateur de formes
Aperçu du projetImplémentation du cercleImplémentation du rectangleUtilisation polymorpheConteneur de formesEntraînez-vous par vous-même : Compilateur C en ligne