1 Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 65 - Classe et Objet Passage d’une structure vers une classe Encapsulation Manipulation des membres privés Initialisation et affectation Le pointeur courant this Constructeur et destructeur Tableaux d’objets Règles de visibilité des objets !!! Surcharge des opérateurs Patrons : Fonctions et classes Amies : fonctions et classes Héritage C++ et Programmation Objet S3 Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 66 - Un objet est une instance du type abstrait «classe» et une classe est un nouveau type de donnée, un modèle qui est caractérisé par : * une identité * un ensemble d’attributs (propriétés) décrivant son état * un ensemble d’opérations/d’actions (méthode, fonction) définissant son comportement. Programmation Orientée Objet (POO) est basée sur la notion d’objet. Nom_Classe Attributs Méthodes A partir de la classe on peut créer plusieurs objets = instances. Ces instances auront les mêmes attributs mais avec des valeurs différentes. On peut aussi faire des fonctions (Méthodes) qui agissent sur les instances. Classe et Objet
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 65 -
Classe et Objet
Passage d’une structure vers une classe
Encapsulation
Manipulation des membres privés
Initialisation et affectation
Le pointeur courant this
Constructeur et destructeur
Tableaux d’objets
Règles de visibilité des objets !!!
Surcharge des opérateurs
Patrons : Fonctions et classes
Amies : fonctions et classes
Héritage
C++ et Programmation Objet
S3
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 66 -
Un objet est une instance du type abstrait «classe» et une classe est un nouveau type de donnée, un modèle qui est caractérisé par :* une identité* un ensemble d’attributs (propriétés) décrivant son état* un ensemble d’opérations/d’actions (méthode, fonction) définissant son comportement.
Programmation Orientée Objet (POO) est basée sur la notion d’objet.
Nom_Classe
Attributs
Méthodes
A partir de la classe on peut créer plusieurs objets = instances.
Ces instances auront les mêmes attributs mais avec des valeurs différentes.
On peut aussi faire des fonctions (Méthodes) qui agissent sur les instances.
Classe et Objet
2
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 67 -
Exemple :
Voiture
MarqueCouleurVitesse
Avancer()Transporter_P()
Classe : Voiture
Objets = instances qui ont les mêmes attributs Marque, Couleur et Vitesse mais avec des
valeurs différentes.
Les fonctions = méthodes qui agissent sur nos instances : Avancer() et Transporter_P().
Ferrari SF90; Rouge; 340. Mercedes Vito; Blanche; 170.
Classe Instances
Classe et Objet
Nom_Classe
Attributs
Méthodes
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 68 -
Classe
Instances
Compte Bancaire
Numéro Solde
Ouvrir()Fermer()Déposer()Retirer()méthodes
attributs
Classe et Objet
Exemple :
3
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 69 -
Une Affaire de Détails
John Lee HancockJohn Lee Hancock
2021
Anna
Luc BessonLuc Besson
2019 Naruto the Last, le film
Tsuneo KobayashiMasashi
Kishimoto
2015
Classe et Objet
Exemple :
Nom_Film
RéalisationScénario
Date de sortie
Kung Fu Panda
Mark OsborneEthan Reiff
2008
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 70 -
Cardiologues
NomPrénom
Code_INAMI
Action_1()Action_2()
Dentistes
NomPrénom
Code_INAMI
Action_3()Action_4()
Radiologues
NomPrénom
Code_INAMI
Action_5()Action_6()
Classe et Objet
Exemple :
Médecin
NomPrénom
Code_INAMI
Action_I()Action_II()
4
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 71 -
Un objet est une instanciation d’une classe.
Cet objet possède tous les attributs et toutes les fonctions membres de la classe,
mais avec des valeurs d’attributs propres à l’objet.
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 72 -
Diagramme de classes (class diagram)
Diagramme de séquence (sequencediagram)
Diagramme de cas d’utilisation (use case diagram)…
Structure
Comportement
Fonctionnalité
Modélisation
13 types de diagrammes
Classe et Objet
5
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 73 -
Le diagramme de classes est considéré comme le plus important de la modélisation orientée objet.
Relations entre classes
Une association est une relation entre deux classes (association binaire) ou plus (association n-aire), qui décrit les connexions structurelles entre leurs instances.
Personne ComptePropriétaire
1
Possède
0 .. N
Une classe peut être composée de plusieurs classes (Voiture contient des roues).
Voiture MoteurRoue 1 14 1
ModélisationClasse et Objet
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 74 -
• initialise pour attribuer des valeurs aux "coordonnées" d'un point ;• affiche pour afficher un point .
struct point {int x ; int y ;
void initialise (int, int) ;void affiche () ;
} ;
X1Y1initialise();affiche();
X2Y2initialise();affiche();
X3Y3initialise();affiche();
…
comportant des fonctions membres
structure + fonctions
Fonctions membres :
Structure
6
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 75 -
#include <iostream>using namespace std ;
struct point {int x, y ; void initialise (int, int) ;void affiche () ;
} ;
void point::initialise (int abs, int ord) {x = abs ; y = ord ;
}
void point::affiche () {cout << "Je suis en " << x << " " << y << endl ;}
void Affiche2(point A, point B) { // fonction non membre
cout << "\n ....Je suis dans Affiche2 ...."<<"\n" ;A.affiche();B.affiche();
}
point::initialise
opérateur de "résolution de portée"
structure + fonctions
Définition et déclaration des fonctions membresStructure
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 76 -
Je suis en 5 2Je suis en 1 -1
..Je suis dans Affiche2 ..Je suis en 5 2Je suis en 10 30
#include <iostream> …
struct point { int x, y ; void initialise (int, int) ;void affiche () {
cout << "Je suis en " << x << " " << y << endl ;}
} ;
void point::initialise (int abs, int ord) {x = abs ; y = ord ;
}
void Affiche2(point A, point B) { // fonction non membre
cout << "\n ..Je suis dans Affiche2 .."<<"\n" ;A.affiche(); B.affiche();
}
void main() { point a, b, c ; // on peut accéder aux "membre " avec .
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 81 -
Tache
N° IdNomDébutFin…
Partenaire
Code.PartNomDescription…
Projet
Code.ProjIntituléDébutFin…
Structure oui, mais!!
Modélisation de la Gestion de projet
Est composéEst associé
Rôle1,N1,1 0,N0,N
Tache
# Id : intNom : stringDébut : dateFin : date…
Partenaire
Code.PartNomDescription…
Projet
Code.ProjIntituléDébutFin…
1..
Est associé
Rôle : string…
Modèle UML
Modèle C.D.
structure + fonctions
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 82 -
struct Patient {// Données membres
string Nom, Prenom; string maladies;
// Fonctions membres
void Saisir ();void Afficher ();
};
struct Medecin {// Données membres
string Nom, Prenom; string INAMI;
// Fonctions membres
void Saisir ();void Afficher ();
};
struct Client {// Données membres
string Nom; string Adresse;
// Fonctions membres
void Saisir ();void Afficher ();
};
Structure oui, mais!!
struct Banque {// Données membres
string Nom; …
};
structure + fonctions
10
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 83 -
Tous les attributs d'une classe doivent "toujours" être privéspour ne pas être modifier depuis l'extérieur de la classe.
On ne peut accéder à un objet que grâce à ses méthodes publiques (l'interface de l'objet).
Classe & Objet
Classe et Objet
masquage des données
Accessibles depuisl'extérieur de la classe
class Patient {private:// Données membres
string Nom, Prenom; string maladies;
public :// Fonctions membres
void Saisir ();void Afficher ();
};
Cachées auxfonctions externes
L’encapsulation est un concept OO qui permet de protéger l’information contenue dans un objet.
Données privées → accès uniquement par les fonctions membres (public)
Encapsulation
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 84 -
Ces mots clés peuvent apparaître à plusieurs reprises dans la définition d'une classe.
class X { private :
...public :
...private :
...protected :
...} ;
Un membre déclaré public dans une classe peut être accédé par toutes les autres classes et fonctions.
Un membre déclaré private dans une classe ne peut être accédé que par les autres membres de cette même classe.
Un membre déclaré protected dans une classe ne peut être accédé que par les autres membres de cette même classe ainsi que par les membres des classes dérivées.
masquage des données
Classe et Objet
Encapsulation
11
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 85 -
Structure d’une classe
class point {private :int x ; int y ;
public :void initialise (int, int) ;void affiche () ;
} ;
Données
Méthodes
class Voiture {public: ...private:
Roue roueAvantGauche;Roue roueAvantDroite;…
}
class Roue { public: ... private: ...
};
Point
- x: int- y : int
+ initialise(int,int) : void
+ affiche() : int
EncapsulationClasse et Objet
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 86 -
class point {private :int x ; int y ;
public :void initialise (int, int) ;void affiche () ;
} ;
class point {
int x ; int y ;
public :void initialise (int, int) ;void affiche () ;
} ;
class point {public :int x ; int y ;
void initialise (int, int) ;void affiche () ;
} ;
struct point {
int x ; int y ;
void initialise (int, int) ;void affiche () ;
} ;
Structure d’une classeEncapsulation
Classe et Objet
12
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 87 -
void point::initialise (int abs, int ord) {x = abs ; y = ord ;
}void point::affiche () {cout << "Je suis en " << x << " " << y << "\n" ;
}
void main() { point a, c ; a.initialise (5, 2) ; a.affiche () ; a.z = 9;cout << " Valeur de z = " << a.z << endl;
c.z = 15;cout << " Valeur de z = " << c.z << endl;
c.x = 10; c.y=30;c.affiche ();
}
class point { private: int x, y;public :int z;void initialise (int, int) ;void affiche () ;
} ;
struct point { int x, y;
int z;void initialise (int, int) ;void affiche () ;
} ;
error C2248: 'point::x' : impossible d'accéder à private membre déclaré(e) dans la classe 'point'
Je suis en 5 2Valeur de z = 9Valeur de z = 15Je suis en 10 30
Exécution
Classe et Objet
Classe & Objet
Encapsulation
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 88 -
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 95 -
Le constructeur :* porte le nom de sa classe,* définit l'initialisation d'une instance, * est appelé implicitement à toute création d'instance, * n'a pas de type de retour (même pas void), * peut admettre des arguments qui sont en fait les valeurs
d’initialisation des différents champs de la variable.
class point {int x, y ;
public :
point (int, int) ; // constructeur
point (float, float) ; // constructeur
point () ; // constructeur
} ;
Un constructeur est une fonction membre d’initialisation exécutée automatiquement à chaque création d'un objet.
Constructeur et destructeur
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 96 -
Le destructeur :* porte le nom de sa classe précédé d'un tilde (~),* définit la "désinitialisation" d'une instance, * est appelé implicitement à toute disparition d'instance, * n'a pas de type de retour (même pas void), * est une fonction membre non typée et sans paramètre.
class point {int x, y ;
public :
point (int, int) ; // constructeur
point () ; // constructeur
~point () ; // 1 destructeur
} ;
Possibilité de plusieurs constructeurs (surcharge de méthodes) mais un seul destructeur par classe !
Un destructeur est une fonction membre appelée automatiquement au moment de la destruction de l'objet.
Constructeur et destructeur
17
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 97 -
Un constructeur par défaut est un constructeur qui n’a pas d’argument ou dont tous les arguments ont des valeurs par défaut.
A::A(); // Sans arguments ! A::A(int X=0, int Y=5); // Valeurs par défaut des arguments !
Rôle : il crée une instance non initialisée quand aucun autre constructeur fourni n’est applicable.
class Etudiant {private : int Id ;
string Nom ;public :
Etudiant() { // Constructeurcout << "Dans constructeur"<<endl; Id = -1 ; Nom = "Vide";
}
};
class point {int x, y ;
public :point () { // constructeur
x = 0; y = 0;}~ point () { // destructeur
x= -1; y = -1;}
} ;
Les données membres sont créées mais ne sont pas initialisées
Constructeur par défaut
Constructeur & destructeur
A::A(); exemple :
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 98 -
Exemple de constructeur par défaut sans paramètres
Exécution
Constructeur & destructeur
Constructeur par défaut
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 100 -
class Cpte_obj {static int ctr; // compteur du nombre d'objets créés
public:Cpte_obj();~Cpte_obj();
};
// initialisation du membre statique ctr
int Cpte_obj::ctr = 0;
Cpte_obj::Cpte_obj() { // constructeurcout << "++ constr. il y a : " << ++ctr << " objet(s)\n";
}
Cpte_obj::~Cpte_obj() { // destructeurcout << "-- destr. il reste " << --ctr << " objet(s)\n";
}
void fct() {Cpte_obj u, v;
}
int main() {Cpte_obj A; fct () ;Cpte_obj B ;return 1;
}
++ constr. il y a : 1 objet(s)++ constr. il y a : 2 objet(s)++ constr. il y a : 3 objet(s)-- destr. il reste 2 objet(s)-- destr. il reste 1 objet(s)++ constr. il y a : 2 objet(s)-- destr. il reste 1 objet(s)-- destr. il reste 0 objet(s)
Exécution
Compter le nombre d’instances d’une classe actives à un moment donné dans un programme.◮ le constructeur incrémente le compteur ctr ◮ le destructeur le décrémente
Constructeur & destructeur
Exemple de constructeur par défaut sans paramètres
Constructeur par défaut
19
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 101 -
class Etudiant {private : int Id ; char code ;public:Etudiant() { // Constructeur
cout << "Dans constructeur"<<endl; static i=1; // compteur du nombre d'objets créés
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 114 -
#include <iostream>using namespace std;
class point { int x, y;public:point(int abs, int ord) { x = abs; y = ord;cout << "++ Construction d'un point : " << x << " " << y << "\n";
}~point() { cout << "-- Destruction du point : " << x << " " << y << "\n";
}};
point a(1, 1); // variable globale construite avant le début //de l’exécution de la fonction main
void fct() {cout << " ====== Debut Fct \n";point b(10, 10), c(3, 3); // Local dans la fonctioncout << " ====== Fin Fct \n";}void main() {cout << "****** Debut main *****\n";fct();point d(20, 20);for (int i = 1; i<3; i++) {cout << " ---->> Boucle tour numero " << i << "\n";point b(i, 2 * i); // objets créés dans un bloc}
cout << "****** Fin main ******\n";}
****** Debut main *****====== Debut Fct
++ Construction d'un point : 10 10++ Construction d'un point : 3 3
====== Fin Fct-- Destruction du point : 3 3-- Destruction du point : 10 10++ Construction d'un point : 20 20--->> Boucle tour numero 1++ Construction d'un point : 1 2-- Destruction du point : 1 2--->> Boucle tour numero 2++ Construction d'un point : 2 4-- Destruction du point : 2 4****** Fin main ******-- Destruction du point : 20 20
++ Construction d'un point : 1 1
-- Destruction du point : 1 1
Exécution
Exemple
26
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 115 -
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 116 -
Le constructeur de copie (ou de recopie) est spécialisé dans la création etl’initialisation d’un objet à partir d’un autre objet pris comme modèle. Il est doncappelé lorsqu’on doit créer une instance d’un objet qui est la copie d’un autre objet.
C’est un constructeur dont le premier paramètre est de type « C & » (référence surun C) ou « const C &» (référence sur un C constant) et dont les autres paramètres,s'ils existent, ont des valeurs par défaut.
La syntaxe habituelle d’un constructeur de copie est la suivante :point::point(const point& Pt) // Pt est l'objet à copierpoint(const point& Pt) // Si définition dans la classe
Constructeur & destructeur
Constructeur de copie
27
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 117 -
Un constructeur qui sert à créer un objet identique à l’objet reçu en paramètre.
Constructeur de copie Objet dynamique
28
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 119 -
La plupart des constructeurs ne font qu’initialiser les données membres de l’objet. Le C++ propose un dispositif appelé liste d’initialisation. L’exemple suivant illustre comment on peut réécrire les constructeurs des différents exemples à l’aide d’une liste d’initialisation.
Listes d’initialisation des constructeurs
Etudiant() {Id = -1 ; Nom = "Vide";
}
Etudiant() : Id (-1) , Nom ("Vide") { }
point (int abs, int ord) {x = abs ; y = ord ; }
point (int abs, int ord) : x (abs) , y (ord) { }
CRec (int Lo = 0, int La = 0) {Long = Lo; Larg = La;
}
CRec (int Lo = 0, int La = 0) : Long (Lo) , Larg (La) { }
Constructeur & destructeur
Université de Mons 2021-2022- M. Benjelloun M.O.O._P1 - 120 -
L’utilisation d'un constructeur n'est pas obligatoire lorsqu'il n'est pas nécessaire.
Et surtout pas d’utilisation de constructeur vide.