Avant : programmation classique procédurale
Maintenant : programmation orientée objet
Ex : on veut imprimer un fichier f
|
Prog procédurale |
Prog orientée objet |
|
on fait une fonction Imprimer void Imprimer(FILE f) |
2 objets : imprimante, fichier Þ class DOCUMENT class IMPRIMANTE |
* extension de la notion de type (en particulier agrégats)
* données + procédures
* extension de la notion de variable
(variable + volumineuse à cause des méthodes)
*
instance d'une classe
Données "données membres"
* private : accès par les fonctions membres de la classe
* public : accès par toutes les fonctions (même externes à la classe)
* protection (encapsulation)
*
définition dans un fichier . h
Procédures "fonctions membres"
*
permettent l'accès aux données de la classe
*
définition dans un fichier . C
C procédural
C++ orienté objet, compatible avec C (niv. compilation)
Þ C++ extension du C
Données privées : private
Seules les méthodes de la classe peuvent y accéder
Les
fonctions externes à la classe peuvent y accéder par l'intermédiaire d'une
fonction membre de la classe
Ex : fonction externe
cout<<" ";
Faire une fonction membre
Afficher( ) {
cout<<"donnée-à-afficher";
}
Données publiques : public
Accessibles par n'importe quelle fonction
Appliquer une fonction membre à une instance d'une classe
objet-cible
. fonction-membre (… )
nom-classe.h : déclaration
des données et des méthodes de la classe
#ifndef _NOM-CLASSE_H_
#define _NOM-CLASSE_H_
class nom-classe
{
[private :]
type attrPrivé ;
type méthode-privée ;
type fonction-inline(…){définition};
public :
type attrPublic ;
type méthode-publique ;
type fonction-inline(…){définition};
nom-classe(…) {} //constructeur
};
#endif
Rq : PRIVATE n'est pas obligé car privé par défaut
ifndef, define, endif permettent d'éviter les problèmes d'inclusions multiples dans les fichiers .C
nom-classe.C : définition
des méthodes de la classe
#include "nom-classe.h"
#include
<iostream.h>
type nom-classe::nom-méthode1(liste paramètres)
{ cout<<attrPrivé;
}
type nom-classe::nom-méthode2(liste paramètres)
{ cout<<attrPrivé;
}
Opérateur de résolution
de portée ::
ppal.C
#include
<iostream.h>
#include "nom-classe.h"
void main ( )
{ nom-classe nom-objet;
nom-objet.nom-méthode(liste-paramètres) ;
}
Rq : main n'appartient pas à la classe Þ pas
d'accès aux données privées Þ cout<<nom-objet.attrPrivé
!!
xlC
nom-classe.C nom-prog-ppal.C
Les .h sont indirectement compilés (inclus)