Developpez.com - Rubrique Lazarus

Le Club des Développeurs et IT Pro

POO à gogo - Les enregistrements avec Free Pascal et Lazarus 2/2

Par Gilles Vasseur

Le 2017-04-08 10:13:42, par gvasseur58, Responsable Lazarus & Pascal
Les enregistrements étendus



Après avoir défini et utilisé les enregistrements simples, avec ou sans variantes, puis étudié les modes de compactage mis en œuvre essentiellement dans un but d'échanger des données avec d'autres applications, il est temps de s'intéresser aux enregistrements étendus dont ce tutoriel se propose de montrer l'efficacité et la puissance.

Avec ce tutoriel, vous vous devriez être capable de :
  • déclarer un enregistrement étendu ;
  • implémenter ses méthodes ;
  • évaluer les avantages de son utilisation ;
  • définir et utiliser des opérateurs ;
  • définir et manipuler des énumérateurs.


http://gilles-vasseur.developpez.com...egistrements2/

Que pensez-vous de ce tutoriel ?
Les enregistrements étendus vous paraissent-ils devoir être utilisés plus souvent ?
  Discussion forum
5 commentaires
  • mtournay
    Membre habitué
    Bonjour

    Merci beaucoup pour cette suite de tuto sur la POO FPC.

    Très bien écrit, clair et facilement compréhensible !

    J'attends avec impatience le(s) tuto sur les helpers !
  • M.Dlb
    Rédacteur/Modérateur
    Hello !

    Très intéressant. Venant de TP7, j'ai mis énormément de temps avant d'utiliser les classes, préférant ces fameux enregistrements étendus, qui sont, d'après ma compréhension, similaires aux "objects" dans TP7. J'utilise désormais les classes, qui intègrent l'allocation de la mémoire, masquant ce que nous faisions manuellement avec les pointeurs sur ces records.

    J'utilise toujours les records pour représenter des structures de données, en mode simple (cf le premier tuto) avec procédures externes pour la manipulation. N'ayant jamais investigué le sujet, qu'en est-il de l'écriture de ces records avancés dans des fichiers de records (file of xxx) ? Est-çe qu'ils sont écrits de la même façon que les records simples ? Pas de données supplémentaires liées aux méthodes ?
  • gvasseur58
    Responsable Lazarus & Pascal
    Envoyé par M.Dlb

    N'ayant jamais investigué le sujet, qu'en est-il de l'écriture de ces records avancés dans des fichiers de records (file of xxx) ? Est-çe qu'ils sont écrits de la même façon que les records simples ? Pas de données supplémentaires liées aux méthodes ?
    Bonjour,

    Oui, les enregistrements étendus ne diffèrent en rien des enregistrements simples dès lors qu'il s'agit de les enregistrer sur un support. Comme expliqué dans le tutoriel, le code lié aux méthodes est stocké en dehors des enregistrements eux-mêmes pour être partagé si nécessaire.

    Par ailleurs, les objets existent encore dans Free Pascal comme vestiges des objets de TP7. Leur appellation est très équivoque et ils sont indiqués comme obsolètes, mais certains les emploient encore pour des tâches particulières.

    Cordialement,

    Gilles
  • thierrybo
    Membre habitué
    Bonjour,

    j’essaie d'utiliser ll'iniyé StrinVars pour Delphi figurant ici : http://cc.embarcadero.com/Item/25670

    Sur les "class operator Equal" ou notEqual j'ai le message :

    Error: It is not possible to overload this operator. Related overloadable operators (if any) are:
    You are trying to overload an operator that cannot be overloaded.
    The following operators can be overloaded:
    +,-,*,/,=,>,<,<=,>=,is,as,in,**,:=
    Je les remplace par = et <> et ça passe. Il reste les deux opérateurs de transtypage

    Code :
    1
    2
    class operator Explicit
    class operator Implicit
    Le premier passe bizarrement mais pas Implicit, et la je ne sais pas par quoi le remplacer.

    TB
  • gvasseur58
    Responsable Lazarus & Pascal
    Envoyé par thierrybo


    Code :
    1
    2
    class operator Explicit
    class operator Implicit
    Le premier passe bizarrement, mais pas Implicit, et je ne sais pas par quoi le remplacer.
    Bonjour,

    Dans la version actuelle de Free Pascal, un certain nombre d'opérateurs pris en charge par Delphi ne le sont pas : il en est ainsi de Implicit. Soit le transtypage aura lieu malgré tout, soit il faudra le rendre explicite en cas d'erreur. En gros, dans la bibliothèque mentionnée, il suffit d'éliminer ce Implicit et de voir ce qu'il se passe .