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 Java Discussion :

Quel est l'intérêt des Interfaces ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Par défaut Quel est l'intérêt des Interfaces ?
    Bonjour,
    je suis débutant et j'ai déjà lu plusieurs livres sur java. J'aimerai savoir l'intérêt d'avoir les interfaces dans un projet. J'ai lu qu'une interface ne pouvait s'intencier, et n'avait que des méthodes qui sont implémentés(développés ?) dans la classe qui l'implémente. Etant donné que la méthode est développée dans la classe pourquoi mettre sa définition dans une interface ? Je ne comprend pas bien . Je suis un vieux programmeur procédural, j'ai vraiment envie de faire de l'objet, et je suis coincé dans la compréhension de certaines expression comme Interface, etc.
    Je vous remercie de votre éclairecissement.

  2. #2
    Membre éclairé Avatar de spoklo
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 67
    Par défaut
    bonjour,
    J'ai eu du mal aussi au début pour comprendre les interfaces en java.

    Les interfaces servent à créer des comportements génériques: si plusieurs classes doivent obéir à un comportement particulier, on créé une interface décrivant ce comportement, on est la fait implémenter par les classes qui en ont besoin. Ces classes devront ainsi obéir strictement aux méthodes de l'interface (nombre, type et ordre des paramètres, type des exceptions), sans quoi la compilation ne se fera pas.
    Voici un lien qui explique aussi :
    http://www.ethnoinformatique.fr/mod/...ew.php?id=1099

    voir aussi : http://java.sun.com/docs/books/tutor...interface.html

    bon courage

  3. #3
    Membre éprouvé

    Inscrit en
    Septembre 2004
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 108
    Par défaut
    bonjour,

    une interface est une sorte de contrat qui indique ce que la classe qui l'implémente offre comme service. (un peu l'équivalant des .h en c++)

    Leur Intérêt ? Eh bien prenons un exemple.
    Disons que j'ai une application qui gére des fichier logs :

    Dans une version 1 de mon application, les fichier logs ont un format texte et je crée donc une classe LogText qui gère ce fichier et je l'utilise partout dans le code de mon application

    Dans une version 2, les dirigeants ont décidé que le nouveau format du fichier log sera en XML et là j'ai un problème: je dois revoir tout le code de mon application là ou j'ai travaillé avec LogText et les remplacer par la nouvelle classe LogXML

    Si depuis le début (version 1), j'avais créé une interface IlogFile qui décrit les méthodes que doit retourner un fichier log et fait implémenter cette interface par LogText et de même pour LogXml, j'aurais eu beaucoup moins de problèmes.

    A noter que dans le reste du code, il faut que j'utilise le plus souvent possible l'interface et non l'implémentation.

    Voilà, j'espère t'avoir aidé (c'est un exemple concret) et ce n'est qu'un seul avantage des interfaces

  4. #4
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Voila un petit exemple simple sans code d'interface et classe abstraite :

    L'interface :
    imagine 2 classes Humain et Félin. Ces 2 êtres sont capables de se laver, mais de façon différente, un félin en se léchant, un humain en prenant une douche.

    on va donc créer une interface Lavable qui définit une seule méthode laver() sans paramètre ni retour.

    Les 2 classes Humain et Félin vont donc implémenter l'interface Lavable, chacune à leur méthode.

    La classe abstraite :
    Maintenant on voudrait ajouter tous les autres types d'animaux, ils sont tous capables de se laver, comment être sûr de ne pas oublier d'implémenter Lavable?

    Tout d'abord on créé une classe Animal. Tous les animaux héritent de cette classe.

    Maintenant c'est Animal qui implémente Lavable. On a supprimé Lavable de Humain et Félin.

    D'après le principe des interfaces, Animal devrait donc implémenter Lavable, mais on perdrait le comportement laver() propre à chaque animal. On va donc déclarer la classe Animal comme étant abstraite.

    En effet la définition d'une interface est que ses méthodes doivent être déclarées au maximum dans la 1ère classe non abstraite qui l'implémente. Donc Animal étant abstraite, elle n'est pas obligée de déclarer la méthode laver(). Par contre toute classe non abstraite héritant de Animal devra déclarer laver().

    Mis à part ça, à quoi sert Animal? elle n'a pas beaucoup d'intérêt... Et bien on peut y définir des comportements commun, on pourrait y définir une méthode déplacer(Coordonnees position) dans laquelle on changerait la position de l'animal à un certain point.


    C'est un peu long, mais j'espère avoir été assez clair. A mon avis, pour comprendre la méthode objet, il faut oublier le code et penser à des choses très simples, tout ce qui nous entoure pourrait être représenté de façon objet.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Citation Envoyé par CheryBen Voir le message
    L'interface :
    imagine 2 classes Humain et Félin. Ces 2 êtres sont capables de se laver, mais de façon différente, un félin en se léchant, un humain en prenant une douche.

    on va donc créer une interface Lavable qui définit une seule méthode laver() sans paramètre ni retour.

    Les 2 classes Humain et Félin vont donc implémenter l'interface Lavable, chacune à leur méthode.
    Oui d'accord, mais ça n'explique toujours pas ce qu'apporte les interfaces...

  6. #6
    Membre averti
    Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 14
    Par défaut
    Grâce à cela tu peux obtenir un code beaucoup plus claire et facile à maintenir. Les programmes qui comportes des interfaces sont plus facilement modulable (le client change d'idées, ...). Comme cité plus haut , avec les interfaces tu garanti un contrat avec différentes entités qui implémenterons obligatoirement les définitions de ce contrat.

    Les interfaces apportent de la structure à ton application. Attention toutefois à ne pas mettre des interfaces pour le plaisir d'en avoir partout sinon cela ne rime à rien.

    Avec des frameworks comme Spring tu es obligé d'utiliser ce style de programmation.

    Bonne journée

  7. #7
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Pour reprendre mon exemple précédent, l'intérêt est qu'on manipule des objet Lavable à partir des autres classes. On peut appeler leur méthode laver() sans savoir quel type d'objet est instancié ou comment ils implémentent cette méthode.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Dieu {
        public void gererLesNaissancesDuMonde() {
            Lavable etre = creerUnEtreVivant(); // retourne un nouvel etre vivant dont la race (classe) est aléatoire
            etre.laver(); // parce qu'il faut bien se laver après la naissance :)
        }
    }
    Un autre développeur pourra facilement implémenter d'autres classes d'êtres vivants sans avoir à modifier cette méthode dont le comportement est générique.

  8. #8
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2020
    Messages : 1
    Par défaut
    Citation Envoyé par shurikeNzL Voir le message
    Oui d'accord, mais ça n'explique toujours pas ce qu'apporte les interfaces...

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ça apporte :

    - Plus de flexibilité dans le typage, notamment permettant d'exprimer plus justement l'intention du concepteur du nouveau type.
    - Le sous-typage multiple.

    "Mais qu'est-ce que ça veut dire, ça, plus de flexibilité et des histoire d'intention ?" =>

    Ça veut dire que c'est plus pratique pour les experts d'avoir des interfaces plutôt que pas en avoir. Quand on est pas expert et qu'on veut savoir, il faut lire la page. Ça ne se résume pas plus clairement que je viens de le faire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2022
    Messages : 3
    Par défaut Remerciements
    Bonjour,


    J'ai voulu juste vous remercier pour votre post sur les interfaces (java)

    Il est bien détaillé avec de très bon exemples et très clair


    Merci encore une fois





    Citation Envoyé par CheryBen Voir le message
    Voila un petit exemple simple sans code d'interface et classe abstraite :

    L'interface :
    imagine 2 classes Humain et Félin. Ces 2 êtres sont capables de se laver, mais de façon différente, un félin en se léchant, un humain en prenant une douche.

    on va donc créer une interface Lavable qui définit une seule méthode laver() sans paramètre ni retour.

    Les 2 classes Humain et Félin vont donc implémenter l'interface Lavable, chacune à leur méthode.

    La classe abstraite :
    Maintenant on voudrait ajouter tous les autres types d'animaux, ils sont tous capables de se laver, comment être sûr de ne pas oublier d'implémenter Lavable?

    Tout d'abord on créé une classe Animal. Tous les animaux héritent de cette classe.

    Maintenant c'est Animal qui implémente Lavable. On a supprimé Lavable de Humain et Félin.

    D'après le principe des interfaces, Animal devrait donc implémenter Lavable, mais on perdrait le comportement laver() propre à chaque animal. On va donc déclarer la classe Animal comme étant abstraite.

    En effet la définition d'une interface est que ses méthodes doivent être déclarées au maximum dans la 1ère classe non abstraite qui l'implémente. Donc Animal étant abstraite, elle n'est pas obligée de déclarer la méthode laver(). Par contre toute classe non abstraite héritant de Animal devra déclarer laver().

    Mis à part ça, à quoi sert Animal? elle n'a pas beaucoup d'intérêt... Et bien on peut y définir des comportements commun, on pourrait y définir une méthode déplacer(Coordonnees position) dans laquelle on changerait la position de l'animal à un certain point.


    C'est un peu long, mais j'espère avoir été assez clair. A mon avis, pour comprendre la méthode objet, il faut oublier le code et penser à des choses très simples, tout ce qui nous entoure pourrait être représenté de façon objet.

  11. #11
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 528
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 528
    Par défaut
    Citation Envoyé par tabdeslam Voir le message
    J'ai voulu juste vous remercier pour votre post sur les interfaces (java)
    bonjour avez-vous compris l'intérêt d'une interface alors ?

Discussions similaires

  1. Quel est l'intérêt des langages dynamique, en général ?
    Par maa dans le forum Langages de programmation
    Réponses: 59
    Dernier message: 27/07/2010, 09h56
  2. Quel est l'intérêt des mots clé get et set ?
    Par verbose dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 30/09/2008, 16h19
  3. Réponses: 3
    Dernier message: 16/01/2006, 19h53
  4. Quel est l'intérêt des Services Web ??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 19
    Dernier message: 12/02/2003, 22h28

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