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

Langage Delphi Discussion :

visibilité d'un membre privé


Sujet :

Langage Delphi

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut visibilité d'un membre privé
    Salut;

    j'aimerais savoir pourquoi un membre déclaré dans la section private d'une classe est visible dans son unité ?

    NB : j'utilise Delphi 7.

    Merci à vous.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 879
    Points : 11 377
    Points
    11 377
    Billets dans le blog
    6
    Par défaut
    tu dois penser à ce type de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TTest.Show;
    begin
      ShowMessage(IntToStr(FField)); // champ de TTest
      Form1.FFormField:=-1; // champ privé de Form1, accessible car TForm1 déclaré dans la même unité
    end;
    je pense que ça réserve la faculté de déclarer 2 types dans la même unité dont l'un manipulera des champs d'une instance de l'autre sans passer par des setters/getters, le programmeur ayant fait le choix de ne pas les déclarer dans 2 unités, du fait d'une complémentarité, et dans un souci de rapidité

    mais libre à lui de les isoler dans des unités distinctes... il peut y avoir danger, effectivement. cependant, les descendants déclarés dans une autre unité qui surchargeront des procédures perdront cet accès

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Sans grand intérêt alors. C'est pour ça je me pose cette question sans être vraiment être convaincu des réponses que j'ai eu. En suivant les règles d'une bonne POO ça parait comme une violation, non !

  4. #4
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    Disons qu'en Delphi, c'est la seule façon de mettre en oeuvre le concepte de "classes amies" qu'on retrouve en POO.

    Une classe amie est une classe qui peut accéder aux membres privées d'une autre. Ca sert lorsque tu utilises plusieurs classes pour résoudre un seul et même problème, que certaines classes ont besoins d'avoir accès à des méthodes d'une autre, mais que tu ne veux pas que c'est dernières soient publiques et accessibles par n'importe qui.

    On retrouve également ce concept sous la forme de la visibilité "package" de Java, ou la visibilité "Internal" de .NET

    Maintenant en Delphi, tu as la visibilité Private qui est en réalité visible par la classe et toutes les classes déclarées dans la même unité.
    Ainsi que la visibilité "strict private" qui est un private pur et dur, inacessible par les autres classes.

    Après c'est comme tout. Tu peux t'en servir pour faire du code plus propre, ou au contraire pour faire n'importe quoi !

  5. #5
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    Citation Envoyé par Franck SORIANO Voir le message
    Disons qu'en Delphi, c'est la seule façon de mettre en oeuvre le concepte de "classes amies" qu'on retrouve en POO.

    Une classe amie est une classe qui peut accéder aux membres privées d'une autre. Ca sert lorsque tu utilises plusieurs classes pour résoudre un seul et même problème, que certaines classes ont besoins d'avoir accès à des méthodes d'une autre, mais que tu ne veux pas que c'est dernières soient publiques et accessibles par n'importe qui.

    On retrouve également ce concept sous la forme de la visibilité "package" de Java, ou la visibilité "Internal" de .NET

    Maintenant en Delphi, tu as la visibilité Private qui est en réalité visible par la classe et toutes les classes déclarées dans la même unité.
    Ainsi que la visibilité "strict private" qui est un private pur et dur, inacessible par les autres classes.

    Après c'est comme tout. Tu peux t'en servir pour faire du code plus propre, ou au contraire pour faire n'importe quoi !
    C'est une approche plus pragmatique, le problème est que Delphi n'est pas un langage OO conçu "from scratch", des compromis ont été choisis lors de sa conception, il fallait conserver certaines caractéristiques du Pascal, ce qui interdisait sans doute un compilateur trop strict. Ce qui lui donne aussi une certaine souplesse.

    Remarquez que Delphi est un langage assez âgé micro-informatiquement parlant, il est sorti en 1995, les développeurs de l'époque n'étaient pas forcément des crack de la POO mais cela a permis le développement d'un grand nombre d'applications.

    Si tu veux un langage mieux conçu mais moins ouvert à la bidouille et aux petits arrangement, tourne-toi vers Eiffel.

    Cdlt

Discussions similaires

  1. classe membres privés
    Par Nayila dans le forum Langage
    Réponses: 12
    Dernier message: 09/10/2007, 21h15
  2. reccupérer un membre privé d'une classe
    Par ouinih dans le forum C++
    Réponses: 10
    Dernier message: 16/08/2007, 11h37
  3. Des membres privés
    Par Gruik dans le forum C
    Réponses: 6
    Dernier message: 06/12/2006, 22h13
  4. Heritage et membre privé
    Par b Oo dans le forum C++
    Réponses: 5
    Dernier message: 27/11/2006, 22h20
  5. acces au membres privés
    Par le y@m's dans le forum Langage
    Réponses: 6
    Dernier message: 22/09/2005, 15h52

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