Bonjour,

J'ai parcouru le forum, lu les tutos sur la POO mais je ne parviens pas à mes fins

J'ai créé un classe TTable, dérivée de TImage.
Voici le 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
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
71
72
73
74
75
76
77
78
79
80
81
unit Table;
 
interface
uses Champs,QExtCtrls,Dialogs,SysUtils;
 
type TabListeChamps = array of TChamps;
 
type TTable=class(TImage)
 
private
nom:string;
lesChamps:TabListeChamps;
nbElements:integer;
indiceCourant:integer;
 
public
 
 
procedure setNom(unNom:string);
function getNom:string;
procedure AddField(leChamps:TChamps);
procedure RemoveLastField;
procedure RemoveAField(intitule:string);
procedure RemoveAllFields;
function ListFields:TabListeChamps;
procedure DrawTable;virtual;abstract;
constructor Create;
end;
 
implementation
 
constructor TTable.Create;
begin
nbElements:=0;
indiceCourant:=0;
end;
 
procedure TTable.RemoveAllFields;
begin
nbElements:=0;
SetLength(lesChamps,nbElements);
end;
 
procedure TTable.RemoveAField(intitule:string);
var
i,j:integer;
trouver:boolean;
begin
i:=0;
trouver:=false;
if (nbElements<>0) then
begin
repeat
 //if (i<high(lesChamps)) then
 //i:=i+1;
 if (lesChamps[i].getIntitule = intitule) then
 trouver:=true
 else
 i:=i+1;
until ((trouver) or (i=high(lesChamps)+1));
 
if (trouver) then
begin
for j:=i to high(lesChamps)-1 do
lesChamps[i]:=lesChamps[i+1];
nbElements:=nbElements-1;
SetLength(lesChamps,nbElements);
end
else
ShowMessage('L''élément à supprimer n''existe pas');
end
else
ShowMessage('Aucun champs présent pour cette entité');
end;
 
function TTable.ListFields:TabListeChamps;
begin
result:=lesChamps;
end;
 
end.
Ensuite, viens 2 classes enfants à TTable qui TEntite et TRelation.

Voici la déclaration d'une d'entre elles :

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
unit Entite;
 
interface
 
uses QExtCtrls,Dialogs,SysUtils,Table;
 
type TEntite=class(TTable)
 
public
procedure DrawTable;override;
 
end;
 
implementation
 
uses UPrincipale;
 
procedure TEntite.DrawTable;
begin
ShowMessage('Essai de la méthode');
end;
 
end.
Je ne sais pas comment déclarer le create pour :
- dans la classe TTable, je puisse initialiser des valeurs
- dans mes classes dérivée de TTable, pourvoir avoir le create de la classe TTable tout en y ajoutant du code supplémentaire.

J'espère que vous pourrai m'éclairer car entre override, overload, inherited etc ... je commence a m'emmélé les pinceaux :

Si je comprends bien :
- override surcharge une méthode avec des paramètres supplémentaires
- overload permet de redéfinir entièrement une méthode (cela veut-il dire que l'on reprends une méthode et qu'on "la vide" ?)
- inherited permet d'appelant une méthode d'un parent.

Merci de votre aide
Cordialement Ero-Sennin