Bonjour les gens!
Je reprend une vieille discussion dont le sujet a été clos. J'en profite pour signaler aux webmaster qu'il serait vraiment très très plus mieux de ne pas laisser la possibilité de répondre sur un sujet clos (bouton répondre visible, et possibilité d'écrire) pour indiquer, une fois le long message écrit et relu, puis envoyé, "erreur le sujet est clos". Quand on ne pense pas à faire un CTRL-A CTRL-C avant d'envoyer (j'ai le réflexe maintenant), et qu'on a passé une demi heure à écrire, on doit avoir sacrément les boules, étant donné que "back" ne ramène pas forcément le texte...
Le sujet concerné, auquel je répond ici, est à cette adresse:
http://forum.alsacreations.com/topic-20-21355-1-Resolu-Methode-statique-ET-abstraite.html
Toute cette discussion à propos de la viabilité objet des méthodes abstraites et statiques est bien beau, mais malheureusement, il semble ne pas proposer de solution. Megasquall cependant, apporte des éléments de réponse, mais pour autant il reste des problèmes.
Je suis confronté à un de ces problèmes, et je vais essayer de le détailler ici, vous me direz si vous pensez qu'il existe des solutions sans "abstract static".
Pour chaque table de ma BDD, j'ai deux classes: une dynamique, qui est vouée à être instanciée pour chaque ligne récupérée de la table, et une statique, sorte de boite à outils qui permet de travailler sur la table elle-même. Je ne m'intéresse qu'à la deuxième, la statique. Les connaisseurs auront reconnu l'inspiration Symfonyesque du procédé.
Chaque table possède ses propres champs et son propre nom de table, infos que je stocke dans la classe statique bien entendu, en tant qu'attributs statiques. Je pourrais faire une classe par table et ne plus en parler, merci au revoir. Cependant, il s'avère qu'en dehors des infos précédemment citées, tout le fonctionnement de ces classes est identique à 90%! En bon programmeur, je choisi de créer une classe mère, abstraite, qui contiendra toute la mécanique commune. C'est là que commence mes problèmes: comment faire travailler la classe mère sur des données statiques des classes filles? Puisque les attributs abstraits n'existent pas, il suffit de faire des getters:
Puis on définit le code de cette méthode dans la classe fille. Ainsi, la classe mère appelle les getters qui en fait renvoient les données de la classe fille référencée par l'appel:
fera référence à
contenu dans la classe mère
Je ne vois pas, dans mon exemple, comment me passer de abstrait et statique! Il me faut bien une méthode statique car les méthodes sont statiques, et pourtant, alors que la classe mère doit connaitre les getters, ce sont les classes filles qui doivent les définir, donc abstraite!
Voilà l'exemple que je peux fournir pour alimenter le débat
Bonne journée à tous, et à bientôt!

Je reprend une vieille discussion dont le sujet a été clos. J'en profite pour signaler aux webmaster qu'il serait vraiment très très plus mieux de ne pas laisser la possibilité de répondre sur un sujet clos (bouton répondre visible, et possibilité d'écrire) pour indiquer, une fois le long message écrit et relu, puis envoyé, "erreur le sujet est clos". Quand on ne pense pas à faire un CTRL-A CTRL-C avant d'envoyer (j'ai le réflexe maintenant), et qu'on a passé une demi heure à écrire, on doit avoir sacrément les boules, étant donné que "back" ne ramène pas forcément le texte...
Le sujet concerné, auquel je répond ici, est à cette adresse:
http://forum.alsacreations.com/topic-20-21355-1-Resolu-Methode-statique-ET-abstraite.html
Toute cette discussion à propos de la viabilité objet des méthodes abstraites et statiques est bien beau, mais malheureusement, il semble ne pas proposer de solution. Megasquall cependant, apporte des éléments de réponse, mais pour autant il reste des problèmes.
Je suis confronté à un de ces problèmes, et je vais essayer de le détailler ici, vous me direz si vous pensez qu'il existe des solutions sans "abstract static".
Pour chaque table de ma BDD, j'ai deux classes: une dynamique, qui est vouée à être instanciée pour chaque ligne récupérée de la table, et une statique, sorte de boite à outils qui permet de travailler sur la table elle-même. Je ne m'intéresse qu'à la deuxième, la statique. Les connaisseurs auront reconnu l'inspiration Symfonyesque du procédé.
Chaque table possède ses propres champs et son propre nom de table, infos que je stocke dans la classe statique bien entendu, en tant qu'attributs statiques. Je pourrais faire une classe par table et ne plus en parler, merci au revoir. Cependant, il s'avère qu'en dehors des infos précédemment citées, tout le fonctionnement de ces classes est identique à 90%! En bon programmeur, je choisi de créer une classe mère, abstraite, qui contiendra toute la mécanique commune. C'est là que commence mes problèmes: comment faire travailler la classe mère sur des données statiques des classes filles? Puisque les attributs abstraits n'existent pas, il suffit de faire des getters:
abstract protected static getFieldList();
Puis on définit le code de cette méthode dans la classe fille. Ainsi, la classe mère appelle les getters qui en fait renvoient les données de la classe fille référencée par l'appel:
classeFille::doSelect()
fera référence à
public static doSelect() { }
contenu dans la classe mère
Je ne vois pas, dans mon exemple, comment me passer de abstrait et statique! Il me faut bien une méthode statique car les méthodes sont statiques, et pourtant, alors que la classe mère doit connaitre les getters, ce sont les classes filles qui doivent les définir, donc abstraite!
Voilà l'exemple que je peux fournir pour alimenter le débat

Bonne journée à tous, et à bientôt!