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 :

[POO] implémenter des interfaces, la bonne pratique


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2022
    Messages : 10
    Par défaut [POO] implémenter des interfaces, la bonne pratique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    interfaceA {
       f1()
       f2()
    }
     
    class service1 implements interfaceA<modelX> {
       @override
       f1() { ... }
     
       @override
       f2() { ... }
    }
    plusieurs classes (service1, service2...) existe sur la meme classe avec divers model


    disons que je veux uniquement pour service1 ajouter une fonction f3, j'hesite entre 2 façons car les 2 fonctionnent :

    (1)

    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
     
    interfaceA {
       f1()
       f2()
    }
     
    class service1 implements interfaceA<modelX> {
       @override
       f1() { ... }
     
       @override
       f2() { ... }
     
       f3() { ... }      // pas d'override
    }
    (2)

    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
    18
    19
    20
     
    interfaceA {
       f1()
       f2()
    }
     
    interfaceF3 {
       f3()   
    }
     
    class service1 implements interfaceA<modelX>, interfaceF3  {
       @override
       f1() { ... }
     
       @override
       f2() { ... }
     
       @override
       f3() { ... }     
    }


    en terme de bonne pratique (1) ou (2) ?

    plusieurs avis si possible !

  2. #2
    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
    Ben là on entre dans les cas où les avis divergent.

    En principe (1) n'est pas spécialement mauvais.


    Mais on pourra préférer le principe de toujours programmer par interface. Du coup, (2) ? Beeeeen, (2) peut aller dans certains cas, mais dans le cas général :

    tu vas l'assigner à quelle variable, ton objet de classe service1 ? Il faut que ce soit une variable sur laquelle on peut appeler f1(), f2(), et f3(). Du coup elle sera de quel type ? service1 ? C'est pas programmer par interface, ça.
    Les solutions dépendent d'un peu tout :

    - f3() a-t-elle vraiment besoin, ou est-ce vraiment très logique, de faire partie du même service que f1() et f2() ? (Si non, un autre service semble plus logique)
    - Tu pourrais avoir besoin de définir une nouvelle interface, InterfaceAF3, qui hérite de interfaceA et de interfaceF3.
    - Tu pourrais enlever interfaceF3 et créer directement InterfaceAF3 qui hérite de interfaceA et qui ajoute f3().
    - Pas impossible que programmer par interface ne soit pas vraiment utile dans ton cas, il faut voir.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 89
    Par défaut
    et dans ce cas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    interfaceA {
       speed()
       conso()
    }
     
    class service1 implements interfaceA<Car> {
       @override
       speed() { ... }
     
       @override
       conso() { ... }
    }
    par exemple service1 on implémente avec plusieurs type de vehicule: car,airplane, boat
    pour car on veut ajouter une fonction capacity() pour la batterie

    (1) ou (2) ?

  4. #4
    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
    On ne peut pas utiliser les génériques pour un cas de ce genre.

    Ou alors il faut gruger de manière assez sale, genre avec des UnsupportedOperationException quand le programmeur appelle des combinaisons qui ne marchent pas. Vu qu'on parle de meilleures pratiques, c'est à éviter.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    ok et sans les génériques ?

  6. #6
    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
    ....... Ben sans les génériques ça peut pas être <Car>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Reflection] Obtenir toutes les classes implémentant une interface
    Par Pill_S dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 20/04/2005, 16h48
  2. [classe anonyme] implementant une interface
    Par stanilas dans le forum Langage
    Réponses: 4
    Dernier message: 30/11/2004, 00h18
  3. [Logiciel]Cherche graphisme pour des interfaces visuelles
    Par smyley dans le forum Autres Logiciels
    Réponses: 9
    Dernier message: 14/11/2004, 02h13
  4. [Reflection] Classes implémentant une interface
    Par thibaut dans le forum API standards et tierces
    Réponses: 17
    Dernier message: 29/07/2004, 14h57
  5. Implementation et Interface
    Par Bleys dans le forum Débuter
    Réponses: 5
    Dernier message: 21/06/2004, 14h00

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