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

Java Discussion :

Différence interface et classe abstraite ?


Sujet :

Java

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Points : 242
    Points
    242
    Par défaut Différence interface et classe abstraite ?
    On utilise un classe abstraite plutôt qu'une interface dans le cas où on veut factoriser du code, ainsi les classes filles auront accès a du code commun sans avoir à le réécrire à chaque fois !
    Mais dans quel cas privilégie-t-on l'utilisation d'une interface plutôt qu'une classe abstraite ?

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Supposons que tu veux faire un service de... génération de phrase.

    Ton service va s'engager à mettre à disposition une méthode permettant la génération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    interface IStringGenerator{
     
    public String generate();
    }
    Quelque soit le fonctionnement de ton service tu devra respecter cette interface de communication.

    L'interface est destiné à définir le processus de communication entre le service et le client. (Si tu me donne de l'argent, je te donne un repas.)
    C'est son unique rôle.

    L'héritage permet une cohérence entre les classes et la factorisation et le polymorphisme...

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    On utilise plutôt une classe abstraite quand on veut créer un "template", ce qui revient en partie à dire ce que tu avançais, que c'est pour factoriser du code. Mais pas seulement, c'est aussi factoriser un comportement commun.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public abstract class ModificationAbstract{
     
         public void effectuerModification(Modification modification){
              boolean correcte = verifierModification(modification)
              if(correcte){
                   try{
                        executerModification(modification);
                   } catch (Exception e){
                        log.error("Erreur à l'exécution de la modification : " + modification, e);
                   }
              }
         }
     
         public abstract boolean verifierModification(Modification modification);
     
         public abstract void executerModification(Modification modification) throws Exception;
    }
    Ainsi chaque classe qui hérite de ModificationAbstract n'a pas à redéfinir la logique d’enchaînement des appels des méthodes (if, try, catch, log). Elle implémente juste le la vérification, et l'exécution de la Modifcation. Elle bouche les trous de ton template en quelque sorte. Jette un œil au "template method pattern" : http://en.wikipedia.org/wiki/Template_method_pattern
    L’inconvénient d'une classe abstraite est qu'en Java tu ne peux hériter que d'une classe, donc la classe qui hérite de ta classe abstraite ne pourra pas hériter d'une autre classe.

    Une interface sert plus à définir un service que doit fournir un objet. Exemple l'interface List, Collection, Map, ...Chaque classe qui implémente une interface doit remplir un "contrat" en implémentant chacune des méthodes de l'interface. Tu as l'avantages en Java de pouvoir implémenter plusieurs interfaces.

    Romain.

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Points : 242
    Points
    242
    Par défaut
    Citation Envoyé par kolodz Voir le message

    L'héritage permet une cohérence entre les classes et la factorisation et le polymorphisme...
    L'implémentation permet également le polymorphisme non ? C'est ce qui se passe pour les List, Map etc...

  5. #5
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Oui, en effet.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/05/2010, 10h46
  2. différence entre interface et classe abstraite
    Par yacin87 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 29/03/2010, 11h36
  3. Interface ou classe abstraite ?
    Par cobolfingaz dans le forum C#
    Réponses: 6
    Dernier message: 15/07/2008, 17h21
  4. [POO] Différence entre Interface et classe Abstraite
    Par viviboss dans le forum Langage
    Réponses: 7
    Dernier message: 29/11/2006, 16h39
  5. Interface ou classe abstraite ?
    Par Premium dans le forum Langage
    Réponses: 8
    Dernier message: 21/02/2006, 10h23

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