Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Existe t il une sorte de polymorphismes pour les membres d'une classe [ Algorithme / Autre ] (anisb)

mardi 16 janvier 2007 à 11:13:45 | Existe t il une sorte de polymorphismes pour les membres d'une classe

anisb

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 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
- 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...

mardi 16 janvier 2007 à 11:33:26 | Re : Existe t il une sorte de polymorphismes pour les membres d'une classe

anisb

Voilà je rajoute un petit bout de code

[CODE]TBaseModule = Class(TForm)
   AffichageResultat : TBaseAffichageResultat;
   Procedure InitAffichage; Virtual // Initialise l'affichage du résultat
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;
[/CODE]

mardi 16 janvier 2007 à 12:29:44 | Re : Existe t il une sorte de polymorphismes pour les membres d'une classe

Loda

Membre Club
Réponse acceptée !
salut,

d'abord je tiens à souligner qu'on (je) apprécie les questions bien posée comme la tienne. Pourrait juste manquer, un p'tit bonjour et ce que tu veux implémenter (l'idée général).


Sinon pour ta question (1er post):

je t'ai popndu un code d'exemple. t'as les grande ligne, adapte le pour tes besoin. Mais avant joue un peu avec p'our bien comprendre qui fait quoi quand.

- cree un nouveau projet
- pose un tmemo et un button
- Copie le code suivant dans l'unité


unit uDemo1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

//---------------------------
// pre declaration (comme ça on peut l'utiliser dans C_A)
C_X = class;

C_A = Class(TObject)
private
  Data_C_A  : string;
  Assoc_X : C_X; //liens vers autre class.
  procedure DoIt(mem:TMemo);virtual;
  constructor Create; virtual;
end;

C_B = Class(C_A)
private
  Data_C_B : String;
  procedure DoIt(mem:TMemo);override;
  constructor Create; override;
end;

C_C = Class(C_A)
private
  Data_C_C : string;
  procedure DoIT(mem:TMemo);override;
  constructor Create; override;
end;

//----------------------------------

C_X = Class
private
  Data_C_X : string;
  procedure DoIT(mem:TMemo);virtual;
  constructor Create; virtual;
end;

C_Y = Class(C_X)
private
  Data_C_Y : string;
  Data_C_Y2 : extended;
  procedure DoIT(mem:TMemo);override;
  constructor Create; override;
end;

C_Z = Class(C_X)
private
  Data_C_Z : string;
  Data_C_Z2 : integer;
  procedure DoIT(mem:TMemo);override;
  constructor Create; override;
end;
//-------------------------

var
  Form1: TForm1;

implementation
{$R *.dfm}

{ C_A }

constructor C_A.Create;
begin
  Data_C_A := 'Data de Class A';
  Assoc_X := nil; //pas d'object pour le moment.
end;

procedure C_A.DoIt(mem: TMemo);
begin
  mem.Lines.Add(Data_C_A);

//  Si un object est lié
  if Assigned(Assoc_X) then begin

    // traitement specifique
    // (override de methode : meme goal/usage, mais moyen différent)
    Assoc_X.DoIT(mem);

    // lit les data spécifique
    // (lit les données spéc à la class lieé dynamiquement)
    if Assoc_X is C_Y then
      with Assoc_X as C_Y do begin
        mem.Lines.Add(Format('Y : %f',[Data_C_Y2]));
      end;

    if Assoc_X is C_Z then
      with Assoc_X as C_Z do begin
        mem.Lines.Add(Format('Z : %d',[Data_C_Z2]));
      end;

  end;

end;

{ C_B }

constructor C_B.Create;
begin
  inherited;
  Data_C_B := 'Data de Class B(A)';
end;

procedure C_B.DoIt(mem: TMemo);
begin
  inherited;
  mem.Lines.Add(Data_C_B);
end;

{ C_C }

constructor C_C.Create;
begin
  inherited;
  Data_C_C := 'Data de Class C(A)';
end;

procedure C_C.DoIT(mem: TMemo);
begin
  inherited;
  mem.Lines.Add(Data_C_C);
end;

{ C_X }

constructor C_X.Create;
begin
  Data_C_X := 'subData de C_X';
end;

procedure C_X.DoIT(mem: TMemo);
begin
  mem.Lines.Add(Data_C_X);
end;

{ C_Y }

constructor C_Y.Create;
begin
  inherited;
  Data_C_Y := 'subData de C_Y (C_X)';
  Data_C_Y2 := 3.14;
end;

procedure C_Y.DoIT(mem: TMemo);
begin
  inherited;
  mem.Lines.Add(Data_C_Y);
end;

{ C_Z }

constructor C_Z.Create;
begin
  inherited;
  Data_C_Z := 'subData de C_Z (C_X)';
  Data_C_Z2 := 123;
end;

procedure C_Z.DoIT(mem: TMemo);
begin
  inherited;
  mem.Lines.Add(Data_C_Z);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Ay, Az : C_A;
  Y : C_Y;
  Z : C_Z;
begin
  // cree les object
  Ay := C_A.Create;
  Az := C_A.Create;
  Y := C_Y.Create;
  Z := C_Z.Create;

  // cree les liens
  Ay.Assoc_X := Y;
  Az.Assoc_X := Z;

  //display result
  Memo1.Clear;

  Memo1.Lines.Add('# Ay : ');
  Ay.DoIt(Memo1);

  Memo1.Lines.Add('# Az : ');
  Az.DoIt(Memo1);

  // libere les object
  Y.Free;
  Z.Free;
  Ay.Free;
  Az.Free;

end;

end.


les possibilités de liens entre les class sont nombreux. Un choix calme et réfléchit est vital pour bien démarrer un soft.

les liens peuvent être bidirectionel, monodirectionel, un à plusieur, plusieur à un, .... une connaissance de base de la modélisation UML (pas seulement ce que veullent dire les petit dessin) est très utile (voir indispensable). renseigne toi.

bien  maîtrisié le language (delphi) est aussi important (ici on peut t'aider si t'as des questions)

lorsque tu fait des liens de ce type entre des class, fait bien attention quand et qui détruit quoi. (évite les perte de mémoire et les violation d'acces.)

Loda

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.

vendredi 19 janvier 2007 à 10:38:56 | Re : Existe t il une sorte de polymorphismes pour les membres d'une classe

anisb

Bonjour,
Bonjour,
Bonjour, (Voilà les trois bonjour des mes trois precedents Posts désolé pour le retard )
Merci Loda, pour avoir pris autant de temps et autant de peine à me répondre...
J'ai eu une autre façon de faire (comme tu le disais il y a plusieurs façon de faire) sur le forum de developpez et je voudrais en faire profiter les autres forumiens. Il s'agit en fait de positionner des Propriétés avec des Getters des Setters sur le membre de classe de base. ainsi on a un acces direct à celle-ci (d'une manière artificielle) par invocation de cette propriété
Merci

lundi 22 janvier 2007 à 12:13:48 | Re : Existe t il une sorte de polymorphismes pour les membres d'une classe

Loda

Membre Club
salut,

le fait que tu utilise des getter et setter pour acceder au champs ne CHANGE RIEN (ou presque) à ta structure de base !!

c'est important que cela soit clair pour toi!

d'avoir

MonLien : TMaClass

ou property MonLien read fMonLien;

c'est la même choses.

cela te permet seulement de faire des clacul/mise à jour / vérification avant de retourner l'object. C'est pratique, par exemple, pour ne créer des object que lors du premier appel

genre
functionTMaClass.GetMonSousObject : TMonSousObject;
begin
  if not assigned(fMonSousObject) then
  fMonSOusOject := TMonSOusObject.Create;

  fMonSousObject.MiseAJour;
  Result := fMonSOusObject;
end;

mais la façon dont tes class sont liée est un autre problème.

note qu'il a surement moyen de faire plus simple que l'explication donnée dans ton premier post, mais ne connaissant pas le context, je ne peux pas te répondre plus précisement. Je me suis contenté de répondre à ta question technique sur les class. t'as surement une bonne strucutre maitenant, mais fait jsute attention à bien comprendre ce que tu fais.

bon code,

Loda

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.



Cette discussion est classé dans : type, classe, existe, membre, membres


Répondre à ce message

Sujets en rapport avec ce message

This existe ? [ par Bruto ] En C++ & C#, il existe le membre This pour chaque objet. Ce qui permet à un objet d'une classe de pointer vers lui-même.Par exemple, je dispose d'une types énumérés = enfer [ par marex ] Je veut faire un jeu console pour égayer la classe pendant les temps morts du cours de programmation mais je ne comprend rien au type énuméré(je sait Classe et méthode abstraites [ par furax13 ] j'utilise une classe abtraite TclassA qui contient un certains nombres d'attributs.Je définis n classe de type TclassB qui héritent de TclassA.J'aimer Lecture fichier XML vers une ou plusieurs classes [ par furax13 ] Soit le fichier xml suivant :      0   <coefficient nom= Type HTML : ca existe ? [ par Francky23012301 ] Salut à tous, Salut existe t'il un type HTML ou un équivalent lié evidemment à une page interneten langage HTML ?? Merci à vous collection de classe ? [ par develomagaly ] bonjour Je vous explique en quelques mots mon problème .J'ai une table sous MySql qui contient des informations sur les AMORTISSEMENT .Je renseigne ce POO : problème d'héritage [ par thierryC ] Bonjour, Dans un programme en Delphi6, j'ai le souci suivant : une classe A contient un objet de type Classe B ; dans cette classe B, je crée un obje TDisk : existe-t-il un composant équivalent ? [ par Francky23012301 ] Salut à tous,Sous delphi 1 et 2 il existe un composant TDisk. Savez vous si il y a un équivalent pour delphi 7 ???Merci type de connexion internet [ par cybersky ] Salut à tous les développeurs, Voilà ma question est simple mais peut être pas le code : Function TestConnect: Boolean; Var   dwFlags: DWord; Begin Quelle requête SQL Access pour vérifier si un nom existe dans le champs nom d'une table ? [ par colorid ] Je repose la question précédente autrementJe dispose d'une table "Toto" qui possède un champ "Toto.Nom" (VARCHAR(32))Je veux vérifier que nom "Name" (


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.