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 :

Utilisation de record en POO


Sujet :

Langage Delphi

  1. #1
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 491
    Points : 245
    Points
    245
    Par défaut Utilisation de record en POO
    Bonjour,

    Une question sur les bonnes pratique, j'aimerai savoir si l'utilisation de record dans la POO est, à votre avis, une bonne idée?

    Quand j'y pense d'après mon expérience de programmation avec D7, je vois les avantages et le confort d'utilisation de ceux-ci.
    Même si c'est pas simple au début d'utiliser la syntaxe des pointeur.

    Quand j'y pense, du point de vue scolaire dans le cadre de la POO, je ne vois pas d’intérêt immédiat. Un objet peut être aussi
    une structure de données comme attributs avec ses accesseurs et autres méthodes. L’intérêt des records semble disparaître.

    Est-ce qu'il y a quelque part une convention d'utilisation jointe des deux ou un usage reconnu pour son efficacité??

    Merci de me donner votre avis

  2. #2
    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 445
    Points
    28 445
    Par défaut
    alors depuis quelques versions, le record s'apparente à l'OBJET (à ne pas confondre avec la CLASS)

    c'est à dire qu'on peut coller des méthodes dans un record, qui devient un objet statique...alors que la class est forcément dynamiquement allouée.

    maintenant, les structures sont toujours nécessaires à un moment donné ou à un autre (TPoint, TRect, TVector...) sans avoir besoin d'en faire des objets
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 491
    Points : 245
    Points
    245
    Par défaut
    Merci pour la réponse, mais il me semble que l'on glisse dans la zone grise des définitions.
    Dans le bizarre, on trouve la structure de donnée, Record; avec donc des attributs et maintenant voila les méthodes.

    La/les différences avec un objet, Déf. une structure, avec des données de valeur propre à l'instance ainsi que des méthodes, me parait équivalente, non??

    A part cela, si il y avait un exemple de record avec méthodes intégrées, merci de me dire où le trouver.

    Je n'ai vu sur le net, chez DelphiBasics, que une fonction en dur dans le record:
    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
    17
    18
    19
    20
    21
    22
    23
    1 	  type Name = {packed} Record
        Declarations ...
      end;
    2 	  type Name = {packed} record
         Declarations ...
           case {Tag :} Ordinal type of
             Ordinal value {,Ordinal value...} : (Declarations);
             {...}
    end; 
    // Qui donnent plud loin:
     
    type
      // Declare a fruit record using case to choose the
      // diameter of a round fruit, or length and height ohterwise.
      TFruit = Record
        name : string[20];
        Case isRound : Boolean of // Choose how to map the next section
          True  :
            (diameter : Single);  // Maps to same storage as length
          False :
            (length   : Single;   // Maps to same storage as diameter
             width    : Single);
      end;


    Merci pour la peine.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Regarde le wiki, les différences entre classe et record y sont clairement expliquées.

  5. #5
    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 445
    Points
    28 445
    Par défaut
    class permet de créer des objets héritables, surchargeables etc...

    object est l'ancien mot clé pour faire cela, il est déprécié (à la différence des classes, ces objets était statiques, alors que les classes sont implicitement des pointeurs alloués par le constructor)

    record au départ était un ensemble de champ, il est maintenant possible de lui associer des méthodes STATIQUES, on ne peut pas non plus utiliser l'héritage ou le polymorphisme.

    il est même possible maintenant d'ajouter des méthodes STATIQUES à un Record déclaré par ailleurs, on peut donc enrichir un type fourni par Delphi

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    type
      TRect = record
        Left, Top, Right, Bottom: Integer;
        function Width: Integer;   // fonctions statiques
        function Height: Integer;
      end;
     
    function TRect.Width:Integer;
    begin
      Result := Right - Left;
    end;
     
    function TRect.Height: Integer;
    begin
      Result := Bottom - Top;
    end;
     
    type
      TRectHelper = record helper for TRect
        function Surface: Single;  // nouvelle fonction statique pour TRect
      end;
     
    function TRectHelper.Surface: Single;
    begin
      Result := Width * Height;
    end;
     
    procedure Test;
    var
      R: TRect;
    begin
      R.Left := 10;
      R.Top := 10;
      R.Right := 100;
      R.Bottom := 200;
      WriteLn(R.Surface);
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 491
    Points : 245
    Points
    245
    Par défaut
    Merci pour les réponses, c'est clair comme cela.

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

Discussions similaires

  1. [Oracle 9i] Utiliser un record en dynamic SQL
    Par Milo59000 dans le forum SQL
    Réponses: 3
    Dernier message: 02/05/2008, 20h24
  2. [POO] Utilisation d'une classe dans une classe !
    Par Okinou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 14h34
  3. Réponses: 5
    Dernier message: 22/01/2006, 09h10
  4. [POO] Pourquoi utiliser les classes ?
    Par GregPeck dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 15h18
  5. [Record] Utilisation en boucle
    Par CanardJM dans le forum Langage
    Réponses: 3
    Dernier message: 20/06/2004, 12h41

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