Documente Academic
Documente Profesional
Documente Cultură
Ce document prsente brivement les mcanismes du langage C qui sont sollicits pour
parvenir la Programmation Oriente Objet (POO).
Il constitue donc une introduction la Programmation Oriente Objet en C.
Introduction la programmation oriente objet en C par Aymeric Lesert (Site personnel de Aymeric Lesert)
-2Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://c.developpez.com/cours/introduction-programmation-orientee-objet-c/
Introduction la programmation oriente objet en C par Aymeric Lesert (Site personnel de Aymeric Lesert)
complexits
difficults rsoudre les bugs
dbordement de mmoire (coredump)
Or, ce n'est ni plus ni moins qu'une adresse mmoire. Vous dplacez simplement votre rfrentiel de la variable
son adresse (un peu comme si vous ne vous adressez pas un interlocuteur par nom mais par son lieu d'habitation).
Dans notre cas, les pointeurs doivent devenir vos allis et vous devez apprendre les matriser. L'autre objectif de ce
document est de montrer comment avec quelques rgles simples, il est possible de devenir copain-copain avec eux.
Dans le dernier exemple, cela revient dcrire un individu non pas par son nom, ni par son adresse mais par sa
ville. Ceci est utilis quand l'individu doit changer d'adresse.
-3Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://c.developpez.com/cours/introduction-programmation-orientee-objet-c/
Introduction la programmation oriente objet en C par Aymeric Lesert (Site personnel de Aymeric Lesert)
void (*Ecrire)(void) : Ecrire est un pointeur sur une fonction qui n'accepte aucun paramtre et qui ne retourne rien.
Ecrire est donc une variable contenant l'adresse d'une fonction.
L'affectation de cette variable se fait comme sur l'exemple ci-dessous :
void Ecrire_fonction(void)
{
printf("Bonjour") ;
return ;
}
void Traitement(void)
{
/* ... */
Ecrire = Ecrire_fonction;
/* ou */
Ecrire = (void (*)(void))Ecrire_fonction;
/
* caste Ecrire_fonction en un pointeur sur une fonction ne prenant pas de paramtres et ne retournant rien */
/* ... */
}
-4Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://c.developpez.com/cours/introduction-programmation-orientee-objet-c/
Introduction la programmation oriente objet en C par Aymeric Lesert (Site personnel de Aymeric Lesert)
-5Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://c.developpez.com/cours/introduction-programmation-orientee-objet-c/
Introduction la programmation oriente objet en C par Aymeric Lesert (Site personnel de Aymeric Lesert)
Pour complter le dispositif, il faut disposer de fonctions qui permettent d'initialiser cette structure et d'associer
les pointeurs de fonction (adresse de fonction dynamique) avec les fonctions implmentes (adresse de fonction
statique) : les constructeurs.
Allouer une zone mmoire suffisante pour stocker la structure matrialisant la classe
Affecter les mthodes et le destructeur
Initialiser les attributs
Retourner une rfrence sur une nouvelle instance de la classe
II-C - Le this
En C++ ou en Java, l'objet this est la rfrence de l'instance d'une classe utilisant une mthode. Il est souvent
utilis de manire implicite. Cette information, en C, est rfrence par le premier argument des mthodes (pointeur
sur la structure laquelle appartient la mthode) et doit tre utilise de manire explicite.
Exemple :
e_Couleur Lire_couleur_stylo(t_Stylo *this) ;
void Ecrire_couleur_stylo(t_Stylo *this,e_Couleur Couleur) ;
II-D - Le destructeur
C'est une fonction qui permet de librer la zone mmoire alloue par les constructeurs. Sa particularit est de devoir
positionner la rfrence de l'instance NULL aprs sa destruction. C'est pour cette raison qu'il est ncessaire de
passer la rfrence de la rfrence d'une instance.
Exemple :
void Liberer_stylo(t_Stylo **this) ;
-6Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://c.developpez.com/cours/introduction-programmation-orientee-objet-c/
Introduction la programmation oriente objet en C par Aymeric Lesert (Site personnel de Aymeric Lesert)
Un fichier header (exemple : stylo.h) : contenant la structure matrialisant la classe et dfinissant le prototype
du(des) constructeur(s)
Un fichier source (exemple : stylo.c) : contenant l'implmentation des mthodes et des constructeurs
Dans votre fichier source, toutes les implmentations de vos fonctions peuvent commencer par le mot cl static .
Cela permet de masquer (et d'interdire) l'accs ces fonctions sans passer par la classe.
-7Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://c.developpez.com/cours/introduction-programmation-orientee-objet-c/
Introduction la programmation oriente objet en C par Aymeric Lesert (Site personnel de Aymeric Lesert)
/* le destructeur */
void (*Liberer)(struct t_Stylo **this) ;
/* les mthodes publiques */
void (*Ecrire)(struct t_Stylo *this,char *i_Texte);
e_Couleur (*Lire_encre)(struct t_Stylo *this) ;
/* une proprit prive */
e_Couleur Couleur;
} t_Stylo;
extern t_Stylo *Instancier_stylo(e_Couleur);
Introduction la programmation oriente objet en C par Aymeric Lesert (Site personnel de Aymeric Lesert)
this->Couleur=i_Couleur;
/* retour de l'objet instanci */
}
return(this);
return;
-9Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://c.developpez.com/cours/introduction-programmation-orientee-objet-c/