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