Fonctions_Inline_Amies en C++

22
NOTION D’ENCAPSULATION EN C++

Transcript of Fonctions_Inline_Amies en C++

NOTION D’ENCAPSULATION EN C++

PLAN

Les fonction Inlines

Les classes Amies

Accesseurs et Mutateurs

Règles d’encapsulation

Définition

Conclusion

Les fonction Amies

2

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

Définition

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

Le respect du principe d'encapsulation impose donc

que :

Les attributs ne doivent pas être accessibles publiquement

:

• Garantir la cohérence des données

• Fournir des possibilités minimales en terme de

modifications

Toute méthode non nécessaire à l'utilisateur doit étre

déclarer private

Toute méthode que vous souhaitez rendre disponible à

l'utilisateur, et qui définit donc l'interface de la classe est à

déclarer public

Les constructeurs et destructeurs doivent toujours être

publics !

1. Règles:

2. Exemple:

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

1. Règles:

2. Exemple:

class point{ // déclaration des membres

privés private : int x ; int y ; // déclaration des membres

publics public : void initialiser (int, int) ; void afficher () ;} ;

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

1. les accesseurs: 2. Les mutateur: Exemple: Exemple:

• récupérer le contenu d'une donnée membre protégée, pour accomplir sa fonction :

• doit avoir comme type de retour le type de la variable à renvoyer

• ne doit pas nécessairement posséder d'arguments

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

1. les accesseurs: 2. Les mutateur: Exemple: Exemple:

Exemple : class Acc{

private : int age;

public : int GetAge();

}; int Acc::GetAge(){ return age; }

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

1. les accesseurs: 2. Les mutateur: Exemple: Exemple:

• Un mutateur est une fonction membre permettant

de modifier le contenu d'une donnée membre

protégée.

• Un mutateur, pour accomplir sa fonction :

Doit avoir comme paramètre la valeur à assigner à

la donnée

membre. Le paramètre doit donc être du type de

la donnée membre

Ne doit pas nécessairement renvoyer de valeur (il

possède dans sa plus simple expression le type void

Il est courant des préfixer le nom des accesseurs /

mutateurs respectivement par Get / Set. Pour cette

raison, on appelle aussi les accesseurs / mutateurs

des getter / setter..

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

1. les accesseurs: 2. Les mutateur: Exemple: Exemple:

class Mut{ private : int _age; public : void SetAge(int); }; void Mut::SetAge(int age){ _age = age; }

Définition

Règles d’encapsulation

Accesseurs et Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

1. Introduction: 3. Exemple:

2. Définition: 4. utilite:

Imaginons les deux fonction suivantes:

Le résultat obtenu ressemble à celui qu’aurait produit l’exécution de

Définition

Règles d’encapsulation

Accesseurs et Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

Le mot-clé « inline» utilisé en C++ s'applique à une fonction. Il indique au compilateur que chaque appel à la fonction devra être remplacé par le corps de cette fonction. Il suffit pour cela que, lors de sa définition, le nom de la fonction soit précédé du mot inline.

1. Introduction: 3. Exemple:2. Définition: 4. utilite:

Définition

Règles d’encapsulation

Accesseurs et Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

1. Introduction: 3. Exemple:2. Définition: 4. utilité:

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

l’utilisation des fonctions inlines se fait dans un but d’éfficacité , d’optimisation ; puisqu’il n’y a pas d’appel (réel), donc pas de rupture de séquence, pas de retour etc... Mais il est clair qu’un tel traitement ne peut convenir qu’à des fonctions fréquemment appelées.

1. Introduction: 3. Exemple:2. Définition: 4. utilite:

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

En principe, l’encapsulation interdit à une fonction membre d’une classe ou toute fonction d’accéder à des données privées d’une autre classe. Mais grâce à la notion d’amitié entre fonctions et classes, il est possible, lors de la définition de cette classe d’y déclarer une ou plusieurs fonctions (extérieurs de la classe) pouvant accéder à ses membres privés.

1. Introduction: 2. Définition:

3. Les différentes situations d’amitié

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

Une fonction amie d’une classe C est une fonction qui, sans être membre de cette classe, a le droit d’accéder à tous ses membres, aussi bien publics que privés.

1. Introduction: 2. Définition:

3. Les différentes situations d’amitié

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

Class C{

public: friend void maFonction(); } ; void maFonction(){

/* definition de la fonction amie */ }

A notez la qualification friend, bien que déclarée à l’intérieur de la classe C, la fonction maFonction() n’est pas membre de cette classe ; en particulier, elle n’est pas attachée à un objet, et le pointeur this n’y est pas définie.

1. Introduction: 2. Définition:

3. Les différentes situations d’amitié

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

3. Les différentes situations d’amitié

Fonction indépendante amie d’une classe

Class C{

public:

friend void maFonction(); } ;

void maFonction(){ /* definition de la fonction amie */ }

Syntaxe:

1. Introduction: 2. Définition:

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

Fonction membre d’une classe, amie d’une autre classe

Class A; Class B {

public: void F(A); } ;Class A { private: int nbr;

public: friend void B::F(A); } ;

void B::F(A a){ /* definition de la fonction amie */

}

La fonction membre de la classe B est ami avec la classe A

Il faut déclarer A avant B.

définir B avant A

3. Les différentes situations d’amitié1. Introduction: 2. Définition:

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

Fonction indépendante amie de plusieurs classes

Class A ;Class B {

public: friend void Fonction(A,B); } ;Class A {

public: friend void Fonction(A,B); } ;

void Fonction (A a,B b ){ /* definition de la fonction amie */

}

Syntaxe:

3. Les différentes situations d’amitié1. Introduction: 2. Définition:

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

Une classe amie d’une classe C est une classe qui a le droit d’accéder à tous les membres de C. Une telle classe doit être déclarée dans la classe qui accorde le droit d’accès), précédé du mot réservé « friend ».

1. Définition: 2. Syntaxe:

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

Class A; Class B {

public: void F1(A);

void F1(A); } ;Class A { private: i

nt nbr; public:

friend class B; } ;

void B::F1(A a1){ /* définition de la fonction amie F1*/}

void B::F2(A a2){ /* définition de la fonction amie F2*/}

1. Définition: 2. Syntaxe:

Définition

Règles d’encapsulati

on

Accesseurs et

Mutateurs

Les fonction Inlines

Les fonction Amies

Les classes Amies

Conclusion

• La relation d’amitié doit être utilisée avec précaution , c’est une

entorse à l’ensemble des règles qui régissent les droits d’accès.

• La relation d’amitié n’est pas transitive : les amis des amis de la

classe A ne sont pas forcément les amis de la classe A

• Si la classe A est amie de la classe B ≠ la classe B est amie de

la classe A (pas de symétrie).

• Les amis de classes imbriquées n’ont pas de droit particulier sur

les membres de la classe de niveau supérieur.