Vous êtes sur la page 1sur 10

Objectifs

Bases de la
Objectifs

Bases de la
Objectifs du cours d’aujourd’hui
POO POO

En C++ En C++

Conclusion Conclusion

Informatique II :
Cours de programmation (C++) ◮ Introduire les notions d’encapsulation et d’abstraction
◮ Objets, instances et classes
Programmation Orientée Objet (POO) ◮ Classes en C++ p
◮ Variables d’instance p
Jamila Sam Haroud ◮ Méthodes d’instance p
◮ Encapsulation et Interface : public: et private:
Laboratoire d’Intelligence Artificielle
Faculté I&C ◮ L’objet this et le masquage


c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 1 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 2 / 38

Objectifs

Bases de la
Objets : 1ère introduction Objectifs

Bases de la
Programmation impérative/procédurale
POO
Encapsulation
POO
Encapsulation [rappel]
Abstration Abstration
Interface Interface
Synthèse Synthèse
Classes, Objets,
Instances
Vous avez appris à écrire des programmes de plus en plus Classes, Objets,
Instances

En C++ complexes. En C++


Dans les programmes que vous avez écrits jusqu’à maintenant,
Conclusion Il faut donc maintenant des outils pour organiser ces Conclusion
les notions de variables/types de données et de traitement de
programmes de façon plus efficace. ces données étaient séparées :
C’est l’un des objectifs principaux de la notion d’objet.
Les objets permettent de mettre en œuvre dans les programmes opèrent sur
les notions :
◮ d’encapsulation
traitements données
◮ d’abstraction
◮ d’héritage
◮ et de polymorphisme influencent


c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 3 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 4 / 38
Objectifs

Bases de la
Notions d’encapsulation Objectifs

Bases de la
Notion d’encapsulation (2)
POO POO
Encapsulation Encapsulation
Abstration Abstration
Interface
Le principe d’encapsulation consiste à regrouper dans le même Interface Les objets sont définis par leurs attributs et leurs méthodes :
Synthèse
Classes, Objets,
objet informatique («concept»), données et traitements qui lui sont Synthèse
Classes, Objets,
Instances
spécifiques : Instances

En C++ En C++

Conclusion
◮ Les données inclues dans un objet seront appelées les Conclusion Objet1
attributs de cet objet ; attribut1.1 Methode1.1
attribut1.2
◮ Les traitements/fonctions défini(e)s dans un objet seront
appelées les méthodes de cet objet.

Résumé du premier principe de l’encapsulation :


...

OBJET
= ObjetK
attributs attributK.1 MethodeK.1
+ MethodeK.2
méthodes

c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 5 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 6 / 38

Objectifs

Bases de la
Notion d’abstraction (1) Objectifs

Bases de la
Notion d’abstraction (2)
POO POO
Encapsulation Encapsulation
Abstration Abstration
Interface Interface
Synthèse Synthèse
Classes, Objets, Classes, Objets,
Instances Instances

En C++ Pour être véritablement intéressant, un objet doit permettre un En C++


Exemple : Rectangles
Conclusion certain degré d’abstraction. Conclusion ◮ la notion d’« objet rectangle » n’est intéressante que si l’on
peut lui associer des propriétés et/ou mécanismes généraux
Le processus d’abstraction consiste à identifier pour un ensemble ☞ propriétés et mécanismes valables pour l’ensemble des
d’éléments : rectangles et non pas pour un rectangle particulier.
◮ des caractéristiques communes à tous les éléments ◮ Les notions de largeur et hauteur sont des propriétés
◮ des mécanismes communs à tous les éléments générales des rectangles (attributs),
◮ Le mécanisme permettant de calculer la surface d’un
☞ description générique de l’ensemble considéré : se focaliser rectangle (surface = largeur × hauteur) est commun à tous
sur l’essentiel, cacher les détails.
les rectangles (méthodes)


c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 7 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 8 / 38
Objectifs

Bases de la
Abstraction Objectifs

Bases de la
Abstraction et Encaspuslation
POO
Encapsulation (exemple) POO
Encapsulation
Abstration Abstration
Interface Interface Un intérêt de l’encapsulation est que cela permet d’abstraire :
Synthèse Spécifique Synthèse
Classes, Objets, Classes, Objets,
Instances Instances En plus du regroupement des données et des traitements relatifs
En C++ En C++ à une entité, l’encapsulation permet en effet de définir deux
Conclusion Conclusion niveaux de perception :
◮ Le niveau externe : partie « visible » (par les
programmeurs-utilisateurs) de l’objet :
◮ prototype des méthodes et attributs accessibles hors de l’objet

☞ c’est l’interface de l’objet avec l’extérieur


hauteur: 30 hauteur: 15 hauteur:30 résultat du processus d’abstration
largeur:12 largeur: 26 largeur:30
surface:360 surface:390 surface:900
◮ Le niveau interne : (détails d’)implémentation de l’objet
◮ méthodes et attributs accessibles uniquement depuis l’intérieur
de l’objet (ou l’intérieur d’objets similaires)
hauteur:
largeur:
◮ définition de l’ensemble des méthodes de l’objet
surface= hauteur x largeur
générique ☞ c’est le corps de l’objet

c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 9 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 10 / 38

Objectifs

Bases de la
Encapsulation et Interface Objectifs

Bases de la
Pourquoi abstraire/encapsuler ?
POO POO
Encapsulation Encapsulation
Abstration Il y a donc deux facettes à l’encapsulation : Abstration
Interface Interface L’intérêt de regrouper les traitements et les données
Synthèse
Classes, Objets,
1. regroupement de tout ce qui caractérise l’objet : données Synthèse
Classes, Objets, conceptuellement reliées est de permettre une meilleure visibilité
Instances
(attributs) et traitements (méthodes) Instances
et une meilleure cohérence au programme, d’offrir une plus
En C++ En C++

Conclusion
2. isolement et dissimulation des détails d’implémentation Conclusion
grande modularité.
Interface = ce que le programmeur-utilisateur (hors de
L’intérêt de séparer les niveaux interne et externe est de donner
l’objet) peut utiliser
un cadre plus rigoureux à l’utilisation des objets utilisés dans un
☞ Concentration sur les attributs/méthodes concernant l’objet programme
(abstraction)
Les objets ne peuvent être utilisés qu’au travers de leur interfaces
Exemple : L’interface d’une voiture
(niveau externe)
◮ Volant, accélérateur, pédale de freins, etc. et donc les éventuelles modifications de la structure interne
◮ Tout ce qu’il faut savoir pour la conduire (mais pas la réparer ! restent invisibles à l’extérieur
ni comprendre comment ça marche) (même idée que la séparation prototype/définition d’une fonction)
◮ L’interface ne change pas, même si l’on change de moteur...
Règle : (masquage) les attributs d’un objet ne doivent pas être
...et même si on change de voiture (dans une certaine
accessibles depuis l’extérieur, mais uniquement par des
mesure) : abstraction de la notion de voiture (en tant
méthodes.

c EPFL 2002–2010
Jamila Sam
qu’« objet à conduire »)
c EPFL 2002–2010
Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 11 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 12 / 38
Objectifs

Bases de la
Encapsulation / Abstraction : Objectifs

Bases de la
Classes et Types
POO
Encapsulation Résumé POO
Encapsulation
Abstration Abstration
Interface Interface
Synthèse MIEUX : Synthèse
Classes, Objets, Classes, Objets,
Instances Instances

En C++
ION
OBJET En C++

Conclusion
ACT attributs méthodes Conclusion En programmation Objet :

AB STR ◮ le résultat du processus d’abstraction s’appelle une classe


classe = catégorie d’objets
Interface ◮ une classe définit un type (au sens du langage de
(partie visible) (vide) programmation)
◮ une réalisation particulière d’une classe s’appelle une
instance
instance = objet
Détails d’
Implémentation
(partie interne/cachée)


c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 13 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 14 / 38

Objectifs

Bases de la
Classes v.s. instances Objectifs

Bases de la
Les classes en C++
POO POO
Encapsulation
En C++
Abstration
Interface
Rectangle
class
Attributs
En C++ une classe se déclare par le mot-clé class.
Synthèse
Méthodes
Classes, Objets,
Instances
Attributs: méthodes:
Encapsulation et
interface
Exemple :
En C++ Accesseurs/Manipulateurs
largeur dessine() classe (type abstrait) Masquage et this class Rectangle {
Conclusion
hauteur surface() Résumé
...
Exemple complet

Existence conceptuelle (écriture du programme) Opérateur ::


};
Conclusion
Existence concrète (exécution)
12 26 30 La déclaration d’une instance d’une classe se fait de la façon
30 15 30
similaire à la déclaration d’une variable classique :
instance1 instance2 instance3
nom_classe nom_instance ;

Exemple :
Rectangle rect1;

déclare une instance rect1 de la classe Rectangle.



c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 15 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 16 / 38
Objectifs

Bases de la
Déclaration des attributs Objectifs

Bases de la
Accès aux attributs
POO POO

En C++ En C++
class class
Attributs Attributs
Méthodes Méthodes
Encapsulation et La syntaxe de la déclaration des attributs est la même que celle Encapsulation et
interface
Accesseurs/Manipulateurs des champs d’une structure.
interface
Accesseurs/Manipulateurs
L’accès aux valeurs des attributs d’une instance de nom
Masquage et this
Résumé
Masquage et this
Résumé
nom_instance se fait comme pour accéder aux champs d’une
Exemple complet type nom_attribut ; Exemple complet structure :
Opérateur :: Opérateur ::

Conclusion Conclusion
nom_instance.nom_attribut

Exemple : les attributs hauteur et largeur, de type double,


de la classe Rectangle pourront être déclarés par : Exemple : la valeur de l’attribut hauteur d’une instance rect1
de la classe Rectangle sera référencée par l’expression :
class Rectangle {
double hauteur; rect1.hauteur
double largeur;
};


c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 17 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 18 / 38

Objectifs

Bases de la
Déclaration des méthodes Objectifs

Bases de la
Actions et Prédicats
POO POO

En C++ La syntaxe de la définition des méthodes d’une classe est la En C++ En C++ on peut distinguer les méthodes qui modifient l’état de
class
Attributs
syntaxe normale de définition des fonctions : class
Attributs
l’objet (« actions ») de celles qui ne changent rien à l’objet
Méthodes Méthodes (« prédicats »).
Encapsulation et
interface
type_retour nom_methode (type_arg1 nom_arg1, ...) { Encapsulation et
interface
Accesseurs/Manipulateurs // corps de la méthode Accesseurs/Manipulateurs On peut pour cela ajouter le mot const après la liste des
Masquage et this Masquage et this
Résumé ... Résumé arguments de la méthode :
Exemple complet Exemple complet
}
Opérateur :: Opérateur :: type_retour nom_methode (type_arg1 nom_arg1, ...) const
Conclusion Conclusion
sauf qu’on a pas besoin de passer les attributs de la classe
Exemple :
comme arguments aux méthodes de cette classe
(on y revient dans une minute) class Rectangle {
...
Exemple : une méthode surface() de la classe Rectangle double surface() const {
pourrait être définie par : return (hauteur * largeur);
}
class Rectangle { ...
... };
double surface() {
return (hauteur * largeur); Si jamais vous déclarez comme prédicat (const) une action, vous
} aurez à la compilation le message d’erreur :

c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam }; Jamila Sam
assignment of data-member ‘...’ in read-only structure
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 19 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 20 / 38
Objectifs

Bases de la
Accès aux méthodes Objectifs

Bases de la
Portée des attributs
POO POO

En C++ En C++ Remarque : Les attributs d’une classe constituent des variables
class class
Attributs Attributs directement accessibles dans toutes les méthodes de la classes
Méthodes L’appel aux méthodes définies pour une instance de nom Méthodes
(i.e. des variables globales à la classe). Il n’est donc pas
Encapsulation et Encapsulation et
interface nom_instance se fait à l’aide d’expressions de la forme : interface
nécessaire de les passer comme arguments des méthodes.
Accesseurs/Manipulateurs Accesseurs/Manipulateurs
Masquage et this Masquage et this
Résumé nom_instance.nom_methode(val_arg1,...) Résumé
Exemple complet Exemple complet Par exemple, dans toutes les méthodes de la classe Rectangle,
Opérateur :: Opérateur ::

Conclusion Conclusion
l’identificateur hauteur (resp. largeur) fait donc a priori
Exemple : la méthode référence à la valeur de l’attribut hauteur (resp. largeur) de la
classe.
void surface() const;
Exemple : définition d’une méthode surface pour la classe
Rectangle
définie pour la classe Rectangle peut être appelée pour une
instance rect1 de cette classe par : class Rectangle {
double surface() const {
rect1.surface()
return (hauteur * largeur);
}
...

c EPFL 2002–2010
c EPFL 2002–2010 };
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 21 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 22 / 38

Objectifs

Bases de la
Accès aux attributs et méthodes Objectifs

Bases de la
Encapsulation et interface
POO POO

En C++ En C++ Tout ce qu’il n’est pas nécessaire de connaître à l’extérieur d’un
class
Attributs
class
Attributs
objet devrait être dans le corps de l’objet et identifié par le mot clé
Méthodes
Chaque instance a ses propres attributs : aucun risque de
Méthodes private :
Encapsulation et Encapsulation et
interface interface
Accesseurs/Manipulateurs confusion d’une instance à une autre. Accesseurs/Manipulateurs
class Rectangle {
Masquage et this Masquage et this
Résumé Résumé double surface() const { ... }
Exemple complet classe instances accès Exemple complet
private:
Opérateur :: Opérateur ::

Conclusion
rect1 Conclusion
double hauteur;
largeur=4 rect1.largeur double largeur;
hauteur=2 rect1.hauteur };
Rectangle surface()
double largeur; Attribut d’instance privée = inaccessible depuis l’extérieur de la
double hauteur; rect2 classe.
double surface() { largeur=2
rect2.largeur C’est également valable pour les méthodes.
... hauteur=3
rect2.hauteur
} rect2.surface() Erreur de compilation si référence à un(e) attribut/méthode
surface() d’instance privée :
Rectangle.cc:16: ‘double Rectangle::hauteur’ is private

c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam
Note : Si aucun droit d’accès n’est précisé, c’est private par défaut.
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 23 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 24 / 38
Objectifs

Bases de la
Encapsulation et interface (2) Objectifs

Bases de la
Méthodes «get» et «set»
POO POO
(« accesseurs » et « manipulateurs »)
En C++ En C++
class
Attributs
À l’inverse, l’interface, qui est accessible de l’extérieur, se déclare class
Attributs
Méthodes
avec le mot-clé public: Méthodes
Encapsulation et
interface
Encapsulation et
interface
◮ Tous les attributs sont privés ?
Accesseurs/Manipulateurs Accesseurs/Manipulateurs
Masquage et this class Rectangle { Masquage et this
◮ Et si on a besoin de les utiliser depuis l’extérieur de la classe ?!
Résumé
public: Résumé
Exemple complet
double surface() const { ... }
Exemple complet ◮ Si le programmeur le juge utile, il inclut les méthodes
Opérateur :: Opérateur ::

Conclusion private: Conclusion


publiques nécessaires ...
... 1. Manipulateurs (« méthodes set ») :
}; ◮ Modification
◮ Affectation de l’argument à une variable d’instance précise
Dans la plupart des cas : void setHauteur(double h) { hauteur = h; }
◮ Privé : void setLargeur(double L) { largeur = L; }
2. Accesseurs (« méthodes get ») :
◮ Tous les attributs
◮ Consultation
◮ La plupart des méthodes
◮ Retour de la valeur d’une variable d’instance précise
◮ Publique : double getHauteur() const { return hauteur; }
◮ Quelques méthodes bien choisies (interface) double getLargeur() const { return largeur; }

c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 25 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 26 / 38

Objectifs

Bases de la
Masquage (shadowing) Objectifs

Bases de la
Masquage (2)
POO POO

En C++ En C++ Si, dans une méthode, un attribut est masqué alors la valeur de
class
Attributs
class
Attributs
l’attribut peut quand même être référencée à l’aide du mot réservé
Méthodes Méthodes this.
Encapsulation et Encapsulation et
interface interface
Accesseurs/Manipulateurs Accesseurs/Manipulateurs this est un pointeur sur l’instance courante
Masquage et this Masquage et this
Résumé masquage = un identificateur « cache » un autre identificateur Résumé
this ≃ « mon adresse »
Exemple complet Exemple complet
Opérateur :: Opérateur ::
Situation typique : (le nom d’)un paramètre cache un (nom
Conclusion Conclusion
d’)attribut Syntaxe pour spécifier un attribut en cas d’ambiguïté :
this->nom_attribut
void setHauteur(double hauteur) {
hauteur = hauteur; // Hmm.... pas terrible !
} Exemple :
void setHauteur(double hauteur) {
this->hauteur = hauteur; // Ah, là ça marche !
}

L’utilisation de this est obligatoire dans les situations de



c EPFL 2002–2010
c EPFL 2002–2010 masquage
Jamila Sam Jamila Sam
(mais évitez ces situations !)
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 27 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 28 / 38
Objectifs

Bases de la
Portée des attributs (résumé) Objectifs

Bases de la
Classes = super struct
POO POO

En C++ En C++
class class
Attributs La portée des attributs dans la définition des méthodes peut être Attributs
Méthodes Méthodes
Encapsulation et résumée dans le schéma suivant : Encapsulation et
interface interface
Accesseurs/Manipulateurs Accesseurs/Manipulateurs
Masquage et this Masquage et this
Résumé Résumé
Exemple complet class MaClasse { Exemple complet
Pour résumer à ce stade, une classe c’est une struct
Opérateur :: Opérateur ::
int x;
Conclusion Conclusion ◮ qui contient aussi des fonctions (« méthodes »)
int y;
void une_methode ( int x )
◮ dont certains champs (internes) peuvent être cachés
{ ... (private:)
... y ...
◮ et dont d’autres constituent l’interface (public:)
... x ...
. . . this->x . . .
} ...

};


c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 29 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 30 / 38

Objectifs

Bases de la
Un exemple complet de classe Objectifs

Bases de la
Un exemple complet de classe (2)
POO POO

En C++ En C++
class class
Attributs Attributs
Méthodes Méthodes
Encapsulation et
interface
#include <iostream> Encapsulation et
interface
Accesseurs/Manipulateurs using namespace std; Accesseurs/Manipulateurs
Masquage et this Masquage et this
//utilisation de la classe
Résumé Résumé
Exemple complet
// définition de la classe Exemple complet
Opérateur :: class Rectangle { Opérateur ::
int main() {
public: Rectangle rect;
Conclusion Conclusion
// définition des méthodes double lu;
double surface() const { return (hauteur * largeur); } cout << "Quelle hauteur? "; cin >> lu;
double getHauteur() const { return hauteur; } rect.setHauteur(lu);
double getLargeur() const { return largeur; } cout << "Quelle largeur? "; cin >> lu;
void setHauteur(double hauteur) { this->hauteur = hauteur; } rect.setLargeur(lu);
void setLargeur(double largeur) { this->largeur = largeur; }
cout << "surface = " << rect.surface() << endl;
private:
// déclaration des attributs return 0;
double hauteur; }
double largeur;
};


c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 31 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 32 / 38
Objectifs

Bases de la
Opérateur :: Objectifs

Bases de la
Opérateur :: (2)
POO POO

En C++ En C++ Par exemple, la déclaration de la classe Rectangle pourrait être


class class
Attributs Il est possible d’écrire les définitions des méthodes à l’extérieur de Attributs
(dans rectangle.h) :
Méthodes
Encapsulation et
la déclaration de la classe Méthodes
Encapsulation et
interface interface class Rectangle
Accesseurs/Manipulateurs
Masquage et this
☞ meilleure lisibilité du code, modularisation Accesseurs/Manipulateurs
Masquage et this
{
Résumé Résumé public:
Exemple complet Exemple complet
Opérateur :: Pour relier la définition d’une méthode à la classe pour laquelle Opérateur :: // prototypes des méthodes
Conclusion elle est définie, il suffit d’utiliser l’opérateur :: de résolution de Conclusion double surface() const;
portée :
double hauteur() const;
double largeur() const;
◮ La déclaration de la classe contient les prototypes des
méthodes void hauteur(double);
◮ les définitions correspondantes spécifiées à l’extérieur de la void largeur(double);
déclaration de la classe se font sous la forme :
// déclaration des attributs
typeRetour NomClasse::nomFonction(arg1, arg2, ...) private:
{...} double hauteur_;
double largeur_;

c EPFL 2002–2010
Jamila Sam

c EPFL 2002–2010
Jamila Sam
};

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 33 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 34 / 38

Objectifs

Bases de la
Opérateur :: (3) Objectifs

Bases de la
Objets et Classes en C++
POO POO

En C++ Accompagné des définitions « externes » des méthodes En C++


class MaClasse { ... }; déclare une classe.
class
(dans rectangle.cc) : Conclusion
Attributs
Méthodes
MaClasse obj1; déclare une instance (objet) de la classe
Encapsulation et double Rectangle::surface() const MaClasse
interface
Accesseurs/Manipulateurs {
Masquage et this
return hauteur_ * largeur_; Les attributs d’une classe se déclarent comme des champs d’une
Résumé
Exemple complet } structure : class MaClasse { ... type attribut; ... };
Opérateur ::

Conclusion
double Rectangle::hauteur() const
Les méthodes d’une classe se déclarent comme des fonctions,
{ mais dans la classe elle-même :
return hauteur; class MaClasse { ... type methode(type1 arg1, ...); ... };
} Encapsulation et interface :
class MaClasse {
... // idem pour largeur private: // attributs et methodes privees
...
void Rectangle::hauteur(double h) public: // interface : attributs et methodes publiques
{ ...
hauteur_ = h;
};
}

c EPFL 2002–2010
c EPFL 2002–2010
L’attribut particulier this est un pointeur sur l’instance courante
Jamila Sam ... // idem pour largeur Jamila Sam
de la classe. Exemple d’utilisation : this->monattribut
ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 35 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 36 / 38
Objectifs

Bases de la
Ce que j’ai appris aujourd’hui Objectifs

Bases de la
La suite
POO POO

En C++ En C++

Conclusion Conclusion
◮ quels sont les principes de base de la programmation
orientée-objet : encapsulation, abstraction, héritage et
polymorphisme ;
◮ Exercices de cette semaine :
◮ que l’on peut « encapsuler » données et traitements en
◮ Premiers programmes orientés objets
utilisant des classes d’objets ;
◮ Le prochain cours :
◮ qu’il faut clairement dissocier l’interface (« publique ») de la
◮ Suite des concepts de POO : constructeurs et destructeurs
représentation interne (« privée ») ; ◮ Surcharge des opérateurs
◮ comment réaliser les éléments de base de la POO en C++ : ◮ Ensuite :
◮ attributs et méthodes (d’instances) ; ◮ Héritage
◮ encapsulation et interface : public:, private:, ◮ Polymorphisme
« méthodes get » (accesseurs) et « méthodes set » (manipula- ◮ Héritage multiple
-teurs) ;
◮ l’attribut this et le (dé)masquage.

☞ je peux maintenant mieux concevoir mes programmes grâce


à la programmation orientée objet

c EPFL 2002–2010
c EPFL 2002–2010
Jamila Sam Jamila Sam

ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 37 / 38 ÉC O L E P O L Y T E C H N I Q U E
FÉ DÉR A L E D E L A U S A N N E
Informatique II – Cours 5 : Introduction POO – 38 / 38

Vous aimerez peut-être aussi