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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Auteur Sujet :

Interface et classes abstraites en php5 et php6

n°1345595
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 12-04-2006 à 22:24:44  profilanswer
 

Reprise du message précédent :
c'était juste pour souligner le coté absurde de la réflexion de Smaragdus qui disait que les interfaces n'étaient là que pour pallier au manque d'héritage multiple. si vraiment c'était le cas, pourquoi un langage comme C#, sorti bien après Java, ne supporte pas l'héritage multiple ?
l'héritage multiple, pour aussi pratique qu'il soit, amène aussi son lot de soucis, et c'est pour ça que Java ou C# ont fait le compromis de supporter les interfaces à la place. dire que les interfaces sont là pour pallier au manque d'héritage multiple est une connerie sans nom


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 12-04-2006 à 22:24:44  profilanswer
 

n°1345598
gizmo
Posté le 12-04-2006 à 22:29:19  profilanswer
 

smaragdus a écrit :


tu veux definir un constructeur d'une classe qui n'est pas instanciable ? LOL  [:zytrafumay]


Parce que tu ne fais jamais appel à super?  [:gizmo] Mais c'est quoi ces programmeurs du dimanche?!

n°1345601
smaragdus
whores, drugs & J.S. Bach
Posté le 12-04-2006 à 22:30:43  profilanswer
 

Harkonnen a écrit :

dire que les interfaces sont là pour pallier au manque d'héritage multiple est une connerie sans nom


En tout c'est moins une connerie que de vouloir définir un constructeur dans une interface :lol:

n°1345604
smaragdus
whores, drugs & J.S. Bach
Posté le 12-04-2006 à 22:32:05  profilanswer
 

gizmo a écrit :

Parce que tu ne fais jamais appel à super?  [:gizmo] Mais c'est quoi ces programmeurs du dimanche?!


appeler le super d'une interface ?
 
Mais LOL quoi :lol: Arrete la drogue  [:zytrafumay]

n°1345605
gizmo
Posté le 12-04-2006 à 22:32:26  profilanswer
 

smaragdus a écrit :

En tout c'est moins une connerie que de vouloir définir un constructeur dans une interface :lol:


Qui a parlé de faire un constructeur dans une interface? Je disais justement que c'est l'une des choses qui différencie les interfaces des classes abstraites.

n°1345607
masklinn
í dag viðrar vel til loftárása
Posté le 12-04-2006 à 22:35:37  profilanswer
 

Harkonnen a écrit :

c'était juste pour souligner le coté absurde de la réflexion de Smaragdus qui disait que les interfaces n'étaient là que pour pallier au manque d'héritage multiple.


Et c'est bien la raison pour laquelle ça a été inventé en Java, il fallait une manière de supporter les avantages de l'héritage multiples (qu'un objet donné puisse implémenter un nombre illimité de types) sans en avoir les inconvénients potentiels (configurations en diamant par exemple).

Harkonnen a écrit :

si vraiment c'était le cas, pourquoi un langage comme C#, sorti bien après Java, ne supporte pas l'héritage multiple ?


Parce que (comme d'hab) l'expérience liée au C++ a été si mauvaise que les dissaïdors et pas mal de développeurs en ont pris peur tout simplement.
 
Le C# n'a jamais été là pour être une percée fantastique dans le monde de la programmation, il était là pour ramener dans le giron microsoft les programmeurs java.

Harkonnen a écrit :

l'héritage multiple, pour aussi pratique qu'il soit, amène aussi son lot de soucis, et c'est pour ça que Java ou C# ont fait le compromis de supporter les interfaces à la place. dire que les interfaces sont là pour pallier au manque d'héritage multiple est une connerie sans nom


Ils ont décidé de ne pas en avoir les inconvénients, mais en ont voulu les avantages, d'où l'invention des interfaces (note: des langages comme Smalltalk ou Ruby n'ont pas d'héritage multiples mais n'ont pas non plus d'interfaces, nécessaires uniquement dans le cas de langages typés statiquement et explicitement).
 
Les interfaces sont donc bel et bien apparues pour pallier au refus d'implémenter les interfaces, de même que le concept de Mixins dans d'autre langages (comme le ruby).

gizmo a écrit :

Parce que tu ne fais jamais appel à super?  [:gizmo] Mais c'est quoi ces programmeurs du dimanche?!


gizmo a écrit :

Qui a parlé de faire un constructeur dans une interface? Je disais justement que c'est l'une des choses qui différencie les interfaces des classes abstraites.


Retourne te coucher, t'as toujours pas compris de quoi on parlait.

Message cité 1 fois
Message édité par masklinn le 12-04-2006 à 22:36:35

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1345609
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 12-04-2006 à 22:38:06  profilanswer
 

masklinn a écrit :


Les interfaces sont donc bel et bien apparues pour pallier au refus d'implémenter les interfaces, de même que le concept de Mixins dans d'autre langages (comme le ruby).


On est d'accord, je parle bien du refus d'implémenter l'héritage multiple (je suppose que c'est de ça dont tu voulais parler), et non de l'absence d'héritage multiple au moment de la création du langage. La nuance est là.

Message cité 1 fois
Message édité par Harkonnen le 12-04-2006 à 22:38:55

---------------
J'ai un string dans l'array (Paris Hilton)
n°1345613
smaragdus
whores, drugs & J.S. Bach
Posté le 12-04-2006 à 22:40:07  profilanswer
 

Harkonnen a écrit :

si vraiment c'était le cas, pourquoi un langage comme C#, sorti bien après Java, ne supporte pas l'héritage multiple ?


 
parce que c'est un langage "newbie friendly" ?  [:catharsis]  

n°1345615
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 12-04-2006 à 22:41:31  profilanswer
 

smaragdus a écrit :

parce que c'est un langage "newbie friendly" ?  [:catharsis]


k, lol


---------------
J'ai un string dans l'array (Paris Hilton)
n°1345620
masklinn
í dag viðrar vel til loftárása
Posté le 12-04-2006 à 22:44:23  profilanswer
 

Harkonnen a écrit :

On est d'accord, je parle bien du refus d'implémenter l'héritage multiple (je suppose que c'est de ça dont tu voulais parler), et non de l'absence d'héritage multiple au moment de la création du langage. La nuance est là.


Mouais, je vais accepter mais tu chipottes, ils ont refusé d'implémenter l'héritage multiple (pour ne pas en subir les inconvénients -- indéniables), donc l'héritage multiple était absent, donc il leur fallait un mécanisme capable de cloner partiellement les avantages de l'héritage multiple (là encore de même pour les mixins, à la nuance près que les mixins se concentrent sur l'implémentation alors que les interfaces se concentrent sur... l'interface...)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 12-04-2006 à 22:44:23  profilanswer
 

n°1345621
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 12-04-2006 à 22:46:28  profilanswer
 

De toute façon, l'héritage ça pue, Decorator roulaize :o
 
(ceci était un post purement inutile, merci de votre attention)
 
---> []


Message édité par Harkonnen le 12-04-2006 à 22:46:36

---------------
J'ai un string dans l'array (Paris Hilton)
n°1345624
masklinn
í dag viðrar vel til loftárása
Posté le 12-04-2006 à 22:47:14  profilanswer
 

Decorator ne change pas le type d'un objet et ne lui ajoute pas de types :o
 
À part ça on sait effectivement depuis 87 que la délégation automatique est une alternative viable à l'héritage multiple...
 
Pas de bol, c'est pas faisable en java :o


Message édité par masklinn le 12-04-2006 à 22:49:20

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1345626
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 12-04-2006 à 22:47:52  profilanswer
 

C'est bien pour ça que j'ai dit que c'était un post inutile :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°1345654
Berceker U​nited
PSN : berceker_united
Posté le 12-04-2006 à 23:48:33  profilanswer
 

Harkonnen a écrit :

berceker >> un exemple concret d'utilisation des interfaces en Java. récemment, j'ai eu à coder un programme qui opérait des traitements sur une base Oracle ou une base Access. les traitements étaient identiques.
 
voici le code :

Code :
  1. private BddUpdater bdUpdater; // BddUpdater est une interface
  2. (...)
  3. // puis l'utilisateur choisit la base à updater. une fois qu'il a choisi, je créé mon BddUpdater :
  4. if (option.equals("Access" )) {
  5.     bdUpdater = new AccessUpdater(this);
  6. } else if (option.equals("Oracle" )) {
  7.     bdUpdater = new OracleUpdater(this);
  8. }


tu saisis ? les classes AccessUpdater et OracleUpdater implémentent toutes les deux l'interface BddUpdater, et donc implémentent ses méthodes. tout ce que j'ai à faire, c'est d'appeler les méthodes d'update à partir de mon BddUpdater, le polymorphisme me garantit ensuite que la méthode correspondant à la base utilisée sera appelée.
 
pour bien faire, il faudrait faire générer l'updater par un factory, ça permettrait de supporter d'autres SGBD sans toucher au code métier, mais bon, vu que je me cassais de la boite, j'avais pas trop envie de me casser le cul :D


En faite, ce que je comprend c'est qu'au moin les methodes present dans l'objet bdUpdater sont garantie sur facture parce qu'elle certifié-conforme par une interface donc pas de surprise pour la suite.
Un factory c'est quoi ? (entre temps je cherche de mon coté)
 

Harkonnen a écrit :

elle peut en avoir plus, tant qu'elle implémente les méthodes de l'interface. une classe ne peut pas avoir moins de méthodes que l'interface qu'elle implémente, mais le contraire est tout à fait possible


ok je m'en doutais un peut sinon cela aurait été un peut trop restrictif mais pourquoi pas.


Message édité par Berceker United le 12-04-2006 à 23:49:58
n°1345792
Berceker U​nited
PSN : berceker_united
Posté le 13-04-2006 à 10:40:41  profilanswer
 

up up pour la factory j'ai cherché mais j'ai eu une vague explication disant comme quoi c'est une classe qui permet de générer une classe type. Un truc dans le genre.

n°1345808
masklinn
í dag viðrar vel til loftárása
Posté le 13-04-2006 à 10:57:46  profilanswer
 

Berceker United a écrit :

up up pour la factory j'ai cherché mais j'ai eu une vague explication disant comme quoi c'est une classe qui permet de générer une classe type. Un truc dans le genre.


C'est un Design Pattern du GoF (deux en fait, Abstract Factory et Factory Method, vu la discussion il parlait d'Abstract Factory).
 
Tu peux en trouver une explication ici mais celles du GoF ou de Head First Design Patterns sont mieux.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1345812
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 13-04-2006 à 11:00:00  profilanswer
 

Factory, c'est un design pattern dont le principe est de déporter dans une classe à part l'instanciation d'objets implémentant la même interface (je simplifie à mort hein)
Ainsi dans le cas de mon exemple, créer un factory qui me renvoie l'objet créé en fonction du choix de l'utilisateur permet de centraliser cette création, et ainsi, le jour ou je voudrais supporter d'autres SGBD, je n'aurais qu'à rajouter qu'un seul test dans mon factory, qui me renverra de toute façon un BddUpdater. Ca permet d'éviter de toucher au code métier, facilitant ainsi la maintenance (imagine que la création d'un nouvel updater se fasse à plusieurs endroits du code : sans factory, le jour ou je veux supporter un nouveau SGBD, je dois rajouter ledit SGBD à chaque fois que je fais le genre de test de mon code)
 
http://gsraj.tripod.com/design/cre [...] ctory.html


---------------
J'ai un string dans l'array (Paris Hilton)
n°1345842
omega2
Posté le 13-04-2006 à 11:22:05  profilanswer
 

La diférence entre une classe abstraite et une interface?
Quand tu hérite d'une classe abstraite, tu n'est pas obligé de recoder toutes les procédures et fonction de la classe abstraite ce qui fait que tu peux te retrouver avec des procédures et fonctions qui ne font rien du tout surtout si la classe abstraite évolue ultérieurement.
 
Par contre, avec une interface, t'es obligé de recréer toutes les procédures et fonctions indiqué dans l'interface et si l'interface évolue, le compilateur te gueulera dessus si tu n'as pas mis à niveau toutes les classes qui en héritent. Pour le développeur, c'est beaucoup plus sécurisant vu qu'il sera sur de ne pas en oublier et ce même si du coup il lui faudra quelques minutes de codage de plus pour que le programme compile complétement.

n°1345853
Berceker U​nited
PSN : berceker_united
Posté le 13-04-2006 à 11:29:32  profilanswer
 

mmmhh je commence à saisir surtout grace à ton exemple. Elle permet de servir de cible pour d'autre classe en gros pour une demande d'opération particulière.
En faite, il y a pas de syntaxe particulière c'est juste dans la conception des classes que nous pouvons faire un factory.

n°1345858
benamoubea​ch
tivuplai
Posté le 13-04-2006 à 11:31:20  profilanswer
 

j'aime les postafloud

n°1345868
masklinn
í dag viðrar vel til loftárása
Posté le 13-04-2006 à 11:37:41  profilanswer
 

omega2 a écrit :

La diférence entre une classe abstraite et une interface?
Quand tu hérite d'une classe abstraite, tu n'est pas obligé de recoder toutes les procédures et fonction de la classe abstraite ce qui fait que tu peux te retrouver avec des procédures et fonctions qui ne font rien du tout surtout si la classe abstraite évolue ultérieurement.
 
Par contre, avec une interface, t'es obligé de recréer toutes les procédures et fonctions indiqué dans l'interface et si l'interface évolue, le compilateur te gueulera dessus si tu n'as pas mis à niveau toutes les classes qui en héritent. Pour le développeur, c'est beaucoup plus sécurisant vu qu'il sera sur de ne pas en oublier et ce même si du coup il lui faudra quelques minutes de codage de plus pour que le programme compile complétement.


Tu pourrais lire le topic avant de répondre la prochaine fois [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1345876
omega2
Posté le 13-04-2006 à 11:45:15  profilanswer
 

Masklinn > Je l'ai lu et je n'ai rien vu qui donne des arguments pour l'idée inverse.

n°1345906
masklinn
í dag viðrar vel til loftárása
Posté le 13-04-2006 à 12:02:44  profilanswer
 

omega2 a écrit :

Masklinn > Je l'ai lu et je n'ai rien vu qui donne des arguments pour l'idée inverse.


On va faire un truc:
 
Tu prends ton éditeur de fichier préféré tu crées un fichier AbstractFoo.java contenant

Code :
  1. public abstract class AbstractFoo {
  2.    public abstract void abstractFoo();
  3.    public abstract void abstractBar();
  4.    public abstract void abstractBaz();
  5. }


tu compiles, tu crées un autre fichier Foo.java contenant

Code :
  1. public class Foo extends AbstractFoo {
  2. }


tu tentes de compiler et tu regardes ce que ça donne ok? [:itm]
 
Ensuite tu crées IFoo.java

Code :
  1. interface IFoo {
  2.    void abstractFoo();
  3.    void abstractBar();
  4.    void abstractBaz();
  5. }


tu compiles, tu modifies Foo pour implémenter IFoo au lieu d'étendre AbstractFoo, tu tentes à nouveau de le compiler, et tu compares le message à ce que t'avais juste avant (tu peux même differ entre les deux si ça t'amuse) [:itm]
 
Enjoy [:klem3i1]


Message édité par masklinn le 13-04-2006 à 12:03:28

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1345965
Berceker U​nited
PSN : berceker_united
Posté le 13-04-2006 à 12:59:53  profilanswer
 

C'est cencé faire quoi?  parce que ce que dit omega2 ne me parait pas faux par rapport au explication précédement indiquées. :??:

n°1345974
Djebel1
Nul professionnel
Posté le 13-04-2006 à 13:10:55  profilanswer
 

c'est censé faire exactement pareil.
 
Sinon interessant le factory, mais y a un truc que je comprends pas : puisqu'il faut passer un paramètre au factory, qui lui permettra de choisir la classe à instancier, le jour où tu veux rajouter un nouveau module, il faudra de toute façon reprendre chaque endroit faisant passant ce paramètre au factory.
 
J'en viens donc à me dire que ce paramètre doit être passer au factory à un seul et unique endroit (par exemple le frontcontroller). Vous voyez les choses comme moi ?

n°1345975
Berceker U​nited
PSN : berceker_united
Posté le 13-04-2006 à 13:15:19  profilanswer
 

Djebel1 a écrit :

c'est censé faire exactement pareil. C'est exactement ce que je pensais
 
Sinon interessant le factory, mais y a un truc que je comprends pas : puisqu'il faut passer un paramètre au factory, qui lui permettra de choisir la classe à instancier, le jour où tu veux rajouter un nouveau module, il faudra de toute façon reprendre chaque endroit faisant passant ce paramètre au factory.
 
J'en viens donc à me dire que ce paramètre doit être passer au factory à un seul et unique endroit (par exemple le frontcontroller). Vous voyez les choses comme moi ?


n°1345979
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 13-04-2006 à 13:25:34  profilanswer
 

tu fais passer en paramètre le nom de l'updater à créer, tu n'as rien à faire d'autre.
 
un exemple de Factory "tout con" et basique qui pourrait éventuellement convenir à mon bousin :
 

Code :
  1. public class BddFactory {
  2.     public BddUpdater createUpdater(String sgbd)
  3.     {
  4.         BddUpdater updater = null;
  5.         if (sgbd.equals("Access" )) {
  6.             updater = new AccessUpdater();
  7.         } else if (sgbd.equals("Oracle" )) {
  8.             updater = new OracleUpdater();
  9.         }
  10.         return updater;
  11.     }
  12. }


 
puis le code client :

Code :
  1. factory = new BddFactory();
  2. bdUpdater = factory.createUpdater(option);


Si dans mon code je voulais gérer un updater pour une base MySQL par exemple, tout ce que j'aurais à faire, c'est de coder la classe MySQLUpdater, et rajouter un test supplémentaire dans le factory, sans toucher au code client. Ce qui n'était pas le cas dans mon exemple précédent.
 
Ceci est le cas le plus simple de Factory. Après tu as d'autres variantes plus complexes mais qui permettent carrément de personnaliser chaque code client, etc...


Message édité par Harkonnen le 13-04-2006 à 13:26:12

---------------
J'ai un string dans l'array (Paris Hilton)
n°1345983
nargy
Posté le 13-04-2006 à 13:30:13  profilanswer
 

vive les templates! [:rofl]

n°1345985
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 13-04-2006 à 13:32:58  profilanswer
 

que viennent foutre les templates là dedans ? [:mlc]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1345997
Berceker U​nited
PSN : berceker_united
Posté le 13-04-2006 à 13:46:35  profilanswer
 

Harkonnen a écrit :

que viennent foutre les templates là dedans ? [:mlc]


oui je vois pas trop le rapport :/
Ce monsieur peut il nous donner une explication ?

n°1346001
Djebel1
Nul professionnel
Posté le 13-04-2006 à 13:48:55  profilanswer
 

@Harkonnen : ça j'ai bien compris :p
mais ton :  

Code :
  1. bdUpdater = factory.createUpdater(option);


le jour ou tu veux une nouvelle base, il faut reprendre tous les endroits de ton code où tu as cette ligne pour mettre l'option que tu veux. Et ça c'est casse-couille.
 
J'en venais donc à me dire que ce parametre passé au factory, ne doit l'être qu'a un seul endroit de ton code (comme ton frontcontroller), sinon c'est à chier.
Vous verriez ça autrement vous ?

n°1346008
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 13-04-2006 à 13:53:01  profilanswer
 

Djebel1 a écrit :

@Harkonnen : ça j'ai bien compris :p
mais ton :  

Code :
  1. bdUpdater = factory.createUpdater(option);


le jour ou tu veux une nouvelle base, il faut reprendre tous les endroits de ton code où tu as cette ligne pour mettre l'option que tu veux. Et ça c'est casse-couille.


je te suis pas là... l'option est choisie par l'utilisateur, donc si un jour l'utilisateur veut du MySQL, j'ai pas à toucher à cette ligne vu que bdUpdater référence une interface (BddUpdater) et non une classe concrète ! :spamafote:
tout ce que j'ai a faire, c'est m'assurer que ma classe MySQLUpdater implémente bien l'interface BddUpdater


Message édité par Harkonnen le 13-04-2006 à 13:54:08

---------------
J'ai un string dans l'array (Paris Hilton)
n°1346013
Berceker U​nited
PSN : berceker_united
Posté le 13-04-2006 à 13:57:09  profilanswer
 

oui c'est la valeur d'un parametre à rajouter donc ça reste toujours souple pas besoin de modifier à chaque endroit qui font appelle a cette methode pour gerer un autre sgbx.
bien evidement il est préférable de ne peut pas placer une valeur en dure dans le parametre. ;)


Message édité par Berceker United le 13-04-2006 à 13:57:43
n°1346014
Djebel1
Nul professionnel
Posté le 13-04-2006 à 13:58:40  profilanswer
 

Je te parle du cas où c'est un choix d'implémentation, pas un choix utilisateur.
 
L'utilité du factory, c'est de ne pas avoir à retoucher ton code métier le jour où tu dois changer de base (par exemple).
Ton factory, pour savoir s'il doit instancier une classe qui se connecte à une base MySQL, ou une classe qui se connecte à une base oracle, faut bien lui dire.
 
Donc tu lui passes un paramètre à ton factory (logique). Le problème étant : si tu passes ce paramètre à ce factory un peu n'importe où, le jour où tu changes de base de données tu l'as dans le cul. Il faudra modifier ce paramètre partout où c'est nécessaire.
 
Et donc je me disais que le paramètre passé au factory, qui lui permet de savoir quelle classe instancier, il fallui lui passer à un seul endroit de ton code, et je demandais donc (pour la 3eme fois :p) si vous voyez les choses comme moi.
 
edit pour au dessus : si par exemple, dans chaque classe qui font appel à la base de données, tu passes ce paramètre au factory pour avoir l'objet BDD, bah le jour où tu changes de base, tu vas reprendre chacune de tes classes qui font appel à la base de données ... Paramètre ou pas, ça reste un truc de merde à changer partout dans ton code. DOOOOOOOONNC, je pense qu'il faut que ce paramètre ne passe qu'à un seul endroit.

Message cité 2 fois
Message édité par Djebel1 le 13-04-2006 à 14:00:37
n°1346028
Berceker U​nited
PSN : berceker_united
Posté le 13-04-2006 à 14:10:22  profilanswer
 

C'est valable si le type de sgbd (variable option) est définit en dure mais cela depend d'ou provien la source. Elle peut venir d'une liste déroulante ou autre donc pas de souci. La factory est bien la pour permettre de faire un switch sur différent sgbd c'est pas figé.


Message édité par Berceker United le 13-04-2006 à 14:10:51
n°1346035
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 13-04-2006 à 14:21:01  profilanswer
 

Djebel1 a écrit :


Ton factory, pour savoir s'il doit instancier une classe qui se connecte à une base MySQL, ou une classe qui se connecte à une base oracle, faut bien lui dire.
 
Donc tu lui passes un paramètre à ton factory (logique). Le problème étant : si tu passes ce paramètre à ce factory un peu n'importe où, le jour où tu changes de base de données tu l'as dans le cul. Il faudra modifier ce paramètre partout où c'est nécessaire.


mais je n'y touche pas au paramètre, c'est l'utilisateur qui le choisit, par le biais d'un combobox !
je récupère dans une variable le texte courant du combobox, que je transmet en paramètre au factory, rien de plus :spamafote:

Message cité 1 fois
Message édité par Harkonnen le 13-04-2006 à 14:22:12

---------------
J'ai un string dans l'array (Paris Hilton)
n°1346046
masklinn
í dag viðrar vel til loftárása
Posté le 13-04-2006 à 14:24:24  profilanswer
 

Berceker United a écrit :

C'est cencé faire quoi?


Ca fait exactement la même chose

Berceker United a écrit :

parce que ce que dit omega2 ne me parait pas faux par rapport au explication précédement indiquées. :??:


omega2 a dit que les interfaces étaient fondamentalement différentes des classes abstraites, que le compilo gueulait si tout n'était pas implémenté etc.
 
Il avait été expliqué avant même son post par skeye dès le 8e post du topic que l'interface est un cas particulier des classes abstraites (classes abstraite sans membres dont toutes les méthodes sont abstraites), mon post avait simplement pour but de le démontrer à omega2, et donc de lui expliquer que la distinction qu'il effectue est totalement fausse (à tel point qu'en java le message d'erreur est le même à la virgule près. De là à penser que les interfaces font usage de classes abstraites pures au niveau de leur implémentation et que la distinction est totalement arbitraire, il n'y a qu'un pas que je franchis allègrement)
 
Et arrêtez de parler de factory quand vous parlez de Factory method (ou même de SimpleFactory en fait, là), Factory ça peut désigner 3 trucs extrèmement différents donc c'est lourd :fou:

Djebel1 a écrit :

Je te parle du cas où c'est un choix d'implémentation, pas un choix utilisateur.
 
L'utilité du factory, c'est de ne pas avoir à retoucher ton code métier le jour où tu dois changer de base (par exemple).
Ton factory, pour savoir s'il doit instancier une classe qui se connecte à une base MySQL, ou une classe qui se connecte à une base oracle, faut bien lui dire.
 
Donc tu lui passes un paramètre à ton factory (logique). Le problème étant : si tu passes ce paramètre à ce factory un peu n'importe où, le jour où tu changes de base de données tu l'as dans le cul. Il faudra modifier ce paramètre partout où c'est nécessaire.
 
Et donc je me disais que le paramètre passé au factory, qui lui permet de savoir quelle classe instancier, il fallui lui passer à un seul endroit de ton code, et je demandais donc (pour la 3eme fois :p) si vous voyez les choses comme moi.
 
edit pour au dessus : si par exemple, dans chaque classe qui font appel à la base de données, tu passes ce paramètre au factory pour avoir l'objet BDD, bah le jour où tu changes de base, tu vas reprendre chacune de tes classes qui font appel à la base de données ... Paramètre ou pas, ça reste un truc de merde à changer partout dans ton code. DOOOOOOOONNC, je pense qu'il faut que ce paramètre ne passe qu'à un seul endroit.


Vas acheter et lire Head First Design Patterns, il explique très bien ces choses là.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1346054
Berceker U​nited
PSN : berceker_united
Posté le 13-04-2006 à 14:29:36  profilanswer
 

ok je rentre pas dans les factory s'il y en a de toute sorte et que chacun cherche a expliquer l'une d'elle sans le préciser :)

n°1346056
omega2
Posté le 13-04-2006 à 14:29:44  profilanswer
 

Djebel1 > Un truc génial dans beaucoup de langages objets, c'est le transtypage. En gros, t'as bien une classe BDDMysql et une BDDPgSQL mais tout ce que véront les autres classes, c'est par exemple des objets de type BDDGenerique. (ou BddUpdater)
Le langage fournira donc l'accés aux fonctions existant dans la classe générique et la fonction exécuté sera bien celle de la classe réelle de l'objet et pas celle de la classe "présumé" par les autres classes.
Evidement, ca ne marche que si les fonctions ont les même nom et les même paramettre.
 
EDIT : Masklinn > Comme tu viens de le citer, l'interface est équivalent à un cas particulier des classes abstraite. Ca n'est donc pas la même chôse. Ca serait comme dire qu'un avion est un cas particulier de véhicule à moteur donc c'est la même chôse.

Message cité 1 fois
Message édité par omega2 le 13-04-2006 à 14:32:41
n°1346071
Djebel1
Nul professionnel
Posté le 13-04-2006 à 14:36:31  profilanswer
 

Harkonnen a écrit :

mais je n'y touche pas au paramètre, c'est l'utilisateur qui le choisit, par le biais d'un combobox !
je récupère dans une variable le texte courant du combobox, que je transmet en paramètre au factory, rien de plus :spamafote:


bah vi mais donc si ce n'est pas au choix de l'utilisateur ? N'est-il pas méga préférable de savoir exactement où le fameux paramètre est définit ? Et donc de ne le définir que à un seul endroit
(je pense au cas où tu n'accèdes qu'à un seul type de bdd dans ton projet, mais que tu veux permettre d'en changer facilement).
 

masklinn a écrit :


Et arrêtez de parler de factory quand vous parlez de Factory method (ou même de SimpleFactory en fait, là), Factory ça peut désigner 3 trucs extrèmement différents donc c'est lourd :fou:


tu nous ferais pas un topo succint ? :)
 

masklinn a écrit :

Vas acheter et lire Head First Design Patterns, il explique très bien ces choses là.


arf, acheter :/
 

n°1346093
masklinn
í dag viðrar vel til loftárása
Posté le 13-04-2006 à 14:47:51  profilanswer
 

omega2 a écrit :

Djebel1 > Un truc génial dans beaucoup de langages objets, c'est le transtypage. En gros, t'as bien une classe BDDMysql et une BDDPgSQL mais tout ce que véront les autres classes, c'est par exemple des objets de type BDDGenerique. (ou BddUpdater)


Raté, le truc génial c'est le polymorphisme pas le transtypage [:jar jar]
 
Et c'est pas dans "beaucoup de langages objets", un langage objet sans polymorphisme c'est pas un langage objet, le polymorphisme fait partie des bases du concept de POO [:jar jar]

omega2 a écrit :

EDIT : Masklinn > Comme tu viens de le citer, l'interface est équivalent à un cas particulier des classes abstraite. Ca n'est donc pas la même chôse.


[:pingouino]

omega2 a écrit :

Ca serait comme dire qu'un avion est un cas particulier de véhicule à moteur donc c'est la même chôse.


Tu racontes vraiment n'importe quoi [:pingouino]
 
C'est même plus de la mauvaise foi à ce niveau, on est à la limite de la stupidité, et ce sans même parler de ton analogie n'ayant strictement aucun rapport avec le cas qui nous occupe [:pingouino]
Et vu que j'ai le contenu de ton post avant édition, je vais y répondre

omega2 a écrit :

Mais est ce que tu trouves génial de devoir rajouter "abstract" à chaque ligne?


Vu à quel point le java est verbeux en l'état, je dirais que ça n'a aucune importance, sans même mentionner le copier-coller ou les abbréviations, disponibles dans 90% des éditeurs de textes utilisables.

omega2 a écrit :

une interface serait équivalent à un cas particulier de classe abstraite


C'est jamais que ce qu'on explique depuis 2 pages hein [:jar jar]

omega2 a écrit :

Si les classes abstraites et les interfaces sont exactement la même chôse


C'est pas le cas, apprends à lire bon sang [:pingouino]

omega2 a écrit :

Et qu'on ne me sorte pas que c'est pour "simuler de l'héritage multiple", l'héritage multiple ayant comme principal avantage d'hériter de plusieurs classes et donc d'utiliser les fonctions de toutes ces classes ce qui est impossible avec des interfaces vu qu'une interface ne fait que déclarer des fonctions et des variables.


Raté, apprends à coder [:jar jar]
 
Que tu le veuilles ou non, le rôle des interfaces n'est ni plus ni moins que le moyen de bénéficier de la fonctionalité "héritage du type" issu de l'héritage multiple en C++ et indisponible en Java/C# du fait du désir de ne pas implémenter le dit héritage multiple [:jar jar]

Djebel1 a écrit :

tu nous ferais pas un topo succint ? :)


Si je pense à rentrer chez moi ce soir et que je suis pas trop crevé, peut-être.

Djebel1 a écrit :

arf, acheter :/


Pour pas mal de choses, les meilleures sources en info sont des bouquins [:spamafote]
 
Les Design Patterns en font partie [:spamafote]


Message édité par masklinn le 13-04-2006 à 14:49:17

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

 Page :   1  2  3  4

Aller à :
Ajouter une réponse
 

Sujets relatifs
configurer php5 pour apache2fréquences de classes sous vba-excel
Question de débutant. Interface HTML pour mes scripts perl ???Créer une interface graphique en c
installer une interface https ?Comment développer une appli, avec une interface graphique, que l
"Interface texte" en Cpb extension PHP5 sur mandriva 2006
[C++] Classes polymèrespostgres+ interface utilisateur
Plus de sujets relatifs à : Interface et classes abstraites en php5 et php6


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