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

Delphi Discussion :

private, public, protected, published : quelles différences ?


Sujet :

Delphi

  1. #1
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut private, public, protected, published : quelles différences ?
    Bonjour,

    Je souhaiterai savoir quelles sont les différences entre :
    - private : accessible que dans la classe
    - public : accessible de partout
    - protected : ?
    - published : ?

    Dans quels cas doit-on mettre des déclarations en protected et published ?

    Merci,
    MaTHieU_
    Embarcadero RAD Studio XE / Microsoft Windows 7 Édition Intégrale (64 bits)

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    • private : accessible dans toute l'unité ;
    • protected : accessible dans toute l'unité et dans les classes enfantes ;
    • public : accessible partout ;
    • published : comme public, mais avec en plus génération de RTTI pour l'exploitation par l'inspecteur d'objet par exemple.
    Donc tu peux utiliser protected quand tu veux que certaines données/méthodes soient accessibles par la classe ou ses enfants, mais pas le reste.

    Et published c'est seulement quand tu développes un composant, ou dans des cas assez particuliers ou tu veux te servir des RTTI pour tes besoins personnels.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Merci !
    Embarcadero RAD Studio XE / Microsoft Windows 7 Édition Intégrale (64 bits)

  4. #4
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Je precise quand meme une chose :

    Private est plutot limité a la classe elle meme qu'a l'unitee.
    Au niveau pratique, on peut y faire appel depuis une autre classe de la meme unitee, mais quand cette fonctionnalitée n'est pas maitrisee, cela entraine des erreurs au niveau conception assez importante.

    Donc pour moi, Private doit limité a la classe, et son usage extra-classe ne doit pas se faire sans etre "sur" qu'il n'existe pas d'autre solutions.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  5. #5
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    En effet, c'est comme celà que je le vois également.

    Merci.
    Embarcadero RAD Studio XE / Microsoft Windows 7 Édition Intégrale (64 bits)

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Citation Envoyé par Clorish
    Je precise quand meme une chose :

    Private est plutot limité a la classe elle meme qu'a l'unitee.
    Au niveau pratique, on peut y faire appel depuis une autre classe de la meme unitee, mais quand cette fonctionnalitée n'est pas maitrisee, cela entraine des erreurs au niveau conception assez importante.
    Certes, d'où l'existence de strict private
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  7. #7
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par Pedro
    Salut

    Certes, d'où l'existence de strict private

    Hu ?!?
    Sous D7 ca existe ? ou c'est une invention de D200X+ ?
    Pk dans ce cas .... Oust le Private !
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  8. #8
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Clorish
    Hu ?!?
    Sous D7 ca existe ? ou c'est une invention de D200X+ ?
    On n'appelle pas ça une invention mais une évolution
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Clorish
    Je precise quand meme une chose :

    Private est plutot limité a la classe elle meme qu'a l'unitee.
    Au niveau pratique, on peut y faire appel depuis une autre classe de la meme unitee, mais quand cette fonctionnalitée n'est pas maitrisee, cela entraine des erreurs au niveau conception assez importante.

    Donc pour moi, Private doit limité a la classe, et son usage extra-classe ne doit pas se faire sans etre "sur" qu'il n'existe pas d'autre solutions.
    je ne suis pas d'accord, Delphi ne connait pas la notion de classe "amie", on DOIT déclarer dans une même unité les classes qui partagent des informations privées que l'on ne veut pas rendre accessible aux descendants

    c'est d'ailleurs parfois gênant.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Tout a fait .... mais le principe de classe amie est reserve a un certain type de programation, et ne doit pas etre employer a la legere.

    Partir sur la base que cela est est possible risque d'entrainer de mauvaises habitudes et des erreurs de conceptions quand on ne maitrise pas cette facon de coder.

    D'ou mes propos

    Mais soit dite en passant, c'est clair que c'est pas clair leur truc
    Et franchement contraignant .... et source de bon nombre de references circulaires ...
    A moins de tout coder dans le meme fichier pas
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  11. #11
    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 951
    Points
    3 951
    Par défaut
    Enfin bref, private en mode "classe amie" n'est pas conseillé mais ça peut servir. Remarquez que cela explique peut-être certains rassemblement de classes dans la VCL. Donc si Borland le fait...(le développement n'est pas un dogme). Ce ne sont que des compromis entre l'idéal et la réalité.

    cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  12. #12
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par e-ric
    Ce ne sont que des compromis entre l'idéal et la réalité.
    Ou une bidouille pour eviter de coder un veritable systeme de classes amies ......
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  13. #13
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Ben moi je suis plutôt de l'avis de Paul Toth. Le fait que private soit partagé par toute l'unité, je ne prends pas ça comme une bidouille ou autre workaround par rapport aux classes amies.

    C'est simplement une autre philosophie. Et personnellement, j'ai tendance à préférer la façon de voir de Delphi (unité) que du C (classes amies). Une unité est par définition un ensemble d'objets qui sont unis entre eux, et qui peuvent donc se partager des informations "confidentielles".

    En fait, si je veux pousser le bouchon, c'est plutôt parce que le C n'a pas le concept d'unité qu'il a dû inventer les classes amies
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  14. #14
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par sjrd
    En fait, si je veux pousser le bouchon, c'est plutôt parce que le C n'a pas le concept d'unité qu'il a dû inventer les classes amies
    C'est effectivement une facon de voir les choses
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  15. #15
    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 951
    Points
    3 951
    Par défaut
    Remarquez bien que je ne critiquais pas. Cela ne sert pas à grand chose, le langage ne sera pas changé pour autant. Le problème est tojours de trouver des compromis acceptable et pertinent.

    cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  16. #16
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    je suis assez d'accord les unités remplacent avantageusement les namespaces

    mais faut bien reconnaitre que parfois les références circulaires sont pénibles

    tout comme j'aimerais parfois qu'une classe déclarée en INTERFACE face référence à une classe que je ne voudrais pas mettre en INTERFACE, mais uniquement en IMPLEMENTATION...c'est à dire, la garder locale à mon unité...or ce n'est pas possible sauf à utiliser un type générique...ce qui n'est pas non plus très pratique.

    en tout cas, j'ai commencé le Pascal avec Turbo Pascal 3 (qui n'avait pas encore les unités) et je ne m'en lasse pas
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  17. #17
    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 951
    Points
    3 951
    Par défaut
    J'ai fait mes premières armes en programmation PC avec Turbo Pascal 3 et Lisp mais je ne regrette pas TP3, c'est quand même une autre époque même si ce compilo a représenté un saut technologique en ces temps reculés

    Par contre, Delphi, malgré ses limites, est toujours un vrai plaisir.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre public, protected et private
    Par pierrot10 dans le forum Débuter
    Réponses: 2
    Dernier message: 29/05/2013, 08h46
  2. Différence entre Public et Published
    Par Bleys dans le forum Débuter
    Réponses: 2
    Dernier message: 11/06/2008, 18h00
  3. Héritage : private/public/protected
    Par le Daoud dans le forum Langage
    Réponses: 5
    Dernier message: 24/10/2007, 13h47
  4. [POO] Problème: public, protected et private PHP5
    Par fleur_de_rose dans le forum Langage
    Réponses: 5
    Dernier message: 07/05/2006, 19h26
  5. problème de private , public , protected
    Par florantine dans le forum C++
    Réponses: 3
    Dernier message: 17/01/2006, 20h51

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