SlideShare une entreprise Scribd logo
1  sur  22
Introduction au C++ 
Chap 2 : classes et objets 
M. DIENG Abdoulaye
Classes et objets 
1. Abstraction 
2. Définition d’une classe 
3. Déclaration d’un attribut 
4. Définition d’une méthode 
5. Instanciation d’une classe 
6. Constructeurs 
7. Accès aux membres d’un objet 
8. Les membres de classe 
9. Destructeur 
10. L’encapsulation
Abstraction 
hauteur : 5 
largeur : 2,5 
surface= 12,5 
hauteur : 3 
largeur : 5,5 
surface= 16,5 
hauteur : 3,5 
largeur : 3,5 
surface= 12,25 
hauteur : 
largeur : 
surface= hauteur x largeur 
spécifique 
a 
b 
s 
t 
r 
a 
c 
t 
i 
o 
n 
générique
Abstraction 
• Le processus d’abstraction consiste à identifier et à regrouper des 
caractérisations et des traitements communs à la totalité d’un 
ensemble d’entités ou de concepts variés. 
• Ces caractérisations et traitements constituent une description 
générique des éléments de l’ensemble considéré. 
• Une représentation abstraite commune de ces éléments permet 
d'en simplifier la manipulation. 
• Exemple : 
1) les notions de «largeur» et «hauteur» sont des propriétés 
communes à l’ensemble des rectangles ; 
2) de même que le calcul de la «surface» d’un rectangle
Abstraction 
Objet ≈ variable du type représenté par la 
classe. 
Classe 
(description générique abstraite) 
hauteur : 
largeur : 
surface= … 
Le processus d’abstraction => la notion de classe 
Classe = factorisation des caractérisations et 
mécanismes communs 
Classe = moule pour la création des objets 
Classe ≈ type 
Objet 
(réalisation spécifique concrète)
Définition d’une classe 
Une syntaxe possible pour la définition d’une classe est : 
class <nom de classe> { 
public : 
// déclaration des attributs 
... 
// prototypes et définitions des méthodes 
... 
};// N’oubliez pas ce ; après l'accolade
Déclaration d’un attribut 
• La syntaxe de déclaration des attributs est la syntaxe 
classique de déclaration des variables : 
<type> <identificateur d’attribut>; 
• Exemple : 
float hauteur; 
float largeur; 
• Contrairement aux variables simples, les attributs ne 
peuvent être directement initialisés lors de leur 
déclaration. 
• Pour réaliser ces initialisations, on définira des méthodes 
particulières, appelées constructeurs
Définition d’une méthode 
• La syntaxe de définition des méthodes est la syntaxe classique de 
définition des fonctions 
• La définition d’une méthode peut se faire soit dans celle de la classe 
(méthode inline), soit séparément. 
• Dans le second cas, l’opérateur de résolution de portée ::est 
nécessaire pour désigner la classe. 
• Syntaxe: 
<typeRslt> [<nomClasse>::]<nomMethode>(arg,…){ 
<corps de la méthode> 
} 
• Exemple : 
float Rectangle::surface(){ 
return (hauteur*largeur);// attributs visibles 
}
Accès à un attribut masqué 
• Si, dans une méthode, un attribut est masqué il peut tout de 
même être référencé, à l’aide du mot-clef this 
• La syntaxe est alors la suivante : 
this -> <nom de l’attribut> 
ou (*this) . <nom de l’attribut> 
• Exemple : 
void changeHauteur(float hauteur){ 
if (hauteur > 0){ 
this->hauteur = hauteur; 
} 
} 
• this est un pointeur qui pointe sur l’objet en cours d’exécution 
au moment de l’appel de la méthode.
Exemple d’une classe 
class Rectangle{ 
public: 
// déclaration des attributs 
float hauteur; 
float largeur; 
// prototypage et définition des méthodes 
float surface(){ 
return (hauteur * largeur); 
} 
void changeHauteur(float hauteur){ 
if (hauteur > 0) 
this->hauteur = hauteur; 
} 
};
Instanciation d’une classe 
• Les classes sont considérées comme des types à part entière. 
• Instanciation statique : 
<NomClasse> <nomInstance>; 
• Instanciation dynamique : 
<NomClasse> *<nomPointeur> = new <NomClasse>; 
• Exemples : 
Rectangle r1; 
Rectangle *p_rect=new Rectangle;
Constructeurs (1/4) 
• Un constructeur est une méthode particulière qui est appelée 
lors de la création d’un objet. 
• Un constructeur porte le même nom que la classe 
• Un constructeur peut admettre zéro, un ou plusieurs 
arguments et n’a pas de valeur de retour (même pas void). 
• Sa tâche principale est d’initialiser les attributs de l’objet. 
• Il peut aussi ouvrir des fichiers ou des connexions. 
• Si une classe ne définit pas explicitement de constructeur, un 
constructeur par défaut sans arguments et qui n’effectue 
aucune initialisation particulière est invoquée. 
• Ce constructeur par défaut ne peut plus être invoqué s’il existe 
un constructeur explicite 
• Une classe peut admettre plusieurs constructeurs.
Constructeurs (2/4) 
• Le corps d’un constructeur est précédé d’une section 
optionnelle introduite par «:», spécifiquement réservée à 
l’initialisation des attributs. 
• Il est bien sûr possible de changer la valeur d’un attribut 
initialisé ou d’affecter une valeur à un attribut non initialisé 
dans le corps du constructeur. 
• Un constructeur peut admettre des arguments pour lesquels 
une valeur par défaut est spécifiée.
Constructeurs (3/4) 
• Syntaxe : 
NomClasse(<arguments>) 
: <attribut1>(<valeur1>), 
... 
<attributn>(<valeurn>) 
{ 
// autres opérations 
}
Constructeurs (4/4) 
• Exemple 1 : 
Rectangle(float h, float l=10) 
: hauteur(h), 
largeur(l) 
{ } 
• Exemple 2 : 
Rectangle(float h, float l) 
: hauteur(h) 
{ 
float t(2*l - h % 2); 
largeur = t; 
} 
• Exemple 3 : 
Rectangle(float dim) 
: hauteur(dim), 
largeur(dim) 
{ }
Initialisation d’un objet avec un 
constructeur 
• La syntaxe de la déclaration avec initialisation d’une instance 
est identique à celle d’une déclaration avec initialisation d’une 
variable ordinaire. 
• Syntaxes: 
<NomClasse> <NomInstance>(val1, val2,...); 
<NomClasse> * <NomPointeur> = new <NomClasse> (val1, val2,...); 
• NB : le nombre et les types des valeurs d’initialisation doivent 
se conformer à un constructeur 
• Exemples : 
Rectangle r1(8.5,11); 
Rectangle r2(12.5); 
Rectangle *p_rect=new Rectangle(1.5,3);
Accès aux membres d’un objet 
• Accès à un attribut : 
<nomInstance>.<nomAttribut> 
<nomPointeur> -> <nomAttribut> 
Exemples : 
r1.largeur = 13; 
p_rect->hauteur = 5; 
• NB : le principe de l’encapsulation interdit l’accès direct à un 
attribut. 
• Accès à une méthode : 
<nomInstance>.<nomMéthode>([<arg1>, ...]) 
<nomPointeur> -> <nomMéthode>([<arg1>, ...]) 
Exemple : 
cout << "La surface du premier rectangle est de " 
cout << r1.surface();
Attribut de classe 
• Attribut qui existe même si aucun objet de la classe n’est créé. 
Exemple : le nombre de rectangles créés 
• Déclaré en se servant du mot clé static 
Exemple : static unsigned int nbRectanglesCrees; 
• Accessible en le préfixant du nom de la classe suivi de :: 
Exemple : Rectangle::nbRectanglesCrees 
• Obligatoirement initialisé lors de sa définition (à l’ext. de la classe) 
Exemple : unsigned int Rectangle::nbRectanglesCrees=0; 
• Un attribut de classe est appelé constante de classe lorsque sa 
valeur initiale est fixe durant toute l’exécution du programme 
• Une constante de classe est déclarée avec le mot clé const 
Exemple de déclaration : static const float TVA; 
Exemple de définition : const float Voiture::TVA=0.18;
Méthode de classe 
• Une méthode de classe exécute une action indépendante 
d’une instance particulière de la classe 
• Elle permet de manipuler des attributs ou des constantes de 
classe 
• Elle ne doit pas manipuler une variable d’instance 
• Elle est déclarée avec le mot clé static. 
• Elle est accessible comme une variable de classe
Destructeur 
• Un destructeur est une méthode particulière qui est invoquée 
automatiquement en fin de vie d’une instance (sortie du bloc 
où elle a été déclarée ou destruction explicite par delete). 
• Un destructeur porte le même nom (précédé du caractère 
« ~ ») que la classe et n’a ni de valeur de retour, ni argument. 
• Son rôle est d’assurer la libération des ressources (portion de 
mémoire, fichier, BDD, etc) éventuellement mobilisées. 
• Toute classe admet exactement un seul destructeur. 
• Si une classe ne définit pas explicitement de destructeur, un 
destructeur par défaut est invoquée.
Encapsulation (1/2) 
• L'encapsulation est un mécanisme consistant à empêcher 
l'accès aux données par un autre moyen que les services 
(méthodes) proposés : 
o chaque objet = boîte noire pour ses utilisateurs 
o les utilisateurs n'ont accès qu’à l'interface publique 
• Ce mécanisme permet de : 
o garantir l'intégrité des données contenues dans l'objet ; 
o simplifier l'utilisation des objets en masquant l'ensemble 
des attributs et des méthodes qui sont utiles simplement au 
fonctionnement interne des objets.
Encapsulation (2/2) 
• L’encapsulation est implémentée par trois niveaux de 
protections pour les membres d’une classe. 
• Dans l’ordre croissant de protection, on a : 
1) public : le membre est accessible de partout 
2) protected : le membre n’est accessible que dans la classe 
dans laquelle il est déclaré et dans les classes dérivées (à 
voir) de celle-ci. 
3) private : le membre n’est accessible que dans la classe dans 
laquelle il est déclaré. 
• Par défaut, les membres d’une classe sont privés 
• Les « accesseurs » sont des méthodes publiques qui 
permettent de consulter les attributs privés si nécessaire. 
• Les « mutateurs » sont des méthodes publiques qui 
permettent de modifier (sous contrôle) les attributs privés si 
nécessaire.

Contenu connexe

Tendances

Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de baseAbdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage CAbdoulaye Dieng
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++Abdoulaye Dieng
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objetAmir Souissi
 
Csharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interfaceCsharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interfaceAbdoulaye Dieng
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JSAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generaleAmir Souissi
 
Héritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIHéritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIJihenHedhli1
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 

Tendances (20)

Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de base
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage C
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
POO
POOPOO
POO
 
Csharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interfaceCsharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interface
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Cpp3 : heritage
Cpp3 : heritageCpp3 : heritage
Cpp3 : heritage
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Part1
Part1Part1
Part1
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generale
 
Héritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIHéritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLI
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 

En vedette

Diagramme de classe
Diagramme de classeDiagramme de classe
Diagramme de classeIlhem Daoudi
 
Presentación1
Presentación1Presentación1
Presentación1jerks
 
Relaciones de access
Relaciones de accessRelaciones de access
Relaciones de accessAdrian Arias
 
trabajando con las ecuaciones
trabajando con las ecuacionestrabajando con las ecuaciones
trabajando con las ecuacionesalejixx14
 
Resellers altaenbuscadores.cl
Resellers altaenbuscadores.clResellers altaenbuscadores.cl
Resellers altaenbuscadores.claltaenbuscadores
 
Pytong 2013 : Documentation utilisateur, conseils et bonnes pratiques
Pytong 2013 : Documentation utilisateur, conseils et bonnes pratiquesPytong 2013 : Documentation utilisateur, conseils et bonnes pratiques
Pytong 2013 : Documentation utilisateur, conseils et bonnes pratiquesYohannGabory
 
Solemne 1 empresa y sociedad
Solemne 1 empresa y sociedadSolemne 1 empresa y sociedad
Solemne 1 empresa y sociedadvanisnisnis
 
Metalurgicafierros 110711082410-phpapp01
Metalurgicafierros 110711082410-phpapp01Metalurgicafierros 110711082410-phpapp01
Metalurgicafierros 110711082410-phpapp01Felipe Aliaga
 
Programa
ProgramaPrograma
ProgramaRienzi
 
Cul es la estructura de una bd
Cul es la estructura de una bdCul es la estructura de una bd
Cul es la estructura de una bdJeison Gualteros
 
Trabajo de informatica de hardware
Trabajo de informatica de hardwareTrabajo de informatica de hardware
Trabajo de informatica de hardwarePLANZ
 
Réalisation pas à pas d'une fiche contenu
Réalisation pas à pas d'une fiche contenu Réalisation pas à pas d'une fiche contenu
Réalisation pas à pas d'une fiche contenu Helene Weber
 

En vedette (20)

Diagramme de classe
Diagramme de classeDiagramme de classe
Diagramme de classe
 
Presentación1
Presentación1Presentación1
Presentación1
 
Relaciones de access
Relaciones de accessRelaciones de access
Relaciones de access
 
trabajando con las ecuaciones
trabajando con las ecuacionestrabajando con las ecuaciones
trabajando con las ecuaciones
 
como crear tu propio blog
como crear tu propio blogcomo crear tu propio blog
como crear tu propio blog
 
Diseño actividad 1
Diseño actividad 1Diseño actividad 1
Diseño actividad 1
 
Resellers altaenbuscadores.cl
Resellers altaenbuscadores.clResellers altaenbuscadores.cl
Resellers altaenbuscadores.cl
 
Pytong 2013 : Documentation utilisateur, conseils et bonnes pratiques
Pytong 2013 : Documentation utilisateur, conseils et bonnes pratiquesPytong 2013 : Documentation utilisateur, conseils et bonnes pratiques
Pytong 2013 : Documentation utilisateur, conseils et bonnes pratiques
 
Solemne 1 empresa y sociedad
Solemne 1 empresa y sociedadSolemne 1 empresa y sociedad
Solemne 1 empresa y sociedad
 
Metalurgicafierros 110711082410-phpapp01
Metalurgicafierros 110711082410-phpapp01Metalurgicafierros 110711082410-phpapp01
Metalurgicafierros 110711082410-phpapp01
 
Programa
ProgramaPrograma
Programa
 
Herramientas digitales
Herramientas digitalesHerramientas digitales
Herramientas digitales
 
Perceptrón
PerceptrónPerceptrón
Perceptrón
 
Volleyball
VolleyballVolleyball
Volleyball
 
Cul es la estructura de una bd
Cul es la estructura de una bdCul es la estructura de una bd
Cul es la estructura de una bd
 
Tarea 9
Tarea 9Tarea 9
Tarea 9
 
Trabajo de informatica de hardware
Trabajo de informatica de hardwareTrabajo de informatica de hardware
Trabajo de informatica de hardware
 
Réalisation pas à pas d'une fiche contenu
Réalisation pas à pas d'une fiche contenu Réalisation pas à pas d'une fiche contenu
Réalisation pas à pas d'une fiche contenu
 
Taller
TallerTaller
Taller
 
Quimioterapia 32
Quimioterapia 32Quimioterapia 32
Quimioterapia 32
 

Similaire à Cpp2 : classes et objets

fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxTarikElMahtouchi1
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
Chap 03 poo en java partie1
Chap 03 poo en java partie1Chap 03 poo en java partie1
Chap 03 poo en java partie1Yassine Badri
 
c# programmation orientée objet (Classe & Objet)
c# programmation orientée objet (Classe & Objet)c# programmation orientée objet (Classe & Objet)
c# programmation orientée objet (Classe & Objet)Mahfoud EL HOUDAIGUI
 
UML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouriUML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouriMansouri Khalifa
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Chap 03 poo en java partie2
Chap 03 poo en java partie2Chap 03 poo en java partie2
Chap 03 poo en java partie2Yassine Badri
 
Formation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetFormation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetkemenaran
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scalaSOAT
 

Similaire à Cpp2 : classes et objets (20)

Les Classe en Java
Les Classe en JavaLes Classe en Java
Les Classe en Java
 
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Chap 03 poo en java partie1
Chap 03 poo en java partie1Chap 03 poo en java partie1
Chap 03 poo en java partie1
 
XB-Java.ppt
XB-Java.pptXB-Java.ppt
XB-Java.ppt
 
Cours_Java.pdf
Cours_Java.pdfCours_Java.pdf
Cours_Java.pdf
 
c# programmation orientée objet (Classe & Objet)
c# programmation orientée objet (Classe & Objet)c# programmation orientée objet (Classe & Objet)
c# programmation orientée objet (Classe & Objet)
 
Langage C#
Langage C#Langage C#
Langage C#
 
UML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouriUML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouri
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
Cours de JAVA de base
Cours de JAVA  de baseCours de JAVA  de base
Cours de JAVA de base
 
POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
 
Chapitre3 2013 POO
Chapitre3 2013 POOChapitre3 2013 POO
Chapitre3 2013 POO
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Chap 03 poo en java partie2
Chap 03 poo en java partie2Chap 03 poo en java partie2
Chap 03 poo en java partie2
 
poo.pdf
poo.pdfpoo.pdf
poo.pdf
 
De Java à .NET
De Java à .NETDe Java à .NET
De Java à .NET
 
Formation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetFormation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objet
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
 

Plus de Abdoulaye Dieng

Fondamentaux du Référencement naturel
Fondamentaux du Référencement naturelFondamentaux du Référencement naturel
Fondamentaux du Référencement naturelAbdoulaye Dieng
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobilesAbdoulaye Dieng
 
Prise en main de WordPress
Prise en main de WordPressPrise en main de WordPress
Prise en main de WordPressAbdoulaye Dieng
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API RESTAbdoulaye Dieng
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJSAbdoulaye Dieng
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express jsAbdoulaye Dieng
 
Cours référencement naturel supdeco techonologie avril-15
Cours référencement naturel supdeco techonologie avril-15Cours référencement naturel supdeco techonologie avril-15
Cours référencement naturel supdeco techonologie avril-15Abdoulaye Dieng
 
Cours CSS feuilles de style en cascade- mars 2015
Cours CSS feuilles de style en cascade- mars 2015Cours CSS feuilles de style en cascade- mars 2015
Cours CSS feuilles de style en cascade- mars 2015Abdoulaye Dieng
 
Architecture ordinateur-echange-de-donnees
Architecture ordinateur-echange-de-donneesArchitecture ordinateur-echange-de-donnees
Architecture ordinateur-echange-de-donneesAbdoulaye Dieng
 
Architecture des ordinateurs : microprocesseur
Architecture des ordinateurs : microprocesseurArchitecture des ordinateurs : microprocesseur
Architecture des ordinateurs : microprocesseurAbdoulaye Dieng
 
Architecture des ordinateurs : memoires
Architecture des ordinateurs : memoiresArchitecture des ordinateurs : memoires
Architecture des ordinateurs : memoiresAbdoulaye Dieng
 
Introduction aux bases de données
Introduction aux bases de donnéesIntroduction aux bases de données
Introduction aux bases de donnéesAbdoulaye Dieng
 

Plus de Abdoulaye Dieng (19)

Fondamentaux du Référencement naturel
Fondamentaux du Référencement naturelFondamentaux du Référencement naturel
Fondamentaux du Référencement naturel
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobiles
 
Prise en main de WordPress
Prise en main de WordPressPrise en main de WordPress
Prise en main de WordPress
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
 
Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
Introduction à HTML 5
Introduction à HTML 5Introduction à HTML 5
Introduction à HTML 5
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
Cours référencement naturel supdeco techonologie avril-15
Cours référencement naturel supdeco techonologie avril-15Cours référencement naturel supdeco techonologie avril-15
Cours référencement naturel supdeco techonologie avril-15
 
Cours CSS feuilles de style en cascade- mars 2015
Cours CSS feuilles de style en cascade- mars 2015Cours CSS feuilles de style en cascade- mars 2015
Cours CSS feuilles de style en cascade- mars 2015
 
Architecture ordinateur-echange-de-donnees
Architecture ordinateur-echange-de-donneesArchitecture ordinateur-echange-de-donnees
Architecture ordinateur-echange-de-donnees
 
Architecture des ordinateurs : microprocesseur
Architecture des ordinateurs : microprocesseurArchitecture des ordinateurs : microprocesseur
Architecture des ordinateurs : microprocesseur
 
Architecture des ordinateurs : memoires
Architecture des ordinateurs : memoiresArchitecture des ordinateurs : memoires
Architecture des ordinateurs : memoires
 
Introduction aux bases de données
Introduction aux bases de donnéesIntroduction aux bases de données
Introduction aux bases de données
 

Cpp2 : classes et objets

  • 1. Introduction au C++ Chap 2 : classes et objets M. DIENG Abdoulaye
  • 2. Classes et objets 1. Abstraction 2. Définition d’une classe 3. Déclaration d’un attribut 4. Définition d’une méthode 5. Instanciation d’une classe 6. Constructeurs 7. Accès aux membres d’un objet 8. Les membres de classe 9. Destructeur 10. L’encapsulation
  • 3. Abstraction hauteur : 5 largeur : 2,5 surface= 12,5 hauteur : 3 largeur : 5,5 surface= 16,5 hauteur : 3,5 largeur : 3,5 surface= 12,25 hauteur : largeur : surface= hauteur x largeur spécifique a b s t r a c t i o n générique
  • 4. Abstraction • Le processus d’abstraction consiste à identifier et à regrouper des caractérisations et des traitements communs à la totalité d’un ensemble d’entités ou de concepts variés. • Ces caractérisations et traitements constituent une description générique des éléments de l’ensemble considéré. • Une représentation abstraite commune de ces éléments permet d'en simplifier la manipulation. • Exemple : 1) les notions de «largeur» et «hauteur» sont des propriétés communes à l’ensemble des rectangles ; 2) de même que le calcul de la «surface» d’un rectangle
  • 5. Abstraction Objet ≈ variable du type représenté par la classe. Classe (description générique abstraite) hauteur : largeur : surface= … Le processus d’abstraction => la notion de classe Classe = factorisation des caractérisations et mécanismes communs Classe = moule pour la création des objets Classe ≈ type Objet (réalisation spécifique concrète)
  • 6. Définition d’une classe Une syntaxe possible pour la définition d’une classe est : class <nom de classe> { public : // déclaration des attributs ... // prototypes et définitions des méthodes ... };// N’oubliez pas ce ; après l'accolade
  • 7. Déclaration d’un attribut • La syntaxe de déclaration des attributs est la syntaxe classique de déclaration des variables : <type> <identificateur d’attribut>; • Exemple : float hauteur; float largeur; • Contrairement aux variables simples, les attributs ne peuvent être directement initialisés lors de leur déclaration. • Pour réaliser ces initialisations, on définira des méthodes particulières, appelées constructeurs
  • 8. Définition d’une méthode • La syntaxe de définition des méthodes est la syntaxe classique de définition des fonctions • La définition d’une méthode peut se faire soit dans celle de la classe (méthode inline), soit séparément. • Dans le second cas, l’opérateur de résolution de portée ::est nécessaire pour désigner la classe. • Syntaxe: <typeRslt> [<nomClasse>::]<nomMethode>(arg,…){ <corps de la méthode> } • Exemple : float Rectangle::surface(){ return (hauteur*largeur);// attributs visibles }
  • 9. Accès à un attribut masqué • Si, dans une méthode, un attribut est masqué il peut tout de même être référencé, à l’aide du mot-clef this • La syntaxe est alors la suivante : this -> <nom de l’attribut> ou (*this) . <nom de l’attribut> • Exemple : void changeHauteur(float hauteur){ if (hauteur > 0){ this->hauteur = hauteur; } } • this est un pointeur qui pointe sur l’objet en cours d’exécution au moment de l’appel de la méthode.
  • 10. Exemple d’une classe class Rectangle{ public: // déclaration des attributs float hauteur; float largeur; // prototypage et définition des méthodes float surface(){ return (hauteur * largeur); } void changeHauteur(float hauteur){ if (hauteur > 0) this->hauteur = hauteur; } };
  • 11. Instanciation d’une classe • Les classes sont considérées comme des types à part entière. • Instanciation statique : <NomClasse> <nomInstance>; • Instanciation dynamique : <NomClasse> *<nomPointeur> = new <NomClasse>; • Exemples : Rectangle r1; Rectangle *p_rect=new Rectangle;
  • 12. Constructeurs (1/4) • Un constructeur est une méthode particulière qui est appelée lors de la création d’un objet. • Un constructeur porte le même nom que la classe • Un constructeur peut admettre zéro, un ou plusieurs arguments et n’a pas de valeur de retour (même pas void). • Sa tâche principale est d’initialiser les attributs de l’objet. • Il peut aussi ouvrir des fichiers ou des connexions. • Si une classe ne définit pas explicitement de constructeur, un constructeur par défaut sans arguments et qui n’effectue aucune initialisation particulière est invoquée. • Ce constructeur par défaut ne peut plus être invoqué s’il existe un constructeur explicite • Une classe peut admettre plusieurs constructeurs.
  • 13. Constructeurs (2/4) • Le corps d’un constructeur est précédé d’une section optionnelle introduite par «:», spécifiquement réservée à l’initialisation des attributs. • Il est bien sûr possible de changer la valeur d’un attribut initialisé ou d’affecter une valeur à un attribut non initialisé dans le corps du constructeur. • Un constructeur peut admettre des arguments pour lesquels une valeur par défaut est spécifiée.
  • 14. Constructeurs (3/4) • Syntaxe : NomClasse(<arguments>) : <attribut1>(<valeur1>), ... <attributn>(<valeurn>) { // autres opérations }
  • 15. Constructeurs (4/4) • Exemple 1 : Rectangle(float h, float l=10) : hauteur(h), largeur(l) { } • Exemple 2 : Rectangle(float h, float l) : hauteur(h) { float t(2*l - h % 2); largeur = t; } • Exemple 3 : Rectangle(float dim) : hauteur(dim), largeur(dim) { }
  • 16. Initialisation d’un objet avec un constructeur • La syntaxe de la déclaration avec initialisation d’une instance est identique à celle d’une déclaration avec initialisation d’une variable ordinaire. • Syntaxes: <NomClasse> <NomInstance>(val1, val2,...); <NomClasse> * <NomPointeur> = new <NomClasse> (val1, val2,...); • NB : le nombre et les types des valeurs d’initialisation doivent se conformer à un constructeur • Exemples : Rectangle r1(8.5,11); Rectangle r2(12.5); Rectangle *p_rect=new Rectangle(1.5,3);
  • 17. Accès aux membres d’un objet • Accès à un attribut : <nomInstance>.<nomAttribut> <nomPointeur> -> <nomAttribut> Exemples : r1.largeur = 13; p_rect->hauteur = 5; • NB : le principe de l’encapsulation interdit l’accès direct à un attribut. • Accès à une méthode : <nomInstance>.<nomMéthode>([<arg1>, ...]) <nomPointeur> -> <nomMéthode>([<arg1>, ...]) Exemple : cout << "La surface du premier rectangle est de " cout << r1.surface();
  • 18. Attribut de classe • Attribut qui existe même si aucun objet de la classe n’est créé. Exemple : le nombre de rectangles créés • Déclaré en se servant du mot clé static Exemple : static unsigned int nbRectanglesCrees; • Accessible en le préfixant du nom de la classe suivi de :: Exemple : Rectangle::nbRectanglesCrees • Obligatoirement initialisé lors de sa définition (à l’ext. de la classe) Exemple : unsigned int Rectangle::nbRectanglesCrees=0; • Un attribut de classe est appelé constante de classe lorsque sa valeur initiale est fixe durant toute l’exécution du programme • Une constante de classe est déclarée avec le mot clé const Exemple de déclaration : static const float TVA; Exemple de définition : const float Voiture::TVA=0.18;
  • 19. Méthode de classe • Une méthode de classe exécute une action indépendante d’une instance particulière de la classe • Elle permet de manipuler des attributs ou des constantes de classe • Elle ne doit pas manipuler une variable d’instance • Elle est déclarée avec le mot clé static. • Elle est accessible comme une variable de classe
  • 20. Destructeur • Un destructeur est une méthode particulière qui est invoquée automatiquement en fin de vie d’une instance (sortie du bloc où elle a été déclarée ou destruction explicite par delete). • Un destructeur porte le même nom (précédé du caractère « ~ ») que la classe et n’a ni de valeur de retour, ni argument. • Son rôle est d’assurer la libération des ressources (portion de mémoire, fichier, BDD, etc) éventuellement mobilisées. • Toute classe admet exactement un seul destructeur. • Si une classe ne définit pas explicitement de destructeur, un destructeur par défaut est invoquée.
  • 21. Encapsulation (1/2) • L'encapsulation est un mécanisme consistant à empêcher l'accès aux données par un autre moyen que les services (méthodes) proposés : o chaque objet = boîte noire pour ses utilisateurs o les utilisateurs n'ont accès qu’à l'interface publique • Ce mécanisme permet de : o garantir l'intégrité des données contenues dans l'objet ; o simplifier l'utilisation des objets en masquant l'ensemble des attributs et des méthodes qui sont utiles simplement au fonctionnement interne des objets.
  • 22. Encapsulation (2/2) • L’encapsulation est implémentée par trois niveaux de protections pour les membres d’une classe. • Dans l’ordre croissant de protection, on a : 1) public : le membre est accessible de partout 2) protected : le membre n’est accessible que dans la classe dans laquelle il est déclaré et dans les classes dérivées (à voir) de celle-ci. 3) private : le membre n’est accessible que dans la classe dans laquelle il est déclaré. • Par défaut, les membres d’une classe sont privés • Les « accesseurs » sont des méthodes publiques qui permettent de consulter les attributs privés si nécessaire. • Les « mutateurs » sont des méthodes publiques qui permettent de modifier (sous contrôle) les attributs privés si nécessaire.