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 Pascal Discussion :

Pourquoi les objets doivent-ils être dynamiquement alloués en Pascal


Sujet :

Langage Pascal

  1. #1
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut Pourquoi les objets doivent-ils être dynamiquement alloués en Pascal
    Bonjour,

    Une simple question me turlupinait : pourquoi en Pascal doit-forcément allouer un objet dynamiquement et pourquoi ne peut-on pas le déclarer statiquement comme en C++, par exemple, alors que on peut le faire avec le type record ?

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var 
      Obj : TUnObjet;
    begin
      Obj := TUnObjet..Create(param);
      Obj.Free;
    end;

    Merci

  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 430
    Points
    28 430
    Par défaut
    alors, historiquement ce n'était pas le cas. En Turbo Pascal 5.5 quand est apparu l'objet, ils étaient statiques et déclarés par le mot clé OBJECT.

    Avec Turbo Pascal 7, Borland a livré une bibliothèque orienté objets qui permettait de concevoir des IDE en mode texte, tous les objets étant alloués dynamiquement on avait partout des TMonObject, des PMonObject = ^TMonObject et des monObject^.Method()...ce qui est aussi pénible que les MonObject* obj et autres obj->Method() en C.

    Du coup, avec Delphi 1 aka Turbo Pascal 8, Borland a revisité le langage en créant le mot clé "class" pour des objets qui sont implicitement des pointeurs. Comme il s'accompagnait de la VCL qui permettait de gérer des flux d'objets sans une ligne de code, tout le monde a trouvé ça très bien...sauf quelques développeurs C qui avaient leurs habitudes

    Le mot clé OBJECT a perduré longtemps dans le langage Delphi jusqu'à quelques version en arrière, maintenant Delphi propose d'ajouter des méthodes aux RECORD qui viennent théoriquement remplacé la notion d'objet statique.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    merci pour cette réponse complète

  4. #4
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut Avec Lazarus, c'est possible...
    Citation Envoyé par EpiTouille Voir le message
    Bonjour,

    Une simple question me turlupinait : pourquoi en Pascal doit-forcément allouer un objet dynamiquement et pourquoi ne peut-on pas le déclarer statiquement comme en C++, par exemple, alors que on peut le faire avec le type record ?
    Bonjour,

    Lazarus a gardé cette possibilité bien pratique lorsqu'il n'y a pas de constructeur à prévoir.
    Voici par exemple la déclaration de l'objet TGVString que l'ai utilisé dans le projet GVLOGO :

    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
     
    // *** objet chaîne ***
      TGVString = object
      strict private
        fRawStr: string; // chaîne brute entrée
        fIsValid: Boolean; // validité de la chaîne d'entrée
        fStr: string; // chaîne brute interne
        fFmtStr: string; // chaîne formatée interne
        function GetFmtStr: string; // renvoie la chaîne formatée
        function GetStr: string; // renvoie la chaîne brute
        procedure SetStr(const St: string); // établit une nouvelle chaîne brute
        function WithEsc(const St: string): string; // avec échappement
        function WithoutEsc(const St: string): string; // sans échappement
      public
        procedure Clear; // remise à zéro
        property IsValid: Boolean read fIsValid; // validité de la chaîne d'entrée
        property Str: string read GetStr write SetStr; // chaîne brute d'entrée
        property FmtStr: string read GetFmtStr; // chaîne formatée
        property RawStr: string read fRawStr; // chaîne brute
      end;
    On peut alors déclarer et utiliser un objet comme en C++...

    Bonne programmation,
    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

Discussions similaires

  1. Les resources doivent-elles être placées dans Thèmes ?
    Par scapefrom dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 03/08/2010, 16h58
  2. Extraire les objets d'une librairie dynamique
    Par Lapk_gre dans le forum C
    Réponses: 13
    Dernier message: 29/07/2008, 15h49
  3. Réponses: 3
    Dernier message: 30/08/2007, 12h07
  4. Réponses: 2
    Dernier message: 06/05/2007, 23h37
  5. Réponses: 4
    Dernier message: 01/03/2006, 13h00

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