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 :

Plutôt classe abstraite ou interface ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut Plutôt classe abstraite ou interface ?
    Bonjour à tous,

    Dans l'application Web que je développe, j'avais déjà mis en place un système de connexion pour accéder à un espace membre (accessible seulement aux Membre donc).
    J'ai ensuite développé un back-office, qui est lui-aussi un espace sécurisé accessible seulement par des admin.
    Les admin et les membres ont quelques champs en commun (identifiant, mot de passe, adresse mail), et le système de connexion est le même. C'est juste qu'on y accède pas par le même lien sur la page et qu'il ne redirige pas au même endroit si c'est un membre ou un admin qui se connecte.

    Du coup, j'ai une entité Membre, une entité Admin, et je les ai fait hérité d'une classe abstraite Personne dans laquelle j'ai déclaré les accesseurs sur l'id, le mot de passe et l'email.
    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
    public abstract class Personne extends DomainObject {
     
    	private static final long serialVersionUID = 1L;
     
    	public abstract String getIdentifiant();
     
    	public abstract void setIdentifiant(String identifiant);
     
    	public abstract String getPassword();
     
    	public abstract void setPassword(String password);
     
    	public abstract String getEmail();
     
    	public abstract void setEmail(String email);
    }
    C'est ce qui me permet d'utiliser le même service d'identification : le service renvoie une Personne et je sais si c'est un Membre ou un Admin en fonction du contexte.
    ça marche très bien, mais en y réfléchissant ce matin, je me suis demandée si utiliser une interface à la place de la classe abstraite aurait pas été mieux (niveau bonnes pratiques) : j'ai souvent lu sur les forums que les gens évitent autant que possible l'héritage et préfèrent les interfaces...

    Du coup je vous pose la question, dans un cas comme ça, est ce plus logique d'utiliser l'héritage avec une classe abstraite ou d'utiliser une interface? et surtout, pourquoi?
    Merci d'avance pour vos points de vu

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par zaboug Voir le message
    Du coup je vous pose la question, dans un cas comme ça, est ce plus logique d'utiliser l'héritage avec une classe abstraite ou d'utiliser une interface? et surtout, pourquoi?
    Merci d'avance pour vos points de vu
    L'interface s'utilise comme "une porte d'entrée" commune. En gros chaque service appelant ne doit pas connaître la logique derrière et la mécanique qui se passe. Ainsi, dans ton cas, le client de ta classe ne doit pas connaître par quel mécanisme d'authentification ça passe.

    La classe abstraite s'utilise pour factoriser du code à la différence d'une interface.

    Enfin en Java on peut hériter d'une classe mais implémenter plusieurs interfaces. C'est bon à garder en tête.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    La classe abstraite s'utilise pour factoriser du code à la différence d'une interface.
    Du coup, du fait que je ne factorise pas de code mais que je stipule que les Personnes doivent avoir tels accesseurs, faudrait plutôt que je mette ma classe Personne sous forme d'interface.

    Citation Envoyé par Robin56 Voir le message
    L'interface s'utilise comme "une porte d'entrée" commune. En gros chaque service appelant ne doit pas connaître la logique derrière et la mécanique qui se passe. Ainsi, dans ton cas, le client de ta classe ne doit pas connaître par quel mécanisme d'authentification ça passe.
    Y'a pas de problèmatique de service ici puisque Membre et Admin sont des entités et non pas des services.
    Par contre, l'identification c'est un service à qui on précise quel type de connexion on veut et qui, en fonction du type demandé, vérifie que le Membre ou l'Admin existe. Ce service renvoie alors une Personne.

    C'est d'ailleurs parce que Membre et Admin sont des entités que j'ai d'abord pensé à l'héritage.

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par zaboug Voir le message
    Du coup, du fait que je ne factorise pas de code mais que je stipule que les Personnes doivent avoir tels accesseurs, faudrait plutôt que je mette ma classe Personne sous forme d'interface.
    Oui. L'héritage c'est utilisé surtout pour le cas où l'on a des logiques en partie commune (pour ne pas faire de réécriture).
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  5. #5
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    merci pour ces explications et conseils

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

Discussions similaires

  1. [Débutant] classe abstraite ou interface
    Par Chatbour dans le forum Langage
    Réponses: 9
    Dernier message: 29/11/2007, 09h45
  2. Difference entre Class Abstraite et interface
    Par menzlitsh dans le forum Langage
    Réponses: 11
    Dernier message: 05/07/2007, 13h04
  3. Classe abstraite et interface
    Par ender91 dans le forum Langage
    Réponses: 6
    Dernier message: 15/06/2007, 11h46
  4. Réponses: 5
    Dernier message: 28/03/2007, 17h28
  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