Méthodes utilitaires
Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 10 sur 61.
Jusqu’à présent, nous avons vu des fonctions qui modifient les données d’une structure (comme player_take_damage) et des fonctions qui se contentent de les afficher. Mais il existe une autre catégorie importante : les fonctions qui calculent des valeurs dérivées à partir des membres d’une structure sans rien modifier.
Considérez une structure Rectangle qui stocke la largeur et la hauteur. L’aire n’est pas stockée : elle est calculée à la demande :
typedef struct {
double width;
double height;
} Rectangle;
double rectangle_area(const Rectangle *self) {
return self->width * self->height;
}
double rectangle_perimeter(const Rectangle *self) {
return 2 * (self->width + self->height);
}
Ce sont des méthodes auxiliaires. Elles prennent les données existantes de la structure et produisent une nouvelle valeur. Remarquez qu’elles utilisent des pointeurs const, puisqu’elles ne font que lire, sans jamais écrire. Le résultat calculé est renvoyé plutôt qu’enregistré dans la structure.
Rectangle box = {5.0, 3.0};
printf("Area: %.1f\n", rectangle_area(&box)); // 15.0
printf("Perimeter: %.1f\n", rectangle_perimeter(&box)); // 16.0
Ce modèle permet de garder vos structures légères : stockez uniquement les données essentielles et calculez tout le reste lorsque nécessaire. Il garantit également que les valeurs dérivées restent toujours cohérentes avec l’état actuel.
Défi
FacileConstruisons un module Circle qui calcule des valeurs dérivées à partir de données stockées. Tu vas t'entraîner à écrire des méthodes auxiliaires : des fonctions qui calculent des résultats à partir des membres d'une structure sans les modifier.
Tu vas créer trois fichiers :
circle.h: déclarer une structureCircleavec un seul membredouble radius. Déclarer également deux méthodes auxiliaires :circle_area: prend un pointeurconstvers Circle et renvoie l'airecircle_circumference: prend un pointeurconstvers Circle et renvoie la circonférence
CIRCLE_H.circle.c: implémenter les deux méthodes auxiliaires. Pour les calculs, utiliser3.14159comme valeur de pi. La formule de l'aire estpi * radius * radius, et la formule de la circonférence est2 * pi * radius. Les deux fonctions doivent uniquement lire le rayon : ne jamais le modifier.main.c: créer un Circle et utiliser les méthodes auxiliaires pour calculer et afficher ses propriétés.
Tu recevras une entrée : le rayon du cercle (sous forme de double).
Dans ton fichier principal, initialise un Circle avec le rayon donné, puis utilise tes méthodes auxiliaires pour calculer et afficher l'aire et la circonférence.
Affiche les résultats au format suivant :
Area: {area}
Circumference: {circumference}Utilise %.2f pour les deux valeurs afin d'afficher deux décimales.
Par exemple, avec un rayon de 5.0, la sortie serait :
Area: 78.54
Circumference: 31.42Essayez vous-même
#include <stdio.h>
#include "circle.h"
int main() {
double radius;
scanf("%lf", &radius);
// TODO: Créer une struct Circle avec le rayon donné
// TODO: Use circle_area and circle_circumference helper methods
// pour calculer et afficher les résultats
// Format d'affichage :
// printf("Area: %.2f\n", ...);
// printf("Circumference: %.2f\n", ...);
return 0;
}
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
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