Académique Documents
Professionnel Documents
Culture Documents
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
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.
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
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 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 :
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
Exemple :
Rectangle rect1;
É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
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 ::
É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 !
}
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
É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
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.
É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