C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

question de sécurité encapsulation des données.

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
giova
Guest





PostPosted: Sat May 22, 2004 8:20 am    Post subject: question de sécurité encapsulation des données. Reply with quote



désolé ma question est tres certainement stupide, en tout cas c'est sur,
elle vient d'un debutant :)

Pour une classe dont on nous a fourni que le header et le module objet.

Qu'est ce qui nous empeche dans le header, de rajouter un "friend class
maclasse"
histoire de faire sauter l'encapsulation des données?
Back to top
Alexandre
Guest





PostPosted: Sat May 22, 2004 8:32 am    Post subject: Re: question de sécurité encapsulation des données. Reply with quote



bonjour,

"giova" <pas (AT) de (DOT) mail> a écrit dans le message de
news:40af0d30$0$21568$626a14ce (AT) news (DOT) free.fr...
Quote:
désolé ma question est tres certainement stupide, en tout cas c'est sur,
elle vient d'un debutant :)

Pour une classe dont on nous a fourni que le header et le module objet.

Qu'est ce qui nous empeche dans le header, de rajouter un "friend class
maclasse"
histoire de faire sauter l'encapsulation des données?

rien. Enfin AMA on ne peut pas s'en prémunir, si on fournit le .h
C'est un (gros) défaut, certes. D'un autre coté, le code de la classe étant
déjà compilé, pas sur que ça change qq chose. La classe risque d'être
différente et le lieur raler. Je n'ai jamais fait l'essai. ça serait
interessant.



Back to top
Loïc Joly
Guest





PostPosted: Sat May 22, 2004 8:33 am    Post subject: Re: question de sécurité encapsulation des données. Reply with quote



giova wrote:
Quote:
désolé ma question est tres certainement stupide, en tout cas c'est sur,
elle vient d'un debutant :)

Pour une classe dont on nous a fourni que le header et le module objet.

Qu'est ce qui nous empeche dans le header, de rajouter un "friend class
maclasse"
histoire de faire sauter l'encapsulation des données?

Rien.

En thérorie, le compilateur a le droit de crasher. En pratique, ce genre
de manip opourrait passer sans problèmes avec pas mal de compilo.

Il est souvent dit en C++ que le but des déclarations privées.... est de
protèger contre l'innocent faisant une étourderie, pas contre Machiavel.

Si tu veux un peu plus de protection, tu as toujours la possibilité de
faire :

// .h

class MaClasseImpl;

class MaClasse
{
public:
MaClasse()
int maFonctionPublique;
private:
MaClasseImpl *impl;
};

// .cpp

class MaClasseImpl
{
public:
int i;
int j;
int maFonctionPrivée();
};

--
Loïc

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon May 24, 2004 6:56 am    Post subject: Re: question de sécurité encapsulation des données. Reply with quote

giova <pas (AT) de (DOT) mail> wrote


Quote:
désolé ma question est tres certainement stupide, en tout cas c'est
sur, elle vient d'un debutant :)

Pour une classe dont on nous a fourni que le header et le module
objet.


Quote:
Qu'est ce qui nous empeche dans le header, de rajouter un "friend
class maclasse" histoire de faire sauter l'encapsulation des données?

Officiellement, si tu fais ça, tu as une violation de la ODR (qui dit
que toutes les définitions doivent être identiques), et donc un
comportement indéfini.

En principe, si tu avais un bon compilateur, il réfusera le code au
moment de l'édition de liens, parce que les violations de la ODR sont
assez facile à détecter (à condition d'accepter qu'il y aurait certaines
qui passent à travers).

Dans la pratique, de bons compilateurs sont rares, et c'est probable que
rien ne l'empêche. Et alors... Les protections du C++ sont conçues pour
protéger contre Murphy, et non contre Machiavelli. Quelque chose du
genre :

#define class struct
#define private public

avant l'inclusion de l'en-tête marcherait probablement aussi. Même si tu
n'as pas accès en écriture à l'en-tête. (Là aussi, formellement, tu as
introduit un comportement indéfini. Mais dans la pratique, ça marche
avec tous les compilateurs que je connais.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.