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

Delphi Discussion :

Question sur les méthodes abstraites


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2002
    Messages : 109
    Points : 71
    Points
    71
    Par défaut Question sur les méthodes abstraites
    Bonjour,

    Je suis présentement entrain de développer un système de documentation. Je me suis donc créé une classe de base TDocument avec des variables membres et des méthodes publiques. Jusque là, tout va.

    Pour un certain traitement, j'avais besoin d'implémenter la même méthode dans mes sous-classes. J'ai donc décidé de créer une méthode vrituelle et abstraite dans ma classe de base.

    function MaFonction(...): resultat; virtual; abtract;

    Encore une fois, tout va bien.

    Lorsque je crée des documents, je les stocke dans une TObjectList. Ensuite, pour appeler ma fonction abstraite, au lieu d'avoir à faire des vérifications sur le type d'objet avant de faire un transtypage, je fais directement ceci:

    Valeur := TDocument(ObjectList.Items[X]).MaFonction;

    En clair, j'appelle ma fonction implémentée de la sous-classe en transtypant directement avec la classe de base. Est-ce une façon correcte, ou si l'on veut légale? Pour l'instant, ça fonctionne bien, mais j'aimerais savoir si cela me limitera plus tard.

    Dernière question, je croyais qu'une classe contenant des méthodes abstraites ne pouvait pas être instanciée? Or, je peux instancier un objet de type TDocument et appeler les méthodes publiques. Évidemment, j'ai l'Abstract error si j'essai d'appeler ma méthode abstraite.

    Merci de votre aide!

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Citation Envoyé par nmathon
    Lorsque je crée des documents, je les stocke dans une TObjectList. Ensuite, pour appeler ma fonction abstraite, au lieu d'avoir à faire des vérifications sur le type d'objet avant de faire un transtypage, je fais directement ceci:

    Valeur := TDocument(ObjectList.Items[X]).MaFonction;
    Cette méthode d'appel est parfaite. Par contre, si ta TObjectList avait été polymorphique il est certain qu'il aurait fallu vérifier le type de l'objet avant de faire quoi que ce soit.

    En ce qui concerne les méthodes abstraites, je ne vais pas paraphraser ce que Laurent Dardenne a clairement exposé dans son tuto sur les références de classes ou métaclasses et qui répond parfaitement à ton interrogation.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2002
    Messages : 109
    Points : 71
    Points
    71
    Par défaut
    Oh, ajouté aux favoris!

    Merci énormément!

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par nmathon
    Dernière question, je croyais qu'une classe contenant des méthodes abstraites ne pouvait pas être instanciée?
    C'est le cas si elle ne contient QUE des méthodes abstraites (jusqu'a Delphi 2005) et encore, on peut l'instancier mais elle ne proposeras aucun traitment %-(. La VCL contient qq composants instanciables possédant des méthodes abstraites. Cela permet entre autres aux concepteurs de composants d'obliger les développeurs à implémenter un traitement spécifique.
    C'est que tu fais

    Depuis Delphi 2006 Borland a lever l'ambiguïté, enfin à mon avis, concernant les classes abstraites (merci dotNET) car à partir du moment où on peut avoir des variables de classes ce que je disais en premier n'est plus valide.

    Enfin si j'ai bien tout compris

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

Discussions similaires

  1. question sur les méthodes de segmentation d'image
    Par mina_star dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 20/06/2012, 00h39
  2. Question sur les méthodes play.db.jpa.Model
    Par sarazinj dans le forum Play!
    Réponses: 3
    Dernier message: 01/03/2012, 15h59
  3. Question sur les classes abstraites
    Par zpico dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 23/05/2011, 16h15
  4. question sur les méthodes statique
    Par yacin87 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 14/04/2010, 10h32
  5. Réponses: 2
    Dernier message: 21/05/2009, 12h31

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