JeuWeb - Crée ton jeu par navigateur
[POO] Interfaces - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [POO] Interfaces (/showthread.php?tid=775)



[POO] Interfaces - Seren - 08-02-2007

En regardant les possibilité de php5, je me suis dit que l'utilisation des interface pouvait être intéressante.

Par exemple pour les différentes entités d'un jeu, personnages, vehicules, batiments, technologie etc... même si de nature très différentes il y a souvent des fonctions qui risquent de revenir souvent.

Par exemple, un "displayInfo" qui pourrait retourner de façon formater dépendant de l'objet des informations.

Code PHP :
<?php 
// $type peut être un niveau d'information à retourner
// comme information : exact, approchée, totale, partielle
// à utiliser en fonction de qui requiert l'information : propriétaire
// de l'objet ou simple observateur
Interface Information{
public abstract function
displayInfo($type);
}

class
clsObjet implements Information{
...
}

C'est pas vraiment une question plutôt une reflexion.

Est-ce que vous utilisez des interfaces dans vos projets ? Et si oui, est-ce qu'il y a d'autre utilisation "standard" auquel je n'ai pas pensé ?


RE: [POO] Interfaces - joshua - 08-02-2007

Non, j'ai vu le sujet mais je ne l'utilise pas.
L'itneret est d'eter sur qu'on a bien ensuite codé totues les fonctions dont on avait besoin, c'est donc non négligeable.
Mais ca m'a pas encore pris. Peut etre que si un jour ils acceptent l'heritage multiple, j'y refléchirais Wink


RE: [POO] Interfaces - NicoMSEvent - 08-02-2007

si toutes les classe qui ont : DisplayInfo() ont des similitudes... pourquoi ne pas créer un objet parent dont toutes ces classes hériteraient... tu déclares ces informations dans la classe mère, et tu mets le code dans les classes filles... petit exemple (non testé)

Code :
class forme{
function Display();
function Aire();
function Périmetre();
}

class carre:forme{ //note : j'ai "oublié" comment on fait le l'héritage en PHP
int $cote;
function Carre(int $p_cote){
   $cote=$p_cote;
}

function Display(){
   echo "__";
   echo "|_|";
}
function Aire(){
   echo $cote*$cote;
}
function Périmetre(){
   echo cote*4;
}
}

class triangle:forme{
int $cote[3];
function triangle(int $p_cote1,int $p_cote2,int $p_cote3){
   $cote[1]=$p_cote1;
   $cote[2]=$p_cote2;
   $cote[3]=$p_cote3;
}
function Display(){
   echo " /\";
   echo "/__\";
}
function Aire(){
   echo $cote[1]*$hauteur/2; //note : c'est juste pour montrer ce que ça pourrait donner... meme si ici on ne connait pas la hauteur
}
function Périmetre(){
   echo $cote[1]+$cote[2]+$cote[3];
}
}

class cercle:forme{
int $rayon;
function cercle(int $p_rayon){
   $rayon=$p_rayon;
}
function Display(){
   echo " _";
   echo "(_)";
}
function Aire(){
   echo $rayon*$rayon*pi();
}
function Périmetre(){
   echo $rayon*2*pi();
}
}

En même temps, ça donne du polymorphysme.
Donc, tu peux créer ceci :
Code :
Forme $formes[3];
$formes[0]=new carre(5);
$formes[1]=new triangle(1,2,3);
$formes[2]=new cercle(5);

for($i=0;$i<3;$i++){
echo ($formes[$i].Display())." -> aire : ".(formes[$i].aire())." et perimetre : ".(formes[$i].perimetre());

}

Je repete: je n'ai pas testé, il y a certainement des fautes... c'est juste pour la réflexion


RE: [POO] Interfaces - Seren - 08-02-2007

A priori les interfaces sont là pour donner des points d'entrée communs sur des objets qui sont au contraire très différents.

Un objet "personnage" n'aura pas du tout les même caractéristiques qu'un objet "technologie". Pourtant pour les deux, il y a des méthodes analogues comme par exemple la méthode "Avoir une description". ( à mettre dans une info bulle par exemple).

L'intérêt des interfaces c'est justement de négliger l'aspect hiérarchique des classes. En réalite ça fait pas grand chose à part t'obliger à implémenter une méthode que de toute façon tu aurais implémenté. Mais ça "unifie".

Ton exemple est intéressant pour le principe des classes mais pour revenir à mon cas, je ne vois pas comment tu pourrais mettre "personnage" et "technologie" dans la même arborescence de classe à moins de créer une super classe fourre-tout "Entité".

classe = structure hierarchique et héritage.
interface = structure transverse.

Sinon pour Joshua, il n' y a pas de notion d'héritage pour les interfaces, (tu "hérites" uniquement du prototype de la méthode, tu vas pas loin avec ça Smile ) mais par contre une classe peut implémenter plusieurs interfaces.

Par exemple si on avait une interface "ObjetMobile"
on pourrait imaginer avoir:
Code PHP :
<?php 
class Vehicule implements ObjetMobile, Information

Enfin dans ce cas là on aurait sûrement plutôt
Code PHP :
<?php 
class ObjetMobile{ }
class
Vehicule extends ObjetMobile { }
class
Perso extends ObjetMobile { }



RE: [POO] Interfaces - gtsoul - 08-02-2007

En java, j'utilise des interfaces parce qu'elles permettent (+/-) un héritage multiple (héritage+composition, pas taper).
En php, je préfère me borner à de l'héritage pur et dur. Un peu comme les classes abstraites, c'est sympa comme concept, mais je n'en ai jamais senti l'utilité.


RE: [POO] Interfaces - joshua - 08-02-2007

Nico, ce dont tu parles, c'est de l'héritage multiple et ca n'existe pas encore sous mysql....
une interface c'est "un masque de ce que doivent comporter a minima les classes qui l'utilisent"
C'est très utile notament pour les classes d'accès a la bdd (model MVC) car cela permet d'avoir une unicité et de s'assurer qu'on n'oublie rien.
De plus, quand tu dois modifier quelque choses et que tu sais que ce sera partout pareil, ca te permet de valider que tu n'as pas oublier une occurence quelque part.
alexandre


RE: [POO] Interfaces - pascal - 08-02-2007

le prochain qui parle d'héritage multiple, je lui tire les oreilles! la composition est bien souvent préférable et + souple que l'héritage ( cf "design patterns tête la première" )

l'interet des interfaces est de définir des modèles auxquels doivent se conformer les classes. ça aide à structurer la code.

A+

Pascal


RE: [POO] Interfaces - PJ - 08-02-2007

Les interfaces.. Connaît pas. Quelqu'un sait où trouver un tuto à ce sujet ?

Merci


RE: [POO] Interfaces - Seren - 08-02-2007

PJ a écrit :Les interfaces.. Connaît pas. Quelqu'un sait où trouver un tuto à ce sujet ?

Merci

En anglais j'ai lu ça, c'est dense mais compréhensible.

http://www.zend.com/php5/articles/php5-interfaces.php


RE: [POO] Interfaces - NicoMSEvent - 09-02-2007

joshua a écrit :Nico, ce dont tu parles, c'est de l'héritage multiple et ca n'existe pas encore sous mysql....

je croyais qu'on parlait de PHP... ^^

Il n'est pas multiple -> chaque classe n'hérite que d'une seule classe...
Je n'ai pas parlé d'un carré qui descendrait qu'un rectangle et d'un losange en meme temps... Wink