Full Transcript

Programmation C++ A3 : 2023-2024 Sonia Djebali et Nora Izri [email protected] Rappel POO Principe POO La programmation orientée objet (POO) consiste à définir des objets et à les faire interagir entre eux, Notion de classe Une classe déclare des propriétés communes à un ensemble d’objets. Une...

Programmation C++ A3 : 2023-2024 Sonia Djebali et Nora Izri [email protected] Rappel POO Principe POO La programmation orientée objet (POO) consiste à définir des objets et à les faire interagir entre eux, Notion de classe Une classe déclare des propriétés communes à un ensemble d’objets. Une classe représentera donc une catégorie d’objets. Elle apparaît comme un type ou un moule à partir duquel il sera possible de créer des objet class Point { double x, y; }; // nous sommes des propriétés de la classe Point Rappel POO Notion d’objets Un objet est une structure de données avec ses attributs qui définit son état et ses méthodes qui définit son comportement. Un objet est créé à partir d’un modèle classe. Chaque objet créé à partir de cette classe est une instance de la classe en question. Un objet possède une identité qui permet de distinguer un objet d’un autre objet (son nom, une adresse mémoire) Point point; // je suis une instance (un objet) de la classe Point Rappel POO Notion de visibilité C++ permet de préciser le type d’accès des membres (attributs et méthodes) d’un objet. Cette opération s’effectue au sein des classes : public : private protected (notion héritage) Notion d’encapsulation L’encapsulation est l’idée de protéger les variables contenues dans un objet et de ne proposer que des méthodes pour les manipuler. L’objet est ainsi vu de l’extérieur comme une “boîte noire“ possédant certaines propriétés et ayant un comportement spécifié. C’est le comportement d’un objet qui modifiera son état. Rappel POO L’héritage (ou spécialisation, ou dérivation) permet d’ajouter des propriétés à une classe existante pour en obtenir une nouvelle plus précise. L’idée est : "un B est un A avec des choses en plus". Héritage et conversion de type Un certain nombre de conversions standards sont automatiquement définies entre une classe de base et ses classes dérivées. Soit une classe B héritant d’une classe A, les conversions implicites sont : D’un objet de type B vers un objet de type A. D’une référence sur un objet de type B vers une référence sur un objet de type A. D’un pointeur sur un objet de type B vers un pointeur sur un objet de type A. La conversion de A vers B nécessite l’utilisation d’un cast. Peut être dangereux ! Héritage et conversion de type Il est donc possible de faire Conclusion : Traiter un type dérivé comme s’il était son type de base est appelé transtypage ascendant ou surtypage (upcasting). A l’opposé, le transtypage descendant (downcast) pose un problème car leur vérification n’est possible qu’à l’exécution. Il nécessite l’utilisation d’opérateur de cast : dynamic_cast Héritage et conversion de type L’héritage permet : la réutilisation du code déjà écrit l’ajout de nouvelles fonctionnalités la modification d’un comportement existant (redéfinition) Héritage et conversion de type Il ne faut pas mélanger la redéfinition et la surdéfinition : Une surdéfinition ou surcharge (overloading) permet d’utiliser plusieurs méthodes qui portent le même nom au sein d’une même classe avec une signature différente. Une redéfinition (overriding) permet de fournir une nouvelle définition d’une méthode d’une classe ascendante pour la remplacer. Elle doit avoir une signature rigoureusement identique à la méthode parente. Un objet garde toujours la capacité de pouvoir redéfinir une méthode afin de la réécrire ou de la compléter. Polymorphisme Polymorphisme Le polymorphisme représente la capacité du système à choisir dynamiquement la méthode qui correspond au type de l’objet en cours de manipulation. Un même morceau de code a plusieurs comportements différents suivant le type passé en argument. C'est donc du polymorphisme. Le polymorphisme est implémenté en C++ avec les fonctions virtuelles (virtual) et l’héritage. Polymorphisme class Vehicule { public: void affiche() const; //Affiche une description du Vehicule protected: int m_prix; }; class Voiture : public Vehicule { public: void affiche() const; //Une Voiture EST UN Vehicule private: int m_portes; }; class Moto : public Vehicule { public: void affiche() const; private: double m_vitesse;}; //Une Moto EST UN Vehicule Polymorphisme Le corps des fonctions affiche() est le suivant : void Vehicule::affiche() const { cout

Use Quizgecko on...
Browser
Browser