Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1853 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  2 questions POO PHP5

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

2 questions POO PHP5

n°1315282
jokari34
Posté le 28-02-2006 à 13:38:04  profilanswer
 

3 questions:
 
- peut on contourner le fait de ne pas pouvoir en PHP5, créer plusieurs constructeurs ?
 
- les énumérations ca existe en PHP5 ?
 
- je pige pas tres bien la notion d'interface et de clase abstraite. Les docs que je trouve sur le net ca m'aide pas plus.
 
pouvez vous m'eclairer sur ces questions ?
 
merci

mood
Publicité
Posté le 28-02-2006 à 13:38:04  profilanswer
 

n°1315285
benamoubea​ch
tivuplai
Posté le 28-02-2006 à 13:41:14  profilanswer
 

une interface , pour simplifier, est une sorte de classe pour laquelle tu dois obligatoirement redéfinir les fonctions qui sont présentes dans son corps.

Code :
  1. public interface inter
  2. {
  3.     function salut();
  4. }


 
quand tu implémenteras ca, tu devras définir le corps de la fonction salut();
 
Une classe abstraite ne peut pas etre appelée directement, on doit créer une classe qui en hérite pour pouvoir l'utiliser. Par contre tu n'auras pas a redéfinir les fonctions, contrairement à l'interface.
 
Pour le reste, je me suis pas aventuré dans les méandres du php5, je peux pas t'aider désolé  :hello:

Message cité 1 fois
Message édité par benamoubeach le 28-02-2006 à 13:44:59
n°1315322
jokari34
Posté le 28-02-2006 à 14:14:44  profilanswer
 

pour le reste, disons que j'avais utilisé la surcharge de méthodes et les énumération en C# et j'avais trouvé ca tres pratique.
Maintenant, les fonctionnalités de POO sont tres liées au degré de typage du langage.
et vu que C# est tres typé puisque quasi full objet et PHP5 ne l'est pas trop...
 
Concernant l'interface :
quel est l'interet de definir le corps de la fonction salut() ailleurs ?  
je veux dire : quelle est la différence entre :
- mettre la signature de la fonction dans l'interface et la définir dans une classe qui l'implément
- définir directement la fonction dans une classe, sans utiliser d'interface  
 
Concernant la classe abstraite:
quel est l'interet de ne pas instancier directement la fonction, et devoir instancier seulement la classe non abstraite qui définit le corps de classe abstraite dont elle hérite .
 
quand je dis "quel interet", j'entend pas là "dans quelle situation c'est utile"

n°1315326
omega2
Posté le 28-02-2006 à 14:18:10  profilanswer
 

jokari34 > Quel est l"intéret? Pouvoir créer des classes dont un certain nombre de fonctions auront des noms et des listes de paramêtre identique.
Pourquoi faire ça? Par ce qu'on a parfois besoin d'apeller différents objets appartenant à des classes différentes et ce sans toucher au code qui va les manipuler.

n°1315361
benamoubea​ch
tivuplai
Posté le 28-02-2006 à 14:58:03  profilanswer
 

Voila, omega2 t'a donné la réponse pour ta question sur les interfaces.
 
Pour les classe abstraites, disons que tu veux représenter une fac . Tu vas faire une classe Personne. Mais tu veux différencier les Etudiants des Prof. Donc les classes Etudiant et Prof auront les memes fonctions , les memes variables, mais ca voudrait rien dire d'instancier une Personne , car c'est forcément un Prof ou un Etudiant. Donc Etudiant et Prof hériteront de Personne.


Message édité par benamoubeach le 28-02-2006 à 14:58:43
n°1315364
masklinn
í dag viðrar vel til loftárása
Posté le 28-02-2006 à 15:02:02  profilanswer
 

benamoubeach a écrit :

une interface , pour simplifier, est une sorte de classe pour laquelle tu dois obligatoirement redéfinir les fonctions qui sont présentes dans son corps.


Une interface c'est un contrat, et une classe implémentant une interface s'engage à respecter le contrat spécifié par l"interface :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1315400
jokari34
Posté le 28-02-2006 à 15:31:34  profilanswer
 

Ca revient a dire quelque chose comme :
 
Le contrat est :
" les classes X, Y et Z doivent contenir la fonction truc() "  
 
Le respect du contrat est fait ainsi :  
"les classes X Y et Z doivent implementer l'interface I_monInterface
afin de les obliger a définir le corps de la fonction truc()"
 
ca revient a ca ?
 
Concernant la classe abstraite,  
l'interet c donc de specialiser une classe.
la classe Personne est abstraite car elle ne correspond à aucune entité physique, dans la mesure où ce sont les classes filles héritantes qui déterminent l'entité physique (spécialisation)

n°1315437
jokari34
Posté le 28-02-2006 à 16:09:14  profilanswer
 

j'ai bon ?

n°1315448
Djebel1
Nul professionnel
Posté le 28-02-2006 à 16:20:01  profilanswer
 

pour les classes abstraites, c'est une classe comme les autres, sauf que tu ne l'utiliseras jamais en tant que telle. Tu utiliseras les classes qui en sont héritees. Donc ça te permet de créer une classe contenant toutes les méthodes communes à tes classes héritées (logique), en interdisant d'instancier cette classe abstraite. L'exemple de benamoubea ch est pas mal.
 
Sinon tu peux faire de la surcharge en PHP, énumération je sais pas. Ca peut peut-être t'aider pour ton constructeur ? Tu ne peux pas déclarer plusieurs constructeurs à une classe, mais tu peux surcharger les constructeurs des classes héritées.

n°1315457
sircam
I Like Trains
Posté le 28-02-2006 à 16:33:01  profilanswer
 

Un petit exemple pratique d'interface pour Jokari :
 
On s'intéresse au jeu Sudoku. Il existe plusieurs algo pour sa résolution. Pour rendre le code flexible, on décide de créer une interface SodukuSolverInterface. Selon la technique de résolution, on aura SodukuSolverBacktracking (par backtracking) et SudokuSolverDancingLinks (pour l'algo du même nom).
 
Avantage : sauf à l'endroit ou on décide de la stratégie à utiliser, le reste du code ne connaitra que des SudokuSolver, laissant la porte ouverte à d'autres classes s'attachant à la résolution.
 
Tu trouveras notament des interfaces p.e. dès lors que tu utilises des plugins. Je laisse la possibilité, dans tel programme, de programmer une opération particulière, à condition de respecter le contrat.
 
Classes abstraites : +1 benamou.
 
Tu peux combiner les deux : une interface, une classe abstraite qui "implémente" l'interface ("implements" en Java, comme c'est mal choisi, hein ?), et des classes concrètes qui héritent de la classe abstraite.
 
Tu as bien pigé les deux concepts, MAIS la classe qui "implémente" l'interface ne le fait pas forcément, si elle est abstraite ! (là encore, je parle Java, pour PHP, chais pas).


Message édité par sircam le 28-02-2006 à 16:33:40

---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
mood
Publicité
Posté le 28-02-2006 à 16:33:01  profilanswer
 

n°1315461
benamoubea​ch
tivuplai
Posté le 28-02-2006 à 16:34:53  profilanswer
 

C'est marrant de voir que tout le monde, moi le premier , raisonne d'abord en java :)

n°1315463
sircam
I Like Trains
Posté le 28-02-2006 à 16:37:22  profilanswer
 

Oui, beh, raisonner OO en PHP, c'est presque contre nature !
 
Enfin, on ne raisone pas OO en Java, on raisonne OO en OO, mais pour la pratique, on pense Java ou C++ ou Eiffel ou SmallTalk, c'est plus correct.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1315465
benamoubea​ch
tivuplai
Posté le 28-02-2006 à 16:38:26  profilanswer
 

C'est sur que la poo en php, faudra attendre un petit peu :)

n°1315467
sircam
I Like Trains
Posté le 28-02-2006 à 16:43:06  profilanswer
 

C'est possible, mais ça sent le réchauffé, le forcé pour dire qu'on a de l'OO, pour se donner une contenance. C'est un peu dommage.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1315469
benamoubea​ch
tivuplai
Posté le 28-02-2006 à 16:45:01  profilanswer
 

Ca va venir , c'est la tendance actuelle de php de s'orienter petit à petit vers de l'objet sans brusquer tout le monde. Par contre faudrait virer __contruct et son ami destruct

n°1315532
masklinn
í dag viðrar vel til loftárása
Posté le 28-02-2006 à 17:53:00  profilanswer
 

sircam a écrit :

Enfin, on ne raisone pas OO en Java, on raisonne OO en OO, mais pour la pratique, on pense Java ou C++ ou Eiffel ou SmallTalk, c'est plus correct.


Ca c'est la théorie, en pratique il y a un monde entre la "JavaOO" et la "SmalltalkOO" ou la "RubyOO"...


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1315537
skeye
Posté le 28-02-2006 à 17:55:25  profilanswer
 

benamoubeach a écrit :

Ca va venir , c'est la tendance actuelle de php de s'orienter petit à petit vers de l'objet sans brusquer tout le monde. Par contre faudrait virer __contruct et son ami destruct


 
euh m'étonnerait que ça arrive, ça, ils ont débarqué en php5 alors qu'avant on faisait comme les copains une fonction qui avait le même nom que la classe pour le constructeur...[:petrus75]


---------------
Can't buy what I want because it's free -
n°1315541
sircam
I Like Trains
Posté le 28-02-2006 à 17:59:13  profilanswer
 

masklinn a écrit :

Ca c'est la théorie, en pratique il y a un monde entre la "JavaOO" et la "SmalltalkOO" ou la "RubyOO"...


Ouais, et il faut justement éviter de "penser Java" uniquement, pour ne pas être contaminé.
 
Sans doute trop tard pour moi. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1315594
benamoubea​ch
tivuplai
Posté le 28-02-2006 à 19:18:12  profilanswer
 

skeye a écrit :

euh m'étonnerait que ça arrive, ça, ils ont débarqué en php5 alors qu'avant on faisait comme les copains une fonction qui avait le même nom que la classe pour le constructeur...[:petrus75]


 
Ouais et je trouve que c'est une belle connerie  :kaola:  :kaola:  :kaola:

n°1315595
skeye
Posté le 28-02-2006 à 19:19:36  profilanswer
 

bah si on pouvait en coller plusieurs avec des paramètres différents je m'en foutrais pas mal, perso.:o


---------------
Can't buy what I want because it's free -
n°1315596
benamoubea​ch
tivuplai
Posté le 28-02-2006 à 19:21:52  profilanswer
 

ben je vois pas pourquoi ils ont fait ca , a part pour se différencier des autres langages, et pour repérer rapidement lors de la lecture, je vois pas trop l'intéret :)

n°1315621
masklinn
í dag viðrar vel til loftárása
Posté le 28-02-2006 à 20:27:26  profilanswer
 

skeye a écrit :

euh m'étonnerait que ça arrive, ça, ils ont débarqué en php5 alors qu'avant on faisait comme les copains une fonction qui avait le même nom que la classe pour le constructeur...[:petrus75]


Si "les copains" désigne les "brace languages" (C++, Java, C#) alors pourquoi pas, mais c'est rapidement pas le cas: c'est pas le cas en objective-c, c'est pas le cas en Perl (même si l'OO Perl5 est du niveau PHP4 à tout pêter), c'est pas le cas en Python, c'est pas le cas en Ruby, c'est probablement pas le cas en Smalltalk mais il faudrait vérifier.
 
Après, il est stupide que ça ait changé entre PHP4 et PHP5, mais c'est un autre problème.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  2 questions POO PHP5

 

Sujets relatifs
probleme accent en PHP5/XSLPHP5 chez Free
[Struts] Questions cons[C++] taz, help, 3 questions sur la syntaxe
Débutant en POO, class mysql php5[Perl] Tk, Quelques questions
Petites questions sur les SGBDs en généralPOO
Quelques questions php 
Plus de sujets relatifs à : 2 questions POO PHP5


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR