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 :

La POO accessibilité


Sujet :

Langage Delphi

  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 La POO accessibilité
    Bonjours, voilà j'ai quelques problèmes avec la poo.
    Pour bien me faire comprendre, j'ai fais un petit code d'exemple tout simple.

    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
     
    program objets;
     
    type
      tParent = object
       public 
        nombre : integer; // Un champs
        procedure init;   // Une méthode
      end;
     
      tEnfant = object(Tparent)
       public
         procedure affiche; //Une méthode
      end;
     
    //Implementation
     
    Procedure tParent.init;
    begin
      nombre := 5; //On donne une valeur au champs parent
    end;  
     
    procedure tEnfant.Affiche;
    begin
      write(nombre);
    end;
     
     
    // Instance de classe
    var
      Enfant : tEnfant;
      Parent : tParent
     
    // Main
    begin
      Parent.init;
      Enfant.Affche;
    end.
    Ce programme affiche 0. Alors qu'il 'devrait' afficher 5.
    Merci de vos réponses

  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 448
    Points
    28 448
    Par défaut
    c'est mignon

    tu as deux objets distincts, tu initialises le premier et affiche le second, pas étonnant de ne pas avoir le résultat que tu voudrais

    ton code est équivalent à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var
      a : integer;
      b : integer;
    begin
      a := 5;
      writeln(b);
    end;

  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
    Et donc, je doit faire quoi, parce que quand je met

    tparent.nombre, j'ai une erreur du type

    méthode identifier exepted

    merci

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 336
    Points
    13 336
    Par défaut
    Le problème est que ton objet n'est pas instancié (pas de Create), donc pas d'allocation
    Ce code pourrait te renvoyer 0 comme n'importe quelle autre valeur ! N'as-tu pas une violation d'accès à la sortie ? (Peut-être pas avec un simple entier...)

    Ensuite comme le dit Paul, attention au concept. Ce n'est pas du parent/enfant, mais du ancêtre/héritier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    begin
      Enfant := TEnfant.Create;
     
      try
        Enfant.init;
        Enfant.Affiche;
      finally
        Enfant.Free;
      end;
    end.

  5. #5
    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
    ça marche

    il c'est juste qu'à la fin c'était bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      enfant.init;
      enfant.affiche;

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 336
    Points
    13 336
    Par défaut
    Sans instanciation, tu vas au-devant de grands ennuis

  7. #7
    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 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Sans instanciation, tu vas au-devant de grands ennuis
    tut, tut, ce sont des objets, pas des classes

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 336
    Points
    13 336
    Par défaut
    Autant pour moi. J'avais mal lu...
    D'un autre coté, utiliser object n'est plus conseillé depuis des lustres.

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    @Paul TOTH, tu aurais pu donner la différence entre class et object, titeeee est débutant, ce n'est pas évident de comprendre la subtilité
    En plus, c'est valable uniquement dans la sémantique pascal !
    la différence entre classe et objet dans les concepts POO, c'est encore une autre affaire !

    Faut dire que bcp de débutant en POO ont comme référence le tutoriel Introduction à la Programmation Orientée Objet qui utilise au Turbo Pascal façon OWL et non du Delphi (Pascal Object) avec VCL !


    Pascal (à l'ancienne) avec object

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     tParent = object
       public 
        nombre : integer; // Un champs
        procedure init;   // Une méthode
      end;
     
      tEnfant = object(Tparent)
       public
         procedure affiche; //Une méthode
      end;
    Soit on utilise un tParent, il est instancié automatiquement mais il faut penser à appeler constructor et destructor (grosse différence avec le C++ qui lors d'une instantiation statique le fait implicitement)

    Soit on utilise un ^TParent (pointeur), la fonction New permet de faire l'instanciation dynamique, constructor est passé en paramètre à New mais il faut penser au destructor et dispose !

    d'ailleurs Init et Done, c'est souvent constructor et destructor !
    Evite d'avoir une procedure Init pour respecter les standards pascal

    Delphi avec TObject

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     tParent = class(TObject) // ou simplement TParent = class
       public 
        nombre : integer; // Un champs
        procedure init;   // Une méthode
      end;
     
      TEnfant = class(Tparent)
       public
         procedure affiche; //Une méthode
      end;
    Create est impératif, c'est l'instanciation dynamique obligatoire !

    Quel est ton environnement Turbo Pascal ? Delphi ?
    Si delphi, utilse class et la structure de AndNotOr !
    oubli object, c'est obselète en Delphi !

    D'ailleurs, tu peux faire des programmes VCL Win32, tu semble avoir fait un programme console ?

    Si tu utilise Delphi, tu devrais lire le Guide Pascal et Delphi !
    Si tu as un Delphi 4 à 7, tu as peut-être le bouquin fourni à l'époque qui traine !
    L'exemple FishFactory est très détaillé, mon maitre d'apprentissage m'a collé devant Delphi et m'a dit de suivre le bouquin (je tapais à deux doigts)
    C'est très formateur !

  10. #10
    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
    J'utilisais turbo pascal, et je me suis enfin décidé à utiliser Lazarus.
    Mais je n'ai jamais fais de Poo, donc ce n'est pas évident pour moi

    merci

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

Discussions similaires

  1. [POO] C'est quoi une classe en claire...???
    Par Spack dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 26/01/2009, 15h53
  2. [POO] Accessibilite d'une fonction membre
    Par Tymk dans le forum C++
    Réponses: 11
    Dernier message: 17/10/2008, 14h53
  3. [POO] Soucis d'accessibilité de variable
    Par foolib dans le forum Langage
    Réponses: 6
    Dernier message: 01/08/2008, 08h45
  4. [langage] Pb POO perl
    Par loothoof dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2004, 12h08
  5. lier un cube à un objet (POO)
    Par Hypnos dans le forum OpenGL
    Réponses: 12
    Dernier message: 26/08/2003, 21h46

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