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 :

Différence entre property et champs


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 258
    Par défaut Différence entre property et champs
    Bonjour,

    Tout est dans le titre : dans une classe, quelle est la différence entre un champ et une property ? Quand est-il préférable d'utiliser l'un plutôt que l'autre ?

    D'avance merci

    Kim

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

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Salut

    Un champ est une variable propre à un instance, c'est un nom associé à un type.
    Un propriété spécifie comment on accède à un champ en précisant éventuellement un accesseur en lecture et/ou un accesseur en écriture.
    L'accès au champ peut être direct mais le plus souvent on associe du code de contrôle.
    Les propriété participent à la mise en oeuvre du principe d'encapsulation en simplifiant l'écriture du code, les accesseurs sont implicitement exécutés dès que la variable est lue ou écrite.
    L'autre intérêt est de rendre le changement d'implémentation moins douloureux, par exemple on passe d'un accès direct à un accès contrôlé par des accesseurs, cela ne remet pas en cause le code utilisant la donnée.
    Par principe, l'accès à tout champ public par nature devrait passer par une propriété publique, au moins, le champ devenant privé ou protégé.
    Il est aussi possible de créer une propriété en lecture/écriture sans qu'elle soit rattachée à un champ de la classe.

    Conventions
    le champ est préfixé par la lettre F, en général de portée privée
    le setter (accès en écriture) est préfixé par set, en général de portée privée
    le getter (accès en lecture) est préfixé par get, en général de portée privée

    Limitation
    Le compilateur ne permet pas de passer un propriété par variable (var) dans une procédure.

    Exemple : la propriété Age d'une classe TPersonne, avec un contrôle en écriture:
    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
    type
      TPersonne = class
      private 
        FAge: Integer;
        procedure setAge(value: Integer);
      public
        property Age: Integer read FAge write setAge;
      End;
     
    procedure setAge(value: Integer);
    begin
      if (0<=Value) and (Value<=130) then
        FAge := Value
      else
        raise Exception.CreateFmt('Age %d invalide', [Value]);
    End;
    C'est clair ??

    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."

  3. #3
    Membre émérite

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Par défaut
    Et tout est dans l'aide de Delphi (extraits de la version 7) :

    Un champ est semblable à une variable appartenant à un objet.

    Comme un champ, une propriété définit un attribut d'un objet. Mais alors qu'un champ n'est rien de plus qu'un emplacement de stockage dont le contenu peut être consulté et modifié, une propriété associe des actions spécifiques à la lecture et la modification de ses données.
    .....
    En bref, une propriété c'est une variable (un champ) "intelligente"

    D'ailleurs une propriété n'est pas obligatoirement associée à un champ qui lui serait dédié, elle peut être entièrement "calculée".
    Pour reprendre l'exemple de e-ric, la propriété Age pourrait être calculée, en lecture, à partir de la date de naissance (stockée par un autre champ ou obtenu de toute autre manière) et la date du jour. Dans ce cas précis l'affectation d'une valeur à la propriété Age n'aurait pas de sens et elle pourrait être déclarée en lecture-seule (pas de clause Write).

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 258
    Par défaut
    Merci à DomDA91 et e-ric,
    Ce que vous m'avez répondu a précisé mon idée sur le sujet et l'a conforté.

    Kim

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

Discussions similaires

  1. Différence entre 1 même champ sur 2 enregistrements d'une même table
    Par manulemalin dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/02/2008, 09h47
  2. Réponses: 5
    Dernier message: 06/06/2006, 14h12
  3. Différence entre property et preference
    Par dédéf dans le forum API standards et tierces
    Réponses: 16
    Dernier message: 23/05/2006, 11h43
  4. [access] différence entre deux champs
    Par loutente dans le forum Langage SQL
    Réponses: 1
    Dernier message: 17/08/2005, 15h57

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