Contenu du cours
C++ Oop
C++ Oop
Segmentation et Agrégation
Lorsque vous créez un logiciel qui est maintenable et flexible, il y a beaucoup de choses à considérer dans le processus, surtout en programmation orientée objet. La composition et l'agrégation sont des concepts fondamentaux qui permettent la création de systèmes complexes à partir de composants plus simples et font partie du paradigme de l'encapsulation.
Composition
La composition est une technique de conception où une classe contient des objets d'autres classes en tant que variables membres. Ces membres sont des composants vitaux de la classe contenant et ont une relation de propriété forte. Lorsque l'objet contenant est détruit, ses parties composées le sont également. Par exemple :
Car
Engine
#include "Engine.h" class Car { public: void Start() { engine.Start(); // Start the engine std::cout << "Car started" << std::endl; } private: Engine engine; // Engine object composition };
La classe Car compose un objet Engine. Lorsqu'un objet Car est créé, il crée automatiquement une instance de Engine dans le cadre de sa composition.
Agrégation
L'agrégation est une autre forme de composition d'objet où une classe contient des objets d'autres classes, mais les instances contenues ont une relation plus faible par rapport à la composition. Dans l'agrégation, les classes membres contenues peuvent exister indépendamment et peuvent être partagées entre plusieurs classes.
Car
Engine
#include "Engine.h" class Car { public: Car(Engine* engine) : engine(engine) {} void Start() { engine->Start(); // Start the engine std::cout << "Car started" << std::endl; } private: Engine* engine; // Engine object aggregation };
Dans cet exemple, la classe Car agrège un objet Engine en utilisant un pointeur. La classe Car ne possède pas l'objet Engine; elle ne fait que le référencer. Cela permet à l'instance Engine d'exister indépendamment de l'objet Car et d'être partagée entre plusieurs instances si nécessaire.
Choisir entre Composition et Agrégation
Lors de la conception de systèmes logiciels, il est essentiel de bien réfléchir à l'utilisation de la composition ou de l'agrégation en fonction des relations entre les classes et les objets.
La classe contenant doit prendre possession des objets contenus | ||
Les objets contenus sont des parties intégrantes de la classe contenant | ||
La classe contenant ne fait que référencer les objets contenus | ||
Les objets contenus peuvent exister indépendamment ou être partagés entre plusieurs instances |
Dans le contexte des classes Car et Engine, utiliser la composition serait plus approprié. Chaque voiture a généralement son propre moteur, et le moteur est une partie intégrante de la voiture elle-même. De plus, cela empêche le Engine d'être partagé ou réutilisé entre plusieurs objets voiture, ce qui est également logique.
Merci pour vos commentaires !