8791 sujets

Développement web côté serveur, CMS

Pages :
Bonjour à tous,

j'ai une petite interrogation à vous faire partager ...

J'ai changé aujourd'hui ma version de PHP :
PHP Version 5.1.0 => PHP Version 5.2.0

Et je me retrouve avec une erreur:
apparament on ne peut pas dans une classe abstraite, déclarer une méthode à la fois abstraite et statique. Je m'en servai pour faire un "modèle" de classe.


abstract class TEST
{
    abstract static public function TEST_A();

    abstract static public function TEST_B();
}


du coup, toutes les classes qui hérite de "TEST" doivent déffinir les méthodes "TEST_A" et "TEST_B". Sauf que la ça marche pas ...

J'ai corrigé, en enlevant "abstract" et ça marche, mais du coup cela augmante les risque d'erreur lors de la programmation de classes enfants.

Existe il une autre façon de faire une classe "modèle" compatible PHP 5.2.0?
Modifié par Francois44 (09 Jan 2007 - 02:49)
Je dirais que cela vient de chez toi Smiley cligne

Ceci marche très bien. Sinon, pourquoi une classe abstraite et pas une interface ?

<?

abstract class Test {

    abstract public static function a();
    abstract public static function b(); 
}

?>
a écrit :
Sinon, pourquoi une classe abstraite et pas une interface ?


Je veux bien, disons juste que c'est une de mes lacunes en dévellopement objet ...

C'est quoi une interface exactement?
quel est l'avantage de son utilisation?
dans quel cas doit ont l'utiliser?

tant de question ... je serai très intéressé par une ou des réponses (ou lien vers des tuto) Smiley cligne
Bonjour.

On distingue généralement l'interface de l'implémentation. L'interface est la partie publique de l'objet, dont les caractéristiques sont d'être stable et documentée.

Par exemple, le modèle DOM est la description d'une interface. Celle-ci est définie indépendament de l'implémentation des classes par tel ou tel système.

C'est de toute façon des concept objets avancés, qui méritent d'y passer du temps car leur usage fait évoluer son style de programmation.

http://www.clever-age.com/veille/blog/quelle-difference-entre-une-classe-abstraite-et-une-interface.html

http://www.zend.com/php5/articles/php5-interfaces.php
As tu vraiment besoin de mélanger autant de concepts pour ton programme ?

On peut faire de l'orienté object sans héritage, sans méthodes statiques, etc. Smiley cligne
GeorgesM >>
merci pour les précisions, je regarde les liens.Il semble que le premier lien soit HS ... en fait non, ça marche Smiley sweatdrop .

Antoine Cailliau >>
Donc en gros, j'utilisais déjà un semblant de concept d'interface sans le savoir ...

Cedric >>
Je pense que la force de la POO c'est justement les quelques particularité que tu cites Smiley cligne . En plus, mon projet est relativement gros et entièrement objet ... donc oui, j'ai besoin d'autant de concepts pour mon programme.
Modifié par Francois44 (08 Jan 2007 - 09:46)
Cedric a écrit :
As tu vraiment besoin de mélanger autant de concepts pour ton programme ?

On peut faire de l'orienté object sans héritage, sans méthodes statiques, etc. Smiley cligne

Pour programmer correctement il vaut mieux utiliser au mieux les concepts du paradigme que l'on utilise.

Faire de l'objet sans héritage et sans composition, c'est un peu comme faire de la programmation fonctionnelle sans fonctions.
Bonjour,
Antoine Cailliau a écrit :
Pour programmer correctement il vaut mieux utiliser au mieux les concepts du paradigme que l'on utilise.
Pour ma part, je ne trouve pas qu'une fonction statique et abstraite corresponde à une utilisation correcte de la programmation objet. Peut-on avoir un exemple d'un cas où c'est adapté ?
Dans le cas par exemple d'une classe Number représentant de manière abstraite les opérations sur les nombres. Des sous classes pourraient être Integer, Float, Double et les opérations sont accessible en static Smiley cligne
Antoine Cailliau a écrit :
Dans le cas par exemple d'une classe Number représentant de manière abstraite les opérations sur les nombres. Des sous classes pourraient être Integer, Float, Double et les opérations sont accessible en static Smiley cligne
Je ne vois pas le rapport...

L'intérêt d'une méthode abstraite, c'est de l'utiliser dans le cadre du polymorphisme. Si elle est statique, quel est l'intérêt ?
L'intéret du static... De pouvoir être appellé sans devoir créer une nouvelle instance. Le static n'est pas incompatible avec l'abstrait.
Antoine Cailliau a écrit :
L'intéret du static... De pouvoir être appellé sans devoir créer une nouvelle instance. Le static n'est pas incompatible avec l'abstrait.
Tu ne m'as toujours pas donné d'exemple concret qui en vaille la peine. Une fois encore, l'intérêt d'une méthode abstraite, c'est le polymorphisme, qui n'est à ma connaissance pas compatible avec les méthodes statiques. Ce n'est pas pour rien que les méthodes statiques et abstraites n'existent pas en Java par exemple.
Je n'ai pas plus d'exemple en tête mais il me semble que, par exemple, dans le cas d'une classe abstraite ayant pour vocation de faire des classes filles implémentant le pattern Singleton, cela peut être utile.

Ce n'est pas parce que ce n'est pas dans Java que ce n'est pas valable. Java n'est pas LE langage pour faire de l'orienté objet. Il n'est même pas complètement orienté objet.
De plus http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4093687
Antoine Cailliau a écrit :
Je n'ai pas plus d'exemple en tête mais il me semble que, par exemple, dans le cas d'une classe abstraite ayant pour vocation de faire des classes filles implémentant le pattern Singleton, cela peut être utile.
Je ne vois pas du tout l'utilité de ton exemple. Le pattern singleton n'est en aucun cas lié à l'héritage.
Antoine Cailliau a écrit :
Ce n'est pas parce que ce n'est pas dans Java que ce n'est pas valable. Java n'est pas LE langage pour faire de l'orienté objet. Il n'est même pas complètement orienté objet.
Oui, c'est vrai. D'ailleurs, quel est LE langage pour faire de l'objet ?
SmallTalk Smiley cligne

Je ne vois pas en quoi il est dénué de tout intéret de faire une classe abstraite qui oblige les classes enfants à implémenter le singleton.

Ce code *devrait* marcher Smiley smile

abstract class singletonPerso {
public static abstract Object getInstance();
}
Antoine Cailliau a écrit :
SmallTalk Smiley cligne
Certes... la question qui fâche : est-ce encore utilisé ? Smiley cligne

Bon sinon, je reconnais m'être un peu emporté alors que je manque d'éléments sur le sujet, et ça, c'est mal.

Mais je ne comprends toujours pas l'intérêt d'une méthode statique et abstraite, peut-être à cause de mes oeillères Java et C++. En clair, le seul but est de contraindre les classes héritées à implémenter cette méthode statique, mais ça n'a aucune utilité en terme de polymorphisme ?
Smiley cligne Smiley cligne
Eldebaran a écrit :
Certes... la question qui fâche : est-ce encore utilisé ? Smiley cligne

En entreprise peu mais cela reste une reference en matiere de conception objet.

a écrit :

Mais je ne comprends toujours pas l'intérêt d'une méthode statique et abstraite, peut-être à cause de mes oeillères Java et C++. En clair, le seul but est de contraindre les classes héritées à implémenter cette méthode statique, mais ça n'a aucune utilité en terme de polymorphisme ?

L'interet est limite mais toutefois present. Imposer que des classe aient des methodes abstraites peut parfois etre extremement utile. Je vais essayer de trouver des exemples concrets.

;)
Antoine Cailliau a écrit :
L'interet est limite mais toutefois present. Imposer que des classe aient des methodes abstraites peut parfois etre extremement utile. Je vais essayer de trouver des exemples concrets.

;)
OK, merci. Smiley smile
Bonjour,

Antoine Cailliau a bien raison.
Le language orienté object par excellence est bien SmallTalk.
Il est peu utilisé malheureusement, mais son développement est très actif.

Voici un exemple d'application démontrant la puissance de ce language.

http://www.squeak.org/

Une plateforme qui permet de manipuler des objects dans tous les sens via une interface graphique.
Son intérêt est à but éducatif.
Il permet d'expliquer le concept objet tout en s'amusant et de réaliser de véritables applications multimédia.
Quelqu'un n'ayant jamais fait de programmation ou bien un enfant peur l'utiliser tellement qu'il est simple d'utilisation.

Maintenant les enfants vont se mettre à l'orienté objet Smiley biggrin
Pages :