classe et interface

classe et interface - PHP - Programmation

Marsh Posté le 08-07-2005 à 15:56:59    

j'ai une classe avec ses methodes
et une interface qui liste ces methodes
 
comment je fais pour acceder a ces methodes car je crois qu'une interface ne peut etre instanciée:
ex : $objet= new mon_interface; c impossible
 
faut il instancier la classe pour acceder a ses methodes ?
si oui, quel est l'interet de faire une interface ?

Reply

Marsh Posté le 08-07-2005 à 15:56:59   

Reply

Marsh Posté le 08-07-2005 à 16:02:49    

Reply

Marsh Posté le 08-07-2005 à 16:42:08    


j'ai devant moi une classe abstraite et une interface.
 
sachant que l'interface, je suppose, est censée lister toutes les methodes de la classe d'abstraction, où dois je créer les fonctions listées ?
 
je me perd un peu dans PHP5


Message édité par jokari34 le 08-07-2005 à 16:44:30
Reply

Marsh Posté le 08-07-2005 à 16:47:31    

L'intérêt de faire une interface (si je puis me permettre plainsofpain) c'est de 'cacher' la vraie classe qui est derrière.
Le but est de donner une interface, autrement dit un ensemble de méthodes et de propriétés, communes à des classes qui auront un comportement différent.  
C'est une des bases de la programmation objet !
 
Ensuite, à l'utilisation, si tu as une interface A et des classes B,C,D,E,..... qui implémentent cette interface, lorsque tu manipules tes objets de classes B,C,D,E, tu n'as pas besoin de savoir de quelle classe ils sont réellement pour appeler leurs méthodes : il te suffit de faire ce travail à l'instanciation de ton objet (instancier la bonne classe) et ensuite tu le manipules comme un objet de 'classe' A.
 
Un exemple : (je suis en verve aujourd'hui)  
 
Imaginons que tu aies besoin de travailler avec différents SGBD.
Tu crées une interface BD qui va te proposer toutes les méthodes qui vont bien (connexion, execution de requête, ainsi qu'éventuellement des petits utilitaires comme récupérer la date courante, obtenir la commande SQL pour formater une date, etc...)
 
Ensuite, tu crées une classe pour chacun de tes SGBD implémentant ton interface.  
Finalement, à l'utilisation, c'est complètement transparent : tu détermines au départ le SGBD utilisé, tu instancies la bonne classe, et tous tes appels de méthodes via l'interface BD te donnent le résultat attendu, même si le comportement (i.e. le code te permettant de l'obtenir) est radicalement différent.
 


Message édité par denzz le 08-07-2005 à 16:48:47
Reply

Marsh Posté le 08-07-2005 à 16:47:58    

Une interface, c'est juste pour dire que les fonctions existeront dans l'objet qui implémente l'interface.
 
Donc dans l'objet qui implémente l'interface tu aura, au minimum, les fonctions déclaré dans l'interface à écrire.
 
 
- grilled -


Message édité par zapan666 le 08-07-2005 à 16:48:37

---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 08-07-2005 à 16:48:04    

ce n'est pas seulement php5, mais aussi java et c++.
 
C'est de l'objet la ton problème, pas du php5.
 
Une interface est une classe totalement abstraite. Pour créer les fonctions listées, il faut faire dériver une classe de cette interface, et redéfinir TOUTES les méthodes.
 
Edit : Archi grilled


Message édité par plainsofpain le 08-07-2005 à 16:48:44

---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
Reply

Marsh Posté le 08-07-2005 à 16:49:22    

:)

Reply

Marsh Posté le 08-07-2005 à 17:01:23    

toutes les classes dérivées de l'interface doivent donc etre abstraites.
 
en fait l'interface se presente comme une grosse classe.
alors que cette 'grosse classe' est constituée de classes dérivées, dans lesquelles on définit les méthodes et objet.
 
si c ca, je met quand meme la methode constructeur dans chaque classe dérivée  ?


Message édité par jokari34 le 08-07-2005 à 17:01:52
Reply

Marsh Posté le 08-07-2005 à 17:04:40    

une interface ca reprend donc la notion de polymorphisme, qui consiste , pour une même fonction, a avoir un rôle different dans chaque classe
c ca ?

Reply

Marsh Posté le 08-07-2005 à 17:04:54    

jokari, tu ne comprends rien ...
 
Tes classes dérivées ne seront pas abstraites, vu que tu dois redéfinir toutes les fonctions.
 
Et ton interface ne sera pas "composée" de quoi que ce soit.


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
Reply

Marsh Posté le 08-07-2005 à 17:04:54   

Reply

Marsh Posté le 08-07-2005 à 17:05:51    

comment j'y accede a une interface ?
je peux faire : $mon_objet= new mon_interface ??

Reply

Marsh Posté le 08-07-2005 à 17:07:03    

jokari, tu ne comprends rien ...  <--- excuse moi MAIS ca fait que 3 jours que je travaille en objet.
Un peu d'indulgence
 
j'essaie de comprendre qui te a etre lourdingue.
c plutot une bonne demarche d'essayer de comprendre


Message édité par jokari34 le 08-07-2005 à 17:07:42
Reply

Marsh Posté le 08-07-2005 à 17:07:37    

une classe abstraite, c'est différent d'une interface :
 
*une interface définit un squelette VIDE
 
*une classe abstraite définit un comportement mais ne peut PAS être INSTANCIEE, ce qui veut dire que pour utiliser ce comportement il FAUT créer une classe héritant de ta classe abstraite.  
 
En tout cas, si tu as du mal avec ces notions, commence par te trouver un bon cours de programmation objet sur le net, quel que soit le langage, suis-le bien, et tout s'éclairera !!

Reply

Marsh Posté le 08-07-2005 à 17:10:09    

jokari34 a écrit :

jokari, tu ne comprends rien ...  <--- excuse moi MAIS ca fait que 3 jours que je travaille en objet.
Un peu d'indulgence
 
j'essaie de comprendre qui te a etre lourdingue.
c plutot une bonne demarche d'essayer de comprendre


 
si ca ne fait que 3 jours que tu travailles en objet, je ne suis pas certain que tu aies ta place ici ... même si je suis indulgent ^^, on est pas là pour donner des cours !

Reply

Marsh Posté le 08-07-2005 à 17:11:28    

Dans la structure a laquelle g affaire (pas moi ki lé codé) ,  
g une classe abstraite qui implemente une interface.
donc vu ce schema, l'interet de cette classe abstraite doit etre de definir un squelette vide, dont le "remplissage" se fait dans une classe non abstraire qui est derivée de cette classe abstraite ?

Reply

Marsh Posté le 08-07-2005 à 17:12:42    

ben fo bien commencer un jour !
je developpe sans probleme en procedural...mais fo se mettre a jour pour coder propre.

Reply

Marsh Posté le 08-07-2005 à 17:14:18    

jokari34 a écrit :

Dans la structure a laquelle g affaire (pas moi ki lé codé) ,  
g une classe abstraite qui implemente une interface.
donc vu ce schema, l'interet de cette classe abstraite doit etre de definir un squelette vide, dont le "remplissage" se fait dans une classe non abstraire qui est derivée de cette classe abstraite ?


non !  
une classe abstraite ne définit pas de squelette vide :x c'est le boulot de l'interface !  
prends (ou lis) des cours de prog objet !

Reply

Marsh Posté le 08-07-2005 à 17:21:56    

je me suis mal exprimé, desolé
 
donc comme g une interface + une classe abstraite :
 
- l'interface doit lister toutes les méthodes  des classes qui l'héritent.
 
- la classe abstraire doit heriter de l'interface (puisque sinon ya pas de lien entre le nom de la methode indiquée dans l'interface et la méthode elle meme ). Elle liste ses propore méthodes mais que leur nom (pas le contenu).
 
- une classe non abstraite (que je dois créer) doit contenir les méthodes avec leur contenu pour la classe abstraire dont elle hérite.
 
si c pas ca j'insiste pas.
 
vé aller lire un cours sur la POO.
vous avez des URL de cours de POO pour PHP ? quite a apprendre la POO, autant le faire avec un langage avec lequel je bosse.
merci


Message édité par jokari34 le 08-07-2005 à 17:37:06
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed