Héritage: comment faire appel à une fonction d'une sous classe
Bonjour,
Est il possible de faire la chose suivante? Si oui, pourriez vous me donner des pistes?
Mise en situation : j'ai plusieurs programmes où j'ai une fenêtre simillaire, pour faire des choses différentes, mais elles sont toutes fort proche d'un point de vue graphique et au niveau du fonctionnement, les grandes lignes sont simillaires, il y a juste dans certaines un peu plus de traitement que dans d'autres.
L'idée est de faire une fenêtre générique liée à un Datamodule générique que j'incluerais dans chaque projet puis, créer une fiche et un datamodule qui héritent de ceux générique. Enfin, dans les classes dérivées, je détaillerais les traitements spécifiques à réaliser.
J'ai donc créé à l'intérieur d'un nouveau projet reprennant ce type de fenêtre une fenêtre et un datamodule qui se veulent générique et j'ai créé une fiche et un datamodule qui en hérite.
Voici le contenu agrégé d'une des fonction de la "super" fiche, la classe mère:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
procedure TSelectFrm.SelectObjet(Id_Personne, Id_Objet, application_name: String;
SelAction: TObjetSelAction);
begin
With SelectXPersDM do
begin
// Fournit les requêtes derrière le dbGrid et PersQry
SetSql_Qry(application_name);
//Si nécessaire: manipule les données de DBGridProviderQry et effectue le changement de DataSet
Manipulation_Data(application_name);
// Fait le lien entre les colonnes du DBGrid et les champs du Datasource
// ConstructionDBGrid
end;
end; |
Manipulation_Data est implémentée dans le datamodule générique
Voici son code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
procedure TSelectXPersDM.Manipulation_Data(application_name: String);
begin
case AnsiIndexStr(application_name, ['Application_A', 'Application_B', 'Application_C']) of
0 :
begin
Manipulation_Data_Application_A;
end;
1 :
begin
Manipulation_Data_Application_B;
end;
2 :
begin
Manipulation_Data_Application_C;
end;
end;
end; |
J'ai déclaré les procédures de type Manipulation_Data_X comme ceci :
Code:
1 2 3 4 5 6
|
protected
{ Déclarations protected }
procedure Manipulation_Data_A; virtual; abstract;
procedure Manipulation_Data_B; virtual; abstract;
procedure Manipulation_Data_C; virtual; abstract; |
L'idée est bien sur que les procédure de type Manipulation_Data_Application_X soit implémentée dans le datamodule (qui hérite du datamodule générique) de l'application X.
Aussi, dans le datamodule qui hérite de celui générique, j'ai déclaré la procédure de cette manière :
Code:
1 2 3 4 5
|
public
{ Déclarations publiques }
procedure Manipulation_Data_A; override ;
end; |
Et là, j'ai un problème pour organiser tout cela.
En suivant pas à pas dans le code, je passe bien par les fonctions génériques mais une fois dedans, je ne sais pas comment faire pour faire appel à des fonctions plus spécifique définie dans la sous classe ( le datamodule qui hérite ).
C'est la première fois que j'essaye de faire ce type de chose (créer une fenêtre générique destinée à être héritée afin de compléter certains traitement), il s'agit là d'un test.
Pouvez vous me conseillez sur la manière de faire?
Merci
Seb7710