IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

Implémentation système de l'encapsulation


Sujet :

Langages de programmation

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Gestionnaire Infrastructures Matériel Logiciel
    Inscrit en
    Décembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire Infrastructures Matériel Logiciel
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 15
    Points : 25
    Points
    25
    Par défaut Implémentation système de l'encapsulation
    Bonjour à tous,

    quelqu'un pourrait-il m'éclaircir sur les dessous de l'encapsulation.
    En java ou C#, par exemple on nous indique d'utiliser les mot-clés private, protected ou public pour instaurer un degré de "visibilité" de méthodes ou d'attributs d'un objet.
    Mais que se passe-t-il alors au niveau de la compilation pour gérer cette encapsulation.?

    Je me pose la question par comparaison à d'autres langages ou l'encapsulation n'est "pas gérée" car l'accès aux données que l'on aura cachées (utilisation du nommage en préfixe double underscore) reste toujours possible.

    Se pourrait-il q'un accès aux données encapsulées considérées inaccessibles soit toujours possible dans les autres langages qui intègrent l'encapsulation (comme java, C#) mais que le manque d'informations nous fasse croire que c'est impossible.

    Question d'un newbie qui garde une petite lanterne au plafond pour l'hiver.

    Merci pour vos réponses et corrections.

    Alain.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    Par défaut
    Déjà, je ne comprends pas ce que tu veux dire par "utilisation du nommage en préfixe double underscore".

    Le principe des données private, c'est que le code ne compilera tout simplement pas si tu cherche à y faire référence par leur nom. Alors, tes recours dépendent de la plate-forme et du langage:
    • En C++ normal, tu peux faire des manipulations de pointeurs, donc tu peux accéder à n'importe quelle variable de la mémoire de ton programme du moment que tu trouves où elle est (et quand il s'agit d'un membre private d'un objet, si tu as un pointeur vers l'objet et un sizeof de sa classe, tu sais où chercher).
    • En C#, à moins d'avoir les droits UnmanagedCode, tu n'as aucune possibilité de manipulation de pointeurs: Tu ne peux accéder qu'à ce que tu peux nommer. Et même si tu essaies de tricher avec le compilo C#, ça pètera sur la traduction Just-In-Time du code managé en code natif. Le seul outil restant est la Réflexion, mais elle aussi nécessite un droit spécial (MemberAccess) pour accéder aux membres privés.

  3. #3
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 804
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 804
    Points : 32 082
    Points
    32 082
    Par défaut
    Pour reprendre ce que dit Médinoc, en dehors du périmètre de la donnée, le compilateur ne sait pas qu'elle existe. Pas de compilation, pas d’exécution. Ce qui permet paradoxalement d'utiliser le même nom de variable dans plusieurs domaines différents. Exemple(pourri) en VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Option Explicit
    
    Sub AfficheFactorielles()
        Dim i as Long
        For i = 1 To 10
            Msgbox(Factorielle(i))
        Next i
    End Sub
    
    Function Factorielle(i as Long) As Long
        If i > 1 Then 
            Factorielle = Factorielle (i - 1) *i
        Else
            Factorielle = 1
        End If
    End Function
    i existe indépendamment dans les deux espaces, parce que c'est dans les deux cas une variable interne, encapsulée. Le compilateur(ou l’interpréteur) sait qu'il existe une variable i dans ma procédure, et une autre dans ma fonction. Si je ne la définit pas dans la procédure(le Dim), alors le compilateur ne pourra pas s’exécuter et m'insultera(à juste titre). Si par contre je définit une variable globale i(une Public, en VBA), alors il aura la même valeur de i partout(et mon code ne marchera jamais).

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Se pourrait-il q'un accès aux données encapsulées considérées inaccessibles soit toujours possible dans les autres langages qui intègrent l'encapsulation (comme java, C#)
    En C#, avec la "reflection, on peut accéder à toutes les propriété et appeler toutes les méthodes quel que soit leur niveau de potection. (Voir "Type.GetProperties" ou "Type.GetMehod").

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    Par défaut
    Citation Envoyé par Graffito Voir le message
    En C#, avec la "reflection, on peut accéder à toutes les propriété et appeler toutes les méthodes quel que soit leur niveau de potection. (Voir "Type.GetProperties" ou "Type.GetMehod").

    Citation Envoyé par Medinoc
    Le seul outil restant est la Réflexion, mais elle aussi nécessite un droit spécial (MemberAccess) pour accéder aux membres privés.
    ReflectionPermission class
    ReflectionPermissionFlag enumeration

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Gestionnaire Infrastructures Matériel Logiciel
    Inscrit en
    Décembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire Infrastructures Matériel Logiciel
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 15
    Points : 25
    Points
    25
    Par défaut
    Je n'espérais pas de réponses, donc déjà merci
    Elles confirment qu'il ne s'agit, suivant les langages considérés, que d'un degré de protection plus ou moins élevé et abscons (choisi par les concepteurs du langage) des données définies comme privées.

    Comme j'ai affaire à des experts pourriez-vous me dire qu'elle est votre livre de référence pour la programmation orientée objet.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/02/2014, 14h21
  2. Implémenter un système expert
    Par medchok dans le forum Général Java
    Réponses: 2
    Dernier message: 09/04/2009, 13h54
  3. problèmes sur l'implémentation d'un système de points
    Par davidbalan dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 12/09/2008, 14h30
  4. Système de greffons et choix d'implémentation
    Par mangobango dans le forum C++
    Réponses: 2
    Dernier message: 03/07/2007, 16h57
  5. Réponses: 4
    Dernier message: 09/10/2006, 19h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo