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 :

Existe t il une sorte de polymorphismes pour les membres d'une classe


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 48
    Points : 30
    Points
    30
    Par défaut Existe t il une sorte de polymorphismes pour les membres d'une classe
    Je vais expliquer mon probleme et j'espere que je vais pouvoir être precis et comprehensible alors voilà
    - j'ai une Classe A de laquelle Hérite deux Classes B et C
    - j'ai une classe X de laquelle Hérite deux Classes Y et Z
    - La classe A a un membre de type X et B et C doivent "caster" ce même membre en type, respectivement Y et Z
    - J'ai des traitement à faire par la classe A sur le membre de type X qui est commun à tous ces types
    - J'ai des traitement spécifiques par la classe B et C sur leur membres respectifs de type Y et Z

    comment feriez vous ??

    je ne suis pas sûr d'être trés clair la dessus n'hesitez pas de me poser des questions...
    ANIS

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Je dirais qu'un extrait de code pour chaque classe serait intéressant ...
    si tu n'en a pas encore écrit car tu as un problème de hiérarchie, je te conseille de nous expliquer cette phrase

    La classe A doit a un membre de classe de type X et B et C doivent "caster" ce même membre en type, respectivement Y et Z
    Car personnellement, je ne l'ai pas compris ...
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    en effet je m'en doutais ... alors voici un bout de code même si je n'ai pas encore fait de code

    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
    TBaseModule = Class(TForm)
       AffichageResultat : TBaseAffichageResultat;
      // Initialise l'affichage du résultat (commune aux deux classes filles par 
      // exemple mettre la propriété ParentColor de TBaseAffichageResultat à True
       Procedure InitAffichage; Virtual 
    End;
     
    TBaseAffichageResultat = Class(TPanel)
      Procedure TraitementCommun;
    End;
     
    TRealAffichageResultat = Class(TBaseAffichageResultat)
      MembreReal : TButton;
      Procedure TraitementReal;
    End;
     
    TRealAffichageResultat = Class(TBaseAffichageResultat)
       MembreSimu : TPanel;
       Procedure TraitementSimulation;
    End;
     
    TRealModule = Class(TBaseModule)
       AffichageResultat : TRealAffichageResultat; 
       Procedure InitAffichage; Override // Initialise l'affichage du résultat pour le mode réel
    End;
     
    TSimuModule = Class(TBaseModule)
       AffichageResultat : TSimuAffichageResultat;
       Procedure InitAffichage; Override // Initialise l'affichage du résultat pour le mode simulation
    End;
    J'espère que ça sera plus clair ... si jamais il y a une autre façon de faire n'hesitez pas à me le faire remarquer ... merci d'avance
    ANIS

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Ben dans la classe A tu déclares une variable protected de type X. Dans les construteurs de B et C tu initalises cette variable avec des instances des classes Y et Z respectivement. Et tu ajoutes des propriétés avec getters pour avoir des références à Y et Z.
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    type
      X = class
        // ...
      end;
     
      Y = class(X)
        // ...
      end;
     
      Z = class(X)
        // ...
      end;
     
      A = class
      protected
        FRef : X;
      public
        constructor Create(ARef : X);
        destructor Destroy; override;
      end;
     
      B = class(A)
      private
        function GetRef : Y;
      public
        constructor Create;
        property Ref : Y read GetRef;
      end;
     
      C = class(A)
      private
        function GetRef : Z;
      public
        constructor Create;
        property Ref : Z read GetRef;
      end;
     
    implementation
     
    constructor A.Create(ARef : X);
    begin
      inherited Create;
      FRef := ARef;
    end;
     
    destructor A.Destroy;
    begin
      FRef.Free;
      inherited;
    end;
     
    constructor B.Create;
    begin
      inherited Create(Y.Create);
    end;
     
    function B.GetRef : Y;
    begin
      Result := Y(FRef);
    end;
     
    constructor C.Create;
    begin
      inherited Create(Z.Create);
    end;
     
    function C.GetRef : Z;
    begin
      Result := Z(FRef);
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Excellente idée merci à toi ... j'y avais pas pensé
    Je reste toutefois ouvert à d'autres techniques de programmation que vous me proposerez
    Alors n'hesitez pas ....
    ANIS

Discussions similaires

  1. Une sorte de filtre pour votre écran
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 03/02/2013, 12h12
  2. Réponses: 0
    Dernier message: 30/01/2013, 22h27
  3. Réponses: 60
    Dernier message: 22/09/2011, 08h25
  4. Réponses: 9
    Dernier message: 22/02/2008, 14h21

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