En fait, si tu les classes comme ça, il y en a un peu plus que 5 :
Les méthodes de classes : Celles qu'on définit avec class procedure ou class function. Il s'agit de méthodes qui peuvent être appellée indépendemment de toutes instances de la classe. Lorsque tu les appelles, tu indique le type de la classe, ainsi que le nom de la méthode. Comme il n'y a pas d'instance associée, ces méthodes ne peuvent pas accéder aux attributs de l'objet (sauf s'il s'agit également de variables de classes). Ces méthodes possède cependant un paramètre Self implicite qui désigne le type de la classe à partir duquel elles sont appellés (Ca doit sûrement avoir une utilité...)
Les méthodes static : Comme pour les méthodes de classe, sauf qu'elles ne possèdent pas de paramètres self implicite. Il est donc possible de les utiliser comme méthode callback lorsqu'on travaille avec certaines API Win32. En fait, on peut aussi les voir commes des procédures et fonctions ordinaires qu'on déclare à l'intérieur d'un objet pour la lisibilité du code.
Dynamique ou Virtuelle : Comme ça a été expliquée précédemment les deux ne se distinguent que par leur implémentation internes. Personnellement, je passe tout en virtual et je ne me pose pas de questions. Il s'agit des méthodes virtuelles classiques, c'est à dire une méthode dont on pourra redéfinir l'implémentation dans une classe dérivée.
Les méthodes abstraites : Une méthode abstraite et une méthode qui est déclarée dans la base de base, mais pour laquelle on ne peut pas (ou on ne veut pas) fournir d'implémentation. Et surtout, on veut forcer le développeur à la redéfinir dans les classes dérivées. Lorsqu'on déclare une méthode comme étant abstraite, on ne définit plus d'implémentation associée.
De facto, une méthode abstraite doit nécessairement être virtuelle. Dans Delphi, on définit un méthode abstraite en ajoutant le mot-clé "abstract" après la définition de la méthode virtuelle. Comme on a deux type de méthode virtuelle, on obtient "dynamique abstraite" et "virtuelle abstraite".
Il y a aussi les méthodes "normal", celle que tu appelles "Statique". Elles ont accès aux attribut de l'instance. Les classes dérivées peuvent y faire appel. Par contre, elles ne peuvent pas être surchargées.
On pourrait encore ajouter à celà les procédures de message et les méthodes publiées...
On a de la chance, en Delphi Win32, on ne peut pas encore déclarer de méthode Final (qui étaient virtuelle, mais qu'on décide de sceller dans une classe et qui ne pourront plus être surchargées dans les classes dérivées).
Je sais ce n'est pas toujours très facile à suivre. Delphi possède beaucoup de concepts qui lui sont propres, liés à l'implémentation du RAD et qui ne font pas partie de la "norme objet"
Partager