Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/01/2008, 21h34   #1
Membre à l'essai
 
Inscription : janvier 2007
Messages : 47
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 47
Points : 22
Points : 22
Par défaut [POO] Classes abstraites ou interfaces

Bonjour,je suis débutant en POO et je me demandé dans quel cas de figure faut il privilégier les classes abstraites au interfaces et vice versa?
Pour l'instant je serais tenté d'utiliser seulement des interfaces car on peut en implémenter plusieurs pour une même classe.
Merci de me faire partager votre expérience
Kapha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2008, 22h18   #2
Candidat au titre de Membre du Club
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 11
Points : 11
Personnelement j'utilise une classe abstraite quand cela a une signification et que des données seront ensuite communes aux classes filles. (ex: Classe abstraite Polygone. Derivée en classe Quadrilatere , Triangle etc...).

J'utiliserais plutôt une interface pour permettre à une classe d'hériter d'autres méthodes qui n'étaient pas dans sa classe mère et qu'elle partage avec une ou plusieurs autres classes. (de l'heritage multiple en quelque sorte).
Benjimo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2008, 17h56   #3
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Il n'y a pas de règles, tout dépend de ton architecture.

Ceci dit, je trouve qu'il faut préférer la composition à l'héritage, aussi mon conseil sera très simple : utilise les classes abstraites (héritage) quand tu ne peux pas le faire par interface (composition).

Renseignes-toi sur les fameux design patterns, et tu aura sûrement une vision plus claire de la différence d'utilisation.
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 08h56   #4
Rédacteur
 
Avatar de Yoshio
 
Homme
Inscription : septembre 2005
Messages : 1 741
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 1 741
Points : 1 497
Points : 1 497
Il y a quand même des différences notables entre une classe abstraite et une interface.

Une classe abstraite sert de classe de base à des classes plus spécialisées comme l'a dit Benjimo avec son exemple. Une classe abstraite ne sera jamais instanciée. Un classe abstraite contient des méthodes implémentées qui sont communes à d'autres classes filles.

Une interface n'a pas du tout ce but. Une interface sert uniquement à définir les prototypes de méthode (donc pas de code dans cette classe, juste les prototypes de fonction) qui devront obligatoirement être redéfinie dans les classe qui implémente cette interface.
Yoshio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 11h27   #5
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Je completerais ce que dit Yoshio, qu'une interface est une sortie de classe certifier conforme.
Je vais prendre l'exemple d'une entreprise qui veut être certifié ISO. Ce qui veut dire qu'elle à une methode de fonctionnement répondant à des règles qui permette d'améliorer ses performances. Donc il demande à une entreprise exterieur de regarder ses methode de travail, l'audit. Si c'est bon, la boite est certifié ISO. Dans le cas contraire elle demande de s'améliorer.

Pour les Interfaces, c'est un peut pret la même chose. Dans cette classe il y a un certain nombre de chose de définies. Si vous voulez être sur que votre classe normal soit conforme vous le faite relié à une interface. Ainsi, s'il y a un os il va de suite vous taper sur les doigts.

C'est pour cela qu'une Interface doit être définie à l'avance avec le plus grand recule. Ainsi, vous ne risquez pas d'oublier des choses dans les classes. En soit une Interface ne sert strictement à rien pour l'application mais juste à aider le developpeur
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 10h09   #6
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Citation:
Envoyé par berceker united Voir le message
En soit une Interface ne sert strictement à rien pour l'application mais juste à aider le developpeur
Ah bon ?

Prenons le pattern Strategy, un des plus utilisé et pourtant parmi les plus simples. Il est basé sur la puissance des interfaces pour des langages fortement typés tels que Java ou C#.

Il permet de déclarer une variable de type interface, qui peut représenter un objet dont le type implémente cette interface. La classe de la varibale peut même changer pendant le runtime du moment qu'elle implémente l'interface.
Je ne trouve pas que cela ne sert à rien... Non ?
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 10h39   #7
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Citation:
Envoyé par jml94 Voir le message
Ah bon ?

Prenons le pattern Strategy, un des plus utilisé et pourtant parmi les plus simples. Il est basé sur la puissance des interfaces pour des langages fortement typés tels que Java ou C#.

Il permet de déclarer une variable de type interface, qui peut représenter un objet dont le type implémente cette interface. La classe de la varibale peut même changer pendant le runtime du moment qu'elle implémente l'interface.
Je ne trouve pas que cela ne sert à rien... Non ?
Je parlais des interfaces en PHP pas des spécificités des interfaces pour tel ou tel language. En php, qu'il soit là ou pas ça ne change rien si l'application est en production.
Dans une boite dans laquelle j'ai travaillé en Off, l'application en production avait les interfaces qui sont automatiquement retiré. Ils existe seulement en mode développement. Pour des raisons d'optimisation car la partie métier est sur une librairie php. Et avec une appli qui tourne sur 128 classes ça se fait vite sentire. L'équipe avait une personne dédier qu'au interfaces mitonné au petit oignons.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 21h25   #8
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
C'est vrai, et c'est là qu'on atteint la limite des langages de script par rapport aux langages compilés.

S'il est vrai que ça peut tirer les perfs vers le bas, il est rare qu'un particulier ait une appli de plus d'une centaine de classes. Il est aussi rare qu'il applique des design patterns, donc mon exemple était juste pour prendre un contrepied.
Il y a néammoins un point en faveur du typage fort et donc des interfaces en php5, car nous pouvons maintenant typer les paramètres de fonctions, ce qui permet d'éviter les erreurs d'appel.

Et enfin, je dirais que si tu privilégies les perfs à la maintenance et à la modularité, il ne faut alors pas utiliser la POO du tout. Le développement procédural est encore plus rapide.
Bien sûr je suis encore l'avocat du diable...
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 09h43   #9
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Citation:
Envoyé par jml94 Voir le message
C'est vrai, et c'est là qu'on atteint la limite des langages de script par rapport aux langages compilés.

S'il est vrai que ça peut tirer les perfs vers le bas, il est rare qu'un particulier ait une appli de plus d'une centaine de classes. Il est aussi rare qu'il applique des design patterns, donc mon exemple était juste pour prendre un contrepied.
Il y a néammoins un point en faveur du typage fort et donc des interfaces en php5, car nous pouvons maintenant typer les paramètres de fonctions, ce qui permet d'éviter les erreurs d'appel.

Et enfin, je dirais que si tu privilégies les perfs à la maintenance et à la modularité, il ne faut alors pas utiliser la POO du tout. Le développement procédural est encore plus rapide.
Bien sûr je suis encore l'avocat du diable...
Dans le cas ou je me trouvais, nous avions beaucoup trop d'interface à mon goût mais comme les développeurs était pas réunient géographiquement. Il fallait mettre de forte contrainte d'où le nombre d'interface. Après au niveau de la mise un script à balayé les appelles des interfaces.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h40.


 
 
 
 
Partenaires

Hébergement Web