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

 

Classe

* extension de la notion de type (en particulier agrégats)

* données + procédures

 

Objet 

* 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)