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

Diagrammes de Classes Discussion :

[UML][Debutant]Choisir entre une classe et une interface ?


Sujet :

Diagrammes de Classes

  1. #1
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut [UML][Debutant]Choisir entre une classe et une interface ?
    Bonjour,
    j'ai une question simple :
    quand choisi-t-on d'utiliser une classe ou une interface en modélisation ?

    J'ai trouvé sur DVP de nombreuses infos sur les interfaces mais autant la définition du concept de classe semble claire pour tous autant sur les interfaces le concept est plutôt flou, enfin à mon avis.

    Merci.

  2. #2
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    C'est dans le développement des applis réseaux. L'interface est mise sur le client et son implementation sur le serveur.
    Si tu crees une classe tu dois mettre l'implementation avec. Sinon, sur l'interface, figurent que les entetes des methodes.
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par slim
    C'est dans le développement des applis réseaux.
    Je ne suis certain que cela soit spécifique à ce besoin.
    Merci pour ta réponse mais ma question demeure.

  4. #4
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Cette notion est lié au polymorphisme.

    On choisit d'utiliser une interface quand on veut obliger à utiliser pour les classes derivées une certaine structure.
    On ne connait pas le comportement qu'auront les instances.

    Avec une classe on connait le comportement par defaut.
    Les classes dérivées ne sont pas obligées de le specialiser.

    Enfin tu as aussi la notion d'interface/classe abstraite.
    L'une ne possede pas de donnees membres l'autre peut.
    Tout les methodes de l'interface sont abstraites, par forcément pour la classe abstraite.


    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    classe Animal{
       void parler(); //Comportement par défaut: afficher "bonjour"
    }
    classe Vache -> Animal{
      //On n'est as obligé de redefinir le comportement de parler. Ici ce n'est pas optimal, aucun animal n'a le même cri.
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    interface Animal{
       abstraite void parler(); //On oblige a definir un comportement
    }
    classe Vache -> Animal{
      void parler(); //affichage de "Mheueue"
    }

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Points : 122
    Points
    122
    Par défaut
    Une interface est un contrat. Lorsqu'un objet client d'une interface collabore avec celle-ci, il ne connait pas son type réel mais il sait comment le "manipuler" (quels messages il peut lui envoyer).

    Le but des interfaces est de diminuer le couplage entre deux classes. L'interface permet de ne présenter au client "que ce qui l'intéresse".
    Une analogie : si tu veux conduire une voiture, ce qui t'intéresse c'est de démarrer, accélérer, freiner... Si tu es mécano, tu voudras certainement faire une vidange, équilibrer les roues... Ces 2 "groupes de comportement" peuvent définir respectivement une interface TableauDeBord et une autre AccesMaintenance (ce nom ne me satisfait pas trop, si vous avez une meilleure idée), qui sont deux visions partielles d'un véhicule.

    Un autre aspect est la protection des variations. un objet client d'une interface peut collaborer avec n'importe quel type d'objet pourvu qu'il réalise l'interface. Si on reprend les voitures, tu apprends à conduire (tu connais TableauDeBord) sur une 205. Si du jour au lendemain on te donne à la place une Clio, tu pouras l'utiliser de la même manière.

    La différence avec une classe abstraite est que le découplage est plus important. Par exemple (toujours les voitures) TableauDeBord te permet de jouer à Daytona USA alors que c'est un JeuVideo et pas un Vehicule

  6. #6
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963
    Points : 1 076
    Points
    1 076
    Par défaut
    Pour aller dans le meme sens que MangeurVasqué si on prend la definition d'une interface en UML c'est un ensemble d'operations qui specifie le contrat ou service d'une classe.
    C'est un concept tres proche du concept d'interface en Java ou .Net.

    Apres quand l'utiliser en modelisation a la place des classes? Et bien je dirais que c'est surtout dans le cadre de la modelisation d'une appli ou l'on veut un decouplage maximal et une grande flexibilite; ce sont des composants dont les variations de code n’ont pas d’impact sur les classes utilisatrices, du coup si on utilise une interface a la place d'une classe, on peut modifier l'implementation sous jacente sans retoucher la ou les classes utilisatrices, l'interface fait office d'ecran.




    Dans cet exemple, le changement d'implementation classeBase_1 vers classeBase_2 ou bien la modification de classeBase_1 est transparent: pas de modif a apporter a la classe utilisatrice. L'interface est la pour assurer cette flexibilite.
    De la meme maniere si tu crees un composant (classeBase) destine a etre utilise par une autre appli et que tu veux faire evoluer ton composant (en le passant a une nouvelle version par exemple) alors il ne sera pas necessaire de recompiler la classe utilisatrice pour utiliser ce nouveau composant, l'interface faisant la transition.

    En bref en utilisant une interface en UML tu definis une grande evolutivite de ton application avec un impact mineur sur les composants lies ou annexes, que ce soit la couche de presentation, la couche de services ou autre.

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Merci pour ces infos, j'ai besoin de qq précisions sur le sens de qq termes utilisés :
    Citation Envoyé par MangeurVasqué
    (quels messages il peut lui envoyer).
    Dans ce contexte considéres-tu l'appel d'une méthode comme un message(ex: méthode FaitqqChose )?

    Citation Envoyé par MangeurVasqué
    Le but des interfaces est de diminuer le couplage entre deux classes.
    J'ai oublié la notion de couplage elle est liée à la notion de dépendance d'une classe par à rapport à une autre ?

    Citation Envoyé par MangeurVasqué
    Un autre aspect est la protection des variations.
    Tu peux préciser le sens de variation je ne suis pas certain qu'il faille prendre ce terme dans son sens premier.

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    merci Nip, je vais réfléchir sur l'exemple que tu m'a donné, je vais essayé de construire le contraire, ie la modélisation qui limiterais l'évolution du composant.

  9. #9
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par Laurent Dardenne
    Merci pour ces infos, j'ai besoin de qq précisions sur le sens de qq termes utilisés :

    Dans ce contexte considéres-tu l'appel d'une méthode comme un message(ex: méthode FaitqqChose )?
    Oui, les objets communiquent par envoi de message. Cela correspond aux appels de méthodes.

    Par ailleurs, je confirme bien évidemment la notion de contrat que véhicule une interface, ainsi que la séparation nette des services et de leur implantation.

    Par ailleurs, pour choisir rapidement s'il faut utiliser une interface ou non, je rajouterai la notion de capacité. C'est un moyen simple pour y penser.On retrouve bien cela dans les interfaces de l'API Java standard :
    • Possède la capacité d'être imprimé : interface printable
    • Possède la capacité d'être serialisé : interface serializable
    • Possède la capacité d'être trié : interface sortable
    • Possède la capacité d'être comparé : interface comparable
    • etc...
    Le suffixe "able" dénote bien une notion de capacité. J'ai d'ailleurs pris l'habitude de respecter ce nommage dans mes projets. Ex :
    • Possède la capacité d'être exporté: interface exportable
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  10. #10
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Histoire de mettre mon grain de sel...

    Outre le fait que tu peux changer l'implémentation d'une interface utilisée par un client pour des raisons "fonctionnelles et/ou techniques" (genre passer d'un DAOOracle à un DAOMySQL), l'intérêt des interfaces est de d'abord réfléchir au contrat que l'on veut remplir.
    Une fois ce contrat défini, le client du contrat peut aller faire son développement dans son coin et le développeur du dit contrat, celui qui va implémenter l'interface, peut lui aussi aller développer dans son coin. Ces 2 développeurs savent qu'ils pourront se rencontrer quand chacun aura fini son boulot et que le "raccord des prises" devrait se passer correctement.
    Entre temps, le client du contrat pourra utiliser une implémentation bidon de l'interface, on parle alors de bouchon ou encore de mocked object chez les english, pour réaliser ses tests = faire semblant d'appeler l'implémentation de l'interface/contrat qui n'est pas encore finie.

    Tu trouveras avec le framework SPRING une très très bonne aide pour utiliser ce principe de conception par interface.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par Laurent Dardenne
    J'ai oublié la notion de couplage elle est liée à la notion de dépendance d'une classe par à rapport à une autre ?
    Oui, c'est ça. Le degré de dépendance entre deux classes.

    Citation Envoyé par Laurent Dardenne
    Tu peux préciser le sens de variation je ne suis pas certain qu'il faille prendre ce terme dans son sens premier.
    Considère 2 sous-systèmes/composants/classes... qui collaborent. La protection des variations représente les moyens que tu va mettre en oeuvre afin que la modification d'un des sous-systèmes impacte le moins possible le second.
    C'est ce que tu appelles "sens premier" ?

  12. #12
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par MangeurVasqué
    C'est ce que tu appelles "sens premier" ?
    +- mais comme tu emplois le terme impacter, je comprend mieux.

    Je vais laisser décanter tout ça (c'est pour un tuto sur les interfaces sous Delphi). Dans le livre "le guide de l'utilisateur UML" (chez Eyrolles) j'ai lu le chapitre consacré au interface mais avec vos explications je comprend mieux leur utilisation.

    Je vous remercie pour votre aide .

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

Discussions similaires

  1. Eval d'une propriété d'une classe dans une classe
    Par bizet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/10/2008, 09h43
  2. [POO] Utilisation d'une classe dans une classe !
    Par Okinou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 14h34
  3. Une classe dans une classe...
    Par Baquardie dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/09/2005, 19h36
  4. Réponses: 2
    Dernier message: 31/08/2005, 16h12
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

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