IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Classes abstraites ou interfaces


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 47
    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

  2. #2
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 13
    Par défaut
    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).

  3. #3
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    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.

  4. #4
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    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.

  5. #5
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    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

  6. #6
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    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 ?

Discussions similaires

  1. [POO] Classe abstraite PHP5 et variables membres
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 01h27
  2. [POO] class abstraite CRUD & DAO
    Par mazenovi dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2006, 19h45
  3. [POO] Classes abstraites
    Par GLDavid dans le forum Langage
    Réponses: 12
    Dernier message: 02/03/2006, 11h18
  4. [POO] class abstraite et methode magic
    Par jeff_! dans le forum Langage
    Réponses: 14
    Dernier message: 24/01/2006, 23h19
  5. [Debutant][Conception] Classes abstraites et interface.
    Par SirDarken dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2004, 00h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo