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 :

Objet et Pointeur


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut Objet et Pointeur
    Salut les dév;

    D’une part on a la notion de pointeur; sujet assez classique et faisant peur aux développeurs (pas tous heureusement), d'autre part la notion objet.

    Je démarre par l'hypothèse qu'un développeur code seulement des objets alors à quoi bon s'intéresserait-il aux pointeurs ? Je fais allusion bien sûr à la nouvelle génération de développeur, pourquoi lui demander d’apprendre tout ce qui est en relation avec les pointeurs ?
    En d'autres termes, les pointeurs ont-ils place dans la programmation objet? Et dans quelles conditions les utilisés ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 097
    Par défaut
    Tout dépend aussi le langage !

    En C# ou Java, l'objet est prédominant voire la seule solution de développement, en Java, je crois que le pointeur n'existe pas, en C# faut jouer avec le Garbage Collector.
    En C++, il y a objet statique et objet (à l'allocation) dynamique, en fait, en allocation dynamique C++, on alloue un pointeur sur un objet via le New (libérer par Release, je crois), mais il existe des objets SANS allocation explicite ! c'est d'ailleurs la différence entre le . pour les objets statiques (utiliser souvent dans les fonctions pour bénéficier de la libération automatique des blocs C++) qui est remplacé par -> pour les objets dynamiques ...
    En Delphi, un objet est aussi un pointeur, en fait, il n'existe finalement que l'allocation dynamique avec le Create (et son Free)

    Maintenant, je connais des développeurs C# (dont mon cousin) qui ne connaissent pas ce qu'est un pointeur, n'a jamais alloué de mémoire lui même, ne connais pas ce qu'est une convention d'appel, toutes ces petites choses indispensables pour faire des DLL à la vieille époque, le .NET gérant les assembly pour éviter au développeurs de se creuser la tête pour l'opérabilité et se concentrer sur un développement métier rentable pour sa société ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    Salut les dév;

    D’une part on a la notion de pointeur; sujet assez classique et faisant peur aux développeurs (pas tous heureusement), d'autre part la notion objet.

    Je démarre par l'hypothèse qu'un développeur code seulement des objets alors à quoi bon s'intéresserait-il aux pointeurs ? Je fais allusion bien sûr à la nouvelle génération de développeur, pourquoi lui demander d’apprendre tout ce qui est en relation avec les pointeurs ?
    En d'autres termes, les pointeurs ont-ils place dans la programmation objet? Et dans quelles conditions les utilisés ?

    Merci d'avance.
    J'ai ce genre de discussion avec un collègue

    par exemple, je n'hésite pas à caster un TTreeNode.Data en Integer ou TComponent.Tag on TObject...alors que lui va faire ce genre de chose :

    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
     
    var
      i : integer;
      pi : ^integer;
    begin
    // ma version
      Node.Data := pointer(i);
      ...
      i := Integer(Node.Data);
    // sa version
      new(pi);
      Node.Data := pi;
      pi^ :=  i;
      ...
      pi := Node.Data;
      i := pi^;
      Dipose(pi);
      Node.Data := nil;
    end;
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    begin
    // ma version
      Comp.Tag := Integer(Button);
      ..
      Button := TButton(Comp.Tag);
    // sa version
      Comp.Tag := ObjectList.Add(Button);
      Button := ObjectList.Items[Comp.Tag];
      ObjectList.Remove(Button);
    end;
    je ne peux que reconnaître que son code est plus fiable que le mien Mais je continue à travailler comme je le fais...ou à dériver les composants pour leur ajouter les propriétés dont j'ai besoin car je sais ce que je fais

    Le tout objet et les pointeurs c'est pareil, un pointeur est un outil au même titre que l'objet. Les connaître c'est avoir un outil en plus pour coder, les ignorer c'est avoir un outil en moins

    On pourrait étendre ta question aux tableaux dynamiques et aux collections d'objets...sur un grand nombre de données je préfère de loin avoir un tableau dynamique qu'une collection d'objets dont il faudra allouer chaque instance.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Par défaut
    Salut,

    Mon grain de sel :

    Les pointeurs n'ont pas disparu de la programmation.
    Plein de moyens ont été trouvé pour alléger la syntaxe, et plusieurs langages proposent des moyens de cacher les accès à ces pointeurs. Je trouve que c'est une bonne chose d'alléger la syntaxe, que ça permet d'y voir plus clair, de mieux comprendre, et de moins débugger.

    Par contre, la structure sous-jacente est toujours là, et être à l'aise avec la notion de pointeur en général m'a l'air autant d'actualité qu'avant, sinon plus : plus on cache au programmeur l'accès aux pointeurs et la manière dont la mémoire est allouée, plus il faut que le programmeur soit capable de comprendre quels choix ont été faits pour bien utiliser les ressources.

    Le terme "programmation objet" ne veut pas à dire qu'on s'est débarrassé des pointeurs, au contraire : il faut regarder comment a été implantée la politique objet du langage (cf la construction automatique d'un objet à sa déclaration en C++, le garbage collecting en Java, ou le modèle Delphi qui fait un mix (pas piqué des vers) de comptage de références et d'allocations explicites...), il faut se rendre compte de qu'est-ce qui fait quoi (qu'est-ce que ça veut dire "appeler une fonction dynamique"? pourquoi est-ce que mon débogueur me montre 3000 lignes d'assembleur?), quelles sont les forces et les failles de chaque système...

    Qu'est-ce qui se produit effectivement quand on fait une opération aussi bénigne que "a := b"? Pourquoi est-ce que "obj1 = obj2" ne renvoie pas le résultat auquel on s'attend? Comment écrire prorprement une méthode "Clone"? Quand est-ce que je dois faire un "Destroy"? Autant de question simples derrière lesquelles se cachent des pointeurs. Alors pour les questions compliquées...

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message

    je ne peux que reconnaître que son code est plus fiable que le mien Mais je continue à travailler comme je le fais...ou à dériver les composants pour leur ajouter les propriétés dont j'ai besoin car je sais ce que je fais
    si je peux, qu'entend-tu par fiable maître Paul TOTH ?

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    si je peux, qu'entend-tu par fiable maître Paul TOTH ?
    et bien son code utilise strictement les données comme étant ce qu'elles sont...un entier dans un entier, un objet dans un objet.

    Dans mon cas je pars du principe que les deux sont compatibles, ce qui n'est pas forcément le cas si Tag passe en 64bits et pas Data

    De la même façon j'utilise intensivement les string comme buffer binaires, car un "array of byte" est moins simple à manipuler qu'un string (copy, pos, +, etc...)...sauf qu'avec Delphi 2009 le string passe en unicode et le char sur 16bits, ce qui rend mon code incompatible
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    donc, c'est plus une question de compatibilité et de portabilité !

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    donc, c'est plus une question de compatibilité et de portabilité !
    oui tout à fait
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    J'ai regardé les deux exemples tu as donné et je dois te dire que :
    - Pour les mêmes aisons de "compatibilité" je préfère de loin coder comme ton collègue.
    - Mais par contre, "caster" d'un type énuméré en type entier ou de caster un pointeur en cardinal, ça, ça m'arrive assez souvent.
    - Les pointeurs me sont tout de même bien pratique de temps en temps
    (Bon sur mon Oric Atmos sur lequel je développe en C, j'en ai utilisation systématique)
    - Et même l'assembleur m'aide bien aussi l'occasion quand je souhaite travailler chaque bit de mes octets !

Discussions similaires

  1. Assignation objet sans pointeur
    Par jeremm dans le forum C#
    Réponses: 3
    Dernier message: 03/12/2012, 20h35
  2. Conteneurs -> mettre objets ou pointeurs?
    Par Nykoo dans le forum Qt
    Réponses: 9
    Dernier message: 16/03/2008, 19h55
  3. Manipulation d'objet / de pointeurs
    Par gnulix dans le forum C++
    Réponses: 4
    Dernier message: 15/04/2007, 13h59
  4. conserver ma liste d'objets sans Pointeur Null ...
    Par comme de bien entendu dans le forum Général Java
    Réponses: 8
    Dernier message: 24/03/2006, 11h55
  5. Construction objets et pointeurs
    Par Jahjouh dans le forum C++
    Réponses: 2
    Dernier message: 12/01/2006, 10h10

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