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 :

[POO] Concept général


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 21
    Points : 13
    Points
    13
    Par défaut [POO] Concept général
    Bonjour,

    cette question n'est pas spécifique à Delphi, mais comme c'est mon outil au quotidien ...

    Voila, je déclare une nouvelle classe qui possède un objet - un TStringList par exemple mais la question est valable pour tout type d'objet. Le constructeur de la classe instancie le TStringList et charge des valeurs dans celui-ci.
    La variable qui représente le TStringList est déclarée dans la section publique de ma classe afin que le code qui va l'instancier et l'utiliser puisse acceder à toutes les valeurs de la TStringList.

    Jusque là, tout va bien.

    Par contre je désire interdire à tout code autre celui de ma classe elle même, la possibilité de supprimer les éléments de la StringList. Pour faire simple, disons qu'il me faudrait interdire le Delete pour les items de la TStringList.

    Comment fait on pour gérer ce type de problématique ?

    J'ai bien une solution (enfin en gros ...) mais elle me semble extrèmement lourde : Déclarer une nouvelle classe qui hérite de la classe TStringListe, et surcharger la méthode delete pour quelle ne donne pas le résultat "habituel".
    .. heum heum ... cela ne doit être vraiment la bonne soluce.

    Merci pour vos pistes. Juste qqs mots clefs si vous n'avez pas le temps de rentrer dans une longue prose. Sinon j'suis preneur de toute explication.

    Merci, Delphi+

  2. #2
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Salut!

    Tu as parfaitement compris le problème et ton intuition est la bonne : il te faudra refaire la classe et changer la portée (de public à protected ou private) les éléments que tu souhaites masquer.

    Tu peux te déclarer une classe héritant de TStringList mais c'est aussi valable 9et beaucoup plus rapide) de déclarer une classe héritant de TObject, d'y créer un TStringList dans le constructeur et d'interfacer (déclarer et implémenter) les méthodes dont tu as besoin.

    Bon dev!
    -Slimjoe

  3. #3
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Disons que pour ton pb j'aurais juste laissé la tstringlist en private et déclaré une methode publique pour avoir accès aux items. C'est ce qui me semble le plus simple non ?

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Salut SlimJoe,

    Ok pour ta réponse, cependant la surcharge d'une méthode en diminuant sa visibilité (par exemple de public à private) ne fonctionne pas. L'aide Delphi spécifie bien que la visibilité ne peut "qu'augmenter".

    Dans mon cas il me faudrait donc redéclarer une nouvelle classe héritée d'un TObjet, ajouter un TStringList dans la section privée et définir toutes les méthodes et propriétés comme celles du TStringList en déclarant la méthode delete en privée. Est-ce bien cela ?

    C'est plutot un boulot enorme pour simplement "cacher" la méthode Delete ! Est-ce la seule solution ou existe il plus simple ?

    Merci, Delphi+.

  5. #5
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par delphi+
    Ok pour ta réponse, cependant la surcharge d'une méthode en diminuant sa visibilité (par exemple de public à private) ne fonctionne pas. L'aide Delphi spécifie bien que la visibilité ne peut "qu'augmenter".
    Merci pour la précision, je ne connaisais effectivement pas cette facette du Pascal (c'est unique au Pascal ou c'est un standard POO ?).

    Perso, je trouve que la suggestion de philnext est la plus saine. Redéclare à l'intérieur de ta classe les méthodes que tu as besoin et accède à celles qui correspondent à ton TStringList privé.

    Aussi, tu peut-être pourrais déclarer une classe héritant de TStringList, implémenter la méthode Delete et dans la procédure soulever une exception (ou omettre d'appeller inherited Delete pour ne pas que la suppression ne s'exécute réellement sans toutefois soulever d'erreur).
    -Slimjoe

  6. #6
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Pour compléter :
    tu mets ta tStringList en 'private' et tu rajoute en 'public' tes fonction d'accès style :

    function ReadItem(index : integer) : string; //lit une string d'index passé.
    function AddItem(sAdd : String) : integer; //ajoute une string

    Avec bien sûr des possibilité de faire plus complet notamment les gestion d'erruer...mais c'est le principe le plus simple.

Discussions similaires

  1. [POO] Conception de beans
    Par mithrendil dans le forum Autres
    Réponses: 2
    Dernier message: 20/12/2007, 15h30
  2. [POO] conception d'un logiciel de dessin vectoriel
    Par rodymary dans le forum VB.NET
    Réponses: 8
    Dernier message: 01/12/2007, 01h33
  3. [POO] Conception et AddEvent
    Par yudao dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 30/05/2007, 12h20
  4. [POO] Conception d'un système de template
    Par iwf-fr dans le forum Langage
    Réponses: 8
    Dernier message: 06/02/2007, 13h29
  5. [POO] conception des classes
    Par poukill dans le forum C++
    Réponses: 229
    Dernier message: 19/07/2006, 08h28

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