Partie 8: Objets et Classes — Programmation orientée objet en C++
Upcoming SlideShare
Loading in...5
×
 

Partie 8: Objets et Classes — Programmation orientée objet en C++

on

  • 2,158 views

Support material for a continued education course "Introduction to object oriented programming in C++".

Support material for a continued education course "Introduction to object oriented programming in C++".
In French.

Statistics

Views

Total Views
2,158
Views on SlideShare
2,158
Embed Views
0

Actions

Likes
1
Downloads
86
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Partie 8: Objets et Classes — Programmation orientée objet en C++ Partie 8: Objets et Classes — Programmation orientée objet en C++ Presentation Transcript

  • Programmation Orientée Objet en C++ 8ème Partie: Objets et Classes Fabio Hernandez Fabio.Hernandez@in2p3.fr
  • Vue dEnsemble Notions de base Types, variables, opérateurs Contrôle dexécution Fonctions Mémoire dynamique Qualité du logiciel Evolution du modèle objet Objets et classes Fonctions membres Classes génériques Héritage Polymorphisme Héritage multiple Entrée/sortiePOO en C++: Objets et Classes 197 © 1997-2003 Fabio HERNANDEZ
  • Table des Matières Nature dun Objet Nature dune Classe Exemple: une classe simple abstraction définition de linterface utilisation implémentation modification fonction membres contrôle daccès initialisation/destruction RésuméPOO en C++: Objets et Classes 198 © 1997-2003 Fabio HERNANDEZ
  • Nature dun Objet Un objet représente une entité individuelle et identifiable, réelle ou abstraite, avec un rôle bien défini dans le domaine du problème Exemple: dans une usine de fabrication dautomobiles, on peut identifier des objets tels moteur châssis volant système électrique processus de montage Des objets peuvent être tangibles, mais peuvent ne pas avoir une frontière physique très bien définie (rivière, des nuages, ...)POO en C++: Objets et Classes 199 © 1997-2003 Fabio HERNANDEZ
  • Nature dun Objet (suite) Caractéristiques dun objet Etat Comportement Identité Etat un attribut est une caractéristique, qualité ou trait intrinsèque qui contribue à faire unique un objet létat dun objet comprend les propriétés statiques (attributs) et les valeurs de ces attributs les valeurs des attributs peuvent être statiques ou dynamiques du fait davoir un état, un objet occupe un espace dans le monde physique et dans la mémoire de lordinateur exemple: les attributs de lobjet point en deux dimensions sont les coordonnées x et yPOO en C++: Objets et Classes 200 © 1997-2003 Fabio HERNANDEZ
  • Nature dun Objet (suite) Comportement façon dagir et de réagir dun objet comme conséquence des changements détat et des opérations effectuées sur lui représente lactivité de lobjet vue de lextérieur si on regarde un objet comme un serveur, son comportement est lensemble des services offerts par lui à ses clients exemple: un point peut être déplacé, tourné autour dun autre point, etc. le comportement dépend de létat de lobjet et de lopération effectuée sur lui létat dun objet représente le résultat cumulé de son comportement Identité propriété dun objet qui permet de le distinguer des autres objets de la même classePOO en C++: Objets et Classes 201 © 1997-2003 Fabio HERNANDEZ
  • Nature dune Classe Les notions de classe et d ’objet sont étroitement liées Une classe est un ensemble dobjets qui partagent une structure et un comportement communs Une classe est seulement une abstraction Un objet est une instance (entité concrète) dune classe en temps dexécution On peut voir la classe comme un moule pour la fabrication dobjets Les objets fabriqués avec le même moule partagent structure et comportementPOO en C++: Objets et Classes 202 © 1997-2003 Fabio HERNANDEZ
  • Nature dune Classe (suite) Deux vues dune classe interface implémentation Interface vue externe abstraite dune classe liste de services offerts par les instances de la classe (contrat) une opération non spécifiée dans linterface dune classe ne peut être appliquée sur une instance (objet) de cette classe cache la structure interne de la classe (encapsulation) réponse à la question quoi contenue dans un fichier dentête (.h)POO en C++: Objets et Classes 203 © 1997-2003 Fabio HERNANDEZ
  • Nature dune Classe (suite) Implémentation vue interne dune classe comprend les secrets (détails internes) de son comportement limplémentation dune classe est constituée de limplémentation de chacune des opérations définies dans son interface réponse à la question comment contenue dans un fichier dimplémentation (.cpp)POO en C++: Objets et Classes 204 © 1997-2003 Fabio HERNANDEZ
  • Exemple: classe Point Ecriture en C++ dune classe (interface et implémentation) représentant la notion dun point en deux dimensions y ρ θ O xPOO en C++: Objets et Classes 205 © 1997-2003 Fabio HERNANDEZ
  • Classe Point: abstraction Quels sont les attributs dun point qui nous intéressent? la coordonnée x la coordonnée y la distance à lorigine (ρ) langle par rapport à lhorizontale (θ) Quelles sont les opérations applicables sur un point qui nous intéressent ? translation rotation autour de lorigine ...POO en C++: Objets et Classes 206 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : interface Définition (incomplète) de linterface de la classe Point Fichier Point.h class Point { // Not yet finished !!! public: float getX(); // returns the x coordinate float getY(); // returns the y coordinate float rho(); // returns the distance to the origin float theta(); // returns the angle to the // horizontal axis void translate(float horizontal, float vertical); void rotate(float angle); };POO en C++: Objets et Classes 207 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : interface (suite) getX, getY, rho, theta, translate et rotate sont des méthodes (services) fournies par toutes les instances de la classe Point getX, getY, rho et theta retournent une valeur de type float translate et rotate ne retournent rien translate et rotate ont besoin dinformation supplémentaire pour accomplir leur mission un déplacement horizontal et vertical, dans le cas de translate un angle, dans le cas de rotate Y a-t-il des similarités avec la déclaration des fonctions, étudiée précédemment? Le mot clé public sert à contrôler laccès aux méthodes de la classe. Plus dinformations à ce propos plus tard.POO en C++: Objets et Classes 208 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : utilisation Comment utiliser les services offerts par les objets de la classe Point? il faut définir un objet de cette classe et ensuite... lui envoyer un message indiquant le service que lon demande La définition de lobjet est faite de la même façon que la définition des objets des types primitifs int count; Point p; Pour envoyer le message indiquant le service demandé on utilise la notation service demandé objet destinataire p.rotate(45.0); du message argument(s) du servicePOO en C++: Objets et Classes 209 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : utilisation (suite) Utilisation dobjets de la classe Point (fichier main.cpp) #include <iostream> inclusion du fichier #include "Point.h" qui contient linterface void main() de la classe { // Instantiate a Point object Point p; // Show its coordinates cout << "p is (" << p.getX() << , << p.getY() << ) << endl;POO en C++: Objets et Classes 210 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : utilisation (suite) // Show its angle cout << "The angle theta of p is: " << p.theta() << endl; // Lets translate p p.translate(10.0, 20.0); // Show again its coordinates, after the translation cout << "p is now (" << p.getX() << , << p.getY() << )<< endl; } // mainPOO en C++: Objets et Classes 211 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : utilisation (suite) Lors de lexécution de ce programme, il devrait safficher à lécran p is (0.0,0.0) The angle theta of p is: 0.0 p is now (10.0,20.0)POO en C++: Objets et Classes 212 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : utilisation (suite) La définition de pointeurs aux objets dune classe se fait de la même façon que celle des pointeurs aux objets des types primitifs int* anIntPointer; Point* aPointPointer; Lallocation de mémoire se fait à laide de lopérateur new anIntPointer = new int; aPointPointer = new Point; Lenvoi de messages, à laide de lopérateur -> aPointPointer->translate(10.0, 20.0); La désallocation, à laide de lopérateur delete delete aPointPointer;POO en C++: Objets et Classes 213 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : implémentation Comment implémenter chacun des services spécifiés dans le contrat (interface de la classe) ? Tout dabord, il faut déterminer les attributs qui constitueront létat dun point, dans la perspective de notre abstraction Nous allons représenter un point comme un couple (x,y) Chacune des coordonnées est une valeur de type float Les attributs représentant les coordonnées x et y sappelleront x_ et y_ respectivement Le caractère souligné de x_ et y_ est une convention de style Les attributs x_ et y_ sont appelés les données membres, par opposition aux fonctions membres ( getX, getY, rho, theta, translate, rotate) de la classePOO en C++: Objets et Classes 214 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : implémentation (suite) class Point { // Not yet finished !!! public: float getX(); // returns the x coordinate float getY(); // returns the y coordinate float rho(); // returns the distance to the origin float theta(); // returns the angle to the // horizontal axis void translate(float horizontal, float vertical); void rotate(float angle); float x_; // x coordinate float y_; // y coordinate };POO en C++: Objets et Classes 215 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : implémentation (suite) Notation quasi UML (Unified Modeling Language) http://www.rational.com/uml Point Nom de la classe Nom de la classe x_: float y_: float Attributs Attributs getX: float getY: float rho: float theta: float Opérations Opérations translate: void rotate: voidPOO en C++: Objets et Classes 216 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : implémentation (suite) En temps dexécution // Create a point object Point p1; p1: Point x_ = 0.0 y_ = 0.0 // Create another point object Point p2; Deux instances Deux instances différentes de la même différentes de la même p1: Point p2: Point classe Point,,avec les classe Point avec les x_ = 0.0 x_ = 0.0 mêmes valeurs dans leurs mêmes valeurs dans leurs y_ = 0.0 y_ = 0.0 attributs attributsPOO en C++: Objets et Classes 217 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : implémentation (suite) En temps dexécution (suite) // Translate p1 p1.translate(34.5, 18.8); p1: Point p2: Point x_ = 34.5 x_ = 0.0 y_ = 18.8 y_ = 0.0 // Now translate p2 p2.translate(-10.0, 20.0); p1: Point p2: Point x_ = 34.5 x_ = -10.0 y_ = 18.8 y_ = 20.0POO en C++: Objets et Classes 218 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : implémentation (suite) Et si on utilise des pointeurs // Create a point pointer Point* p1 = new Point; p1 :Point x_ = 0.0 y_ = 0.0 // Create another pointer Point* p2 = p1; Une seule instance Une seule instance p1 p2 de la même classe de la même classe :Point Point,,référencée Point référencée x_ = 0.0 par deux pointeurs par deux pointeurs y_ = 0.0 différents différentsPOO en C++: Objets et Classes 219 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : implémentation (suite) Et si on utilise des pointeurs (suite) // Translate the point pointed to by p1 p1->translate(34.5, 18.8); p1 p2 :Point x_ = 34.5 y_ = 18.8 // Now translate the point pointed to by p2 p2->translate(-10.0, 20.0); p1 p2 :Point x_ = 24.5 y_ = 38.8POO en C++: Objets et Classes 220 © 1997-2003 Fabio HERNANDEZ
  • Classe Point : implémentation (suite) Nous pouvons maintenant implémenter chacune des fonctions membres de la classe Limplémentation de ces fonctions sera écrite dans un fichier de type .cpp Nous créons ainsi le fichier Point.cppPOO en C++: Objets et Classes 221 © 1997-2003 Fabio HERNANDEZ
  • Fichier Point.cpp /////////////////////////////////////////////////////// // File: Point.cpp // Description: implementation of the Point class /////////////////////////////////////////////////////// #include "Point.h" #include <math.h> // we need sin(), cos(), sqrt() float Point::getX() { return x_; } float Point::getY() { return y_; }POO en C++: Objets et Classes 222 © 1997-2003 Fabio HERNANDEZ
  • Fichier Point.cpp (suite) float Point::rho() { return sqrt(x_*x_ + y_*y_); } float Point::theta() { return atan2(y_, x_); }POO en C++: Objets et Classes 223 © 1997-2003 Fabio HERNANDEZ
  • Fichier Point.cpp (suite) void Point::translate(float horizontal, float vertical) { x_ += horizontal; y_ += vertical; } void Point::rotate(float angle) Une fonction Une fonction { membre peut en membre peut en float currentRho = rho(); appeler dautres appeler dautres float newTheta = theta() + angle; de la même de la même x_ = currentRho * cos(newTheta); classe classe y_ = currentRho * sin(newTheta); }POO en C++: Objets et Classes 224 © 1997-2003 Fabio HERNANDEZ
  • Contrôle daccès Le mot clé public dans linterface de la classe Point établit pour un service (fonction membre), quil est utilisable par nimporte quel objet client pour un attribut (donnée membre), quil est accessible (y compris pour le modifier) depuis nimporte quel autre objet En particulier, nous pourrions faire // Instantiate a Point object Point p; // WARNING: its x attribute can be modified!!!! p.x_ = 47.0;POO en C++: Objets et Classes 225 © 1997-2003 Fabio HERNANDEZ
  • Contrôle daccès (suite) Laccès public nest pas souhaitable principalement pour les attributs de la classe Les données membres dune classe font partie des secrets de limplémentation et ne devraient donc pas être accessibles en dehors de lobjet Nous devrions pouvoir encapsuler ces attributs de façon à ce que les clients de la classe ne puissent pas y accéder directement C++ offre plusieurs niveaux pour contrôler laccès aux fonctions/données membres public protégé privéPOO en C++: Objets et Classes 226 © 1997-2003 Fabio HERNANDEZ
  • Contrôle daccès (suite) Accès public Mot clé public Les fonctions/données membres sont accessibles par tous les objets Accès protégé Mot clé protected Etroitement lié avec les mécanismes dhéritage Laccès est limité aux classes de la hiérarchie Plus de détails quand nous étudierons lhéritage Accès privé Mot clé private Les fonctions/données membres sont accessibles uniquement par les fonctions qui implémentent les services offerts par la classe, et pas de lextérieurPOO en C++: Objets et Classes 227 © 1997-2003 Fabio HERNANDEZ
  • Contrôle daccès (suite) Il est nécessaire de modifier linterface de la classe Point class Point { // Not yet finished !!! public: float getX(); // returns the x coordinate float getY(); // returns the y coordinate float rho(); // returns the distance to the origin float theta(); // returns the angle to the // horizontal axis void translate(float horizontal, float vertical); void rotate(float angle); private: float x_; // x coordinate float y_; // y coordinate };POO en C++: Objets et Classes 228 © 1997-2003 Fabio HERNANDEZ
  • Contrôle daccès (suite) Il est maintenant impossible daccéder de lextérieur aux attributs de la classe Point directement // Instantiate a Point object Point p; // Lets try to access the x_ attribute cout << "p.x_ = " << p.x_ << endl; // Compilation ERROR: // the x_ attribute is // private!!!POO en C++: Objets et Classes 229 © 1997-2003 Fabio HERNANDEZ
  • Contrôle daccès (suite) Notez quil nest pas nécessaire de modifier limplémentation des fonctions membres de la classe (rotate, translate, theta, rho, getX et getY) Toute fonction membre dune classe peut accéder à tous les attributs et à toute autre fonction membre, y compris ceux privés, de la même classe Cest un mécanisme très puissant de la technologie objet. Il permet de séparer complètement interface et implémentation cacher les détails (secrets) de limplémentation aux clients (encapsulation) Résultat: les modifications faites à limplémentation de la classe nont aucun impact chez les clientsPOO en C++: Objets et Classes 230 © 1997-2003 Fabio HERNANDEZ
  • Contrôle daccès (suite) tr te an a sla rot t e Encapsulation ::pour Encapsulation pour x_ accéder aux données accéder aux données membres de la classe, il membres de la classe, il y_ faut utiliser les services faut utiliser les services get o fournis par la classe rh fournis par la classe X get Y h e ta t Classe PointPOO en C++: Objets et Classes 231 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres On peut différencier les fonctions membres dune classe par rapport à leur mission gestion (comparaison, création/initialisation, destruction, copie, ...) modification de létat consultation de létat (attributs) de lobjet fonctions daide itération, pour les classes dobjets qui sont des conteneurs dautres objets Dans notre implémentation de la classe Point getX(), getY(), rho() et theta() servent à consulter létat de lobjet translate() et rotate() modifient létat de lobjet il ny a pas (encore) des fonctions membres de gestion ni daidePOO en C++: Objets et Classes 232 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres (suite) Si le contraire nest pas explicitement spécifié, en C++ les fonctions membres sont des modificateurs potentiels de létat de lobjet En conséquence, il est impossible de demander un service à un objet défini constant, si la fonction membre qui implémente le service ne lest pas // Define a constant point const Point origin; // Retrieve the theta angle float angle = origin.theta(); // Compilation ERROR: // origin is constant // and Point::theta() // is notPOO en C++: Objets et Classes 233 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres (suite) daprès linterface de la classe, la fonction membre theta() est un modificateur potentiel de létat de lobjet origin ceci est incompatible avec le fait que origin est constant Il faut modifier légèrement linterface de la classe Point pour informer le compilateur que Point::theta() ne modifie pas létat des objets de sa classe Il suffit dajouter le mot clé const à la déclaration de la fonction membrePOO en C++: Objets et Classes 234 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres (suite) Modification de linterface de la classe Point (fichier Point.h) class Point { // Not yet finished !!! public: // Modifiers void translate(float horizontal, float vertical); void rotate(float angle); // Selectors float getX() const; // x coordinate float getY() const; // y coordinatePOO en C++: Objets et Classes 235 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres (suite) float rho() const; // distance to the origin float theta() const; // angle to the // horizontal axis private: // Data members float x_; // Cartesian coordinates float y_; };POO en C++: Objets et Classes 236 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres (suite) Modification de limplémentation de la classe Point (fichier Point.cpp), pour refléter les changements dans linterface /////////////////////////////////////////////////////// // File: Point.cpp // Description: implementation of the Point class /////////////////////////////////////////////////////// #include "Point.h" #include <math.h> // we need sin(), cos(), sqrt()POO en C++: Objets et Classes 237 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres (suite) /////////////////////////////////////////////////////// // Modifiers void Point::translate(float horizontal, float vertical) { x_ += horizontal; y_ += vertical; } void Point::rotate(float angle) { float currentRho = rho(); float newTheta = theta() + angle; x_ = currentRho * cos(newTheta); y_ = currentRho * sin(newTheta); }POO en C++: Objets et Classes 238 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres (suite) /////////////////////////////////////////////////////// // Selectors float Point::getX() const { return x_; } float Point::getY() const { return y_; }POO en C++: Objets et Classes 239 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres (suite) float Point::rho() const { return sqrt(x_*x_ + y_*y_); } float Point::theta() const { return atan2(y_, x_); }POO en C++: Objets et Classes 240 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres dInitialisation Comme pour les types primitifs, lors de la définition dun objet le compilateur doit réserver une quantité de mémoire suffisante pour stocker lobjet donner une valeur initiale à lobjet Initialiser un objet composé de plusieurs données membres (comme un objet de la classe Point) se traduit par donner une valeur initiale à chacune delles Le compilateur fournit une fonction dinitialisation par défaut pour chaque classe Appelée implicitement lors de la définition dun objet Point p;POO en C++: Objets et Classes 241 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres dInitialisation (suite) de lallocation dun objet via lopérateur new Point* pointPointer = new Point; Dans notre exemple de classe Point, cette fonction donne une valeur initiale aux atributs x_ et y_ (probablement zéro) C++ offre au programmeur la possibilité de définir sa propre méthode dinitialisation Cette méthode dinitialisation est appelée le constructeur Un constructeur est une fonction membre comme les autres, avec deux caractéristiques particulières il porte le même nom que la classe il na pas un type de valeur de retour, même pas void Ajoutons le constructeur à la classe PointPOO en C++: Objets et Classes 242 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres dInitialisation (suite) class Point { public: // Constructor Point(); // Modifiers ... // Selectors ... private: // Data members ... };POO en C++: Objets et Classes 243 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres dInitialisation (suite) Le fichier Point.cpp doit être modifié pour ajouter limplémentation du constructeur /////////////////////////////////////////////////////// // Constructor Point::Point() { x_ = 0.0; y_ = 0.0; }POO en C++: Objets et Classes 244 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres dInitialisation (suite) C++ permet de définir plusieurs constructeurs différents pour la même classe Leur signatures doivent être différentes Nous pourrions ajouter à notre classe Point un constructeur afin de pouvoir créer un objet et spécifier les valeurs initiales des coordonées limplémentation de la classe Point ne nous permet pas de faire cela directement, mais en deux étapes // Create the point object Point p; // p is (0.0, 0.0) // Translate it p.translate(45.0, 80.0);POO en C++: Objets et Classes 245 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres dInitialisation (suite) class Point { public: // Constructors Point(); Point(float initialX, float initialY); // Modifiers ... // Selectors ... private: // Data members ... };POO en C++: Objets et Classes 246 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres dInitialisation (suite) La classe Point offre maintenant deux possibilités de création dobjets // Create a point at (45.0, 80.0) Point p(45.0, 80.0); // calls Point::Point(float,float) // Create a point at (0.0, 0.0) Point origin; // calls Point::Point() // Create a point at (5.0, 10.0) in the heap Point* pointPointer = new Point(5.0, 10.0);POO en C++: Objets et Classes 247 © 1997-2003 Fabio HERNANDEZ
  • Fonctions Membres dInitialisation (suite) Le fichier Point.cpp contiendra limplémentation du nouveau constructeur /////////////////////////////////////////////////////// // Constructors Point::Point() // Default constructor { x_ = 0.0; y_ = 0.0; } Point::Point(float initialX, float initialY) { x_ = initialX; y_ = initialY; }POO en C++: Objets et Classes 248 © 1997-2003 Fabio HERNANDEZ
  • Fonction Membre de Destruction La fonction membre de destruction est appelée quand un objet créé dans la pile dexécution sort du contexte (fin de bloc ou fin de fonction par exemple) un objet créé dans le tas est explicitement détruit avec lopérateur delete Comme pour les constructeurs, le compilateur fournit un destructeur par défaut Le destructeur est utile pour libérer les ressources acquis lors de la création/modification de lobjet libération de mémoire fermeture des fichiers libération de verrous ...POO en C++: Objets et Classes 249 © 1997-2003 Fabio HERNANDEZ
  • Fonction Membre de Destruction (suite) Une classe ne peut avoir quun seul destructeur Le destructeur porte le nom de la classe précédé du caractère ~ (tilda) Comme pour les constructeurs, le destructeur na pas de type de valeur retour A la différence des constructeurs, le destructeur naccepte pas de paramètresPOO en C++: Objets et Classes 250 © 1997-2003 Fabio HERNANDEZ
  • Fonction Membre de Destruction (suite) class Point { public: // Constructors/Destructor Point(); Point(float initialX, float initialY); ~Point(); // Modifiers ... // Selectors ... private: // Data members ... };POO en C++: Objets et Classes 251 © 1997-2003 Fabio HERNANDEZ
  • Fonction Membre de Destruction (suite) Le fichier Point.cpp contiendra limplémentation du destructeur /////////////////////////////////////////////////////// // Destructor Point::~Point() { // Nothing to be done }POO en C++: Objets et Classes 252 © 1997-2003 Fabio HERNANDEZ
  • Organisation des Fichiers Source Point.h Point.cpp #include <math.h> #include <math.h> #if !defined(POINT_H) #if !defined(POINT_H) #include "Point.h" #include "Point.h" #define POINT_H #define POINT_H Point::Point() Point::Point() {{ class Point { class Point { x_ = 0.0; x_ = 0.0; public: public: y_ = 0.0; y_ = 0.0; Point(); }} Point(); ~Point(); ~Point(); …… Point::~Point() Point::~Point() …… { private: { private: }} float x_; float x_; float y_; float y_; Point::getX() Point::getX() }; {{ }; return x_; return x_; }} #endif // POINT_H #endif // POINT_H …… ……POO en C++: Objets et Classes 253 © 1997-2003 Fabio HERNANDEZ
  • Exercices Ajouter une fonction membre pour comparer deux objets de la classe Point et déterminer sils sont identiques Ajouter une fonction membre pour copier un objet de la classe Point dans un autre Ajouter un troisième constructeur (appelé constructeur de copie) pour construire un objet de la classe Point à partir dun objet de la classe Point passé comme argument Ajouter une fonction membre pour modifier les valeurs des coordonnées (x et/ou y) dun objet de la classe Point Quelles modifications faut-il faire si lon veut représenter un Point en coordonnées polaires et non pas cartésiennes et ce sans impacter les clients de la classe?POO en C++: Objets et Classes 254 © 1997-2003 Fabio HERNANDEZ
  • Résumé La classe est un moule pour construire des entités qui partagent structure et comportement Linterface et limplémentation dune classe sont clairement identifiées Linterface dune classe est un contrat vis-à-vis des clients Lobjet est la structure dynamique dun programme Les objets collaborent (échangent des messages) pour résoudre le problème en question Un objet est constitué dattributs (structure) et de fonctions membres (comportement) Laccès aux données et aux fonctions membres peut être contrôlé et vérifié en temps de compilationPOO en C++: Objets et Classes 255 © 1997-2003 Fabio HERNANDEZ