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

C# Discussion :

difference interface et classe abstraite c#


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Par défaut difference interface et classe abstraite c#
    Quelle difference existe t'il entre les interfaces et les classe abstraite en C#

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Dans ta classe abstraite il peut y avoir des fonctions/méthodes avec une implémentation. Tu peux également avoir des variables(fields), alors que les interfaces ne peuvent avoir que des propriétés.
    Tu ne peux hériter que d'une seule classe abstraite, alors qu'avec les interfaces non.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Une classe abstraite et un interface proposent des contrats que toute classe dérivant de la classe abstraite ou implémentant l'interface doit respecter. Une classe abstraite comme un interface ne peut être instanciée.

    Les différences sont les suivantes :
    • une classe abstraite est définie avec le mot clef abstract.
    • les contrats (méthodes et propriétés sans implémentations) d'une classe abstraite sont définis avec le mot clef abstract.
    • une classe abstraite peut contenir des implémentations de méthodes et de propriétés.
    • une classe abstraite peut contenir des champs
    • une classe abstraite peut contenir comme toute autre classe des membres statiques


    Peut-être qu'il y a d'autres différences mais je pense que j'ai fourni les principales.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Par défaut
    Une classes abstraite définit en tout ou en partie la nature d'une entité alors qu'une interface en définit plutôt la signature, la forme publique qu'elle présente aux modules en interaction.

    On dit qu'une classe hérite d'une classe abstraite alors qu'une classe implémente une interface.

    En d'autre mots, une classe acquière le comportement d'une classe abstraite alors qu'elle adhère au contrat d'une interface.

    L'avantage des interfaces? La possibilité de définir plusieurs interfaces et d'y faire adhérer une classe ce qui permet à des consommateurs une flexibilité que ne permettrait pas l'héritage.

    Je pourrais par exemple définir une méthode générique qui n'accepte que les types qui adhèrent aux contrat IDisposable et ICloneable afin de pouvoir prendre avantage de la programmation parallèle.

  5. #5
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Les classes abstraites sont aussi un poil plus rapides, pour ceux qui veulent optimiser à mort

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    tout à fait, ce qui me choquait à l'origine c'est de voir -3 sur un post interressant et +4 à un autre qui n'était qu'un complément
    Pour moi c'est les mots hériter, et implémenter(un comportement) qui sont important pour choisir entre les deux.
    Même si les détails techniques sont importants, la philosophie qui se cache derriere le concepte d'interface et d'heritage sont des notions différentes.
    un humain hérite de mamifère, qui herite d'être vivant.
    un être humain implemente des fonctionalité "Parler",
    un mamifère implemente "Allaiter", "Se deplacer"
    et être vivant "Se nourir"

    Donc j'ai mis un +1 Babyneedle car il n'y à pas que les limitations techniques (qui en plus pour le multi-héritage sont des limitations technique du .Net) qui sont importantes.
    part contre je n'ai pas mis de -1 a micka

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bon comme l'a dit Babyneedle, son message est en complément au mien. Et c'est ce que j'ai compris et c'est pour cela je lui ai mis D'autre part il est bien vrai que mon message suit juste celui de micka132 mais cela ne veut pas dire que je l'ai mis

    Comme l'a dit ClaudeBg
    Pour moi, il faut ignorer ces cotations anonymes et te fier plutôt aux commentaires placés ou non en réaction à tes interventions, ça donne une bien meilleure idée de ce que pensent les internautes.
    Donc SVP arrêtons de polluer ce thread avec ces trucs qui ne rapportent rien sur le problème posé par le créateur du thread à qui je dis que si il avait fait une recherche sur le forum il verra que le problème a été traité et retraité plusieurs fois.

    Sinon je ne suis pas totalement d'accords avec
    Citation Envoyé par BenoitM Voir le message
    Pour moi c'est les mots hériter, et implémenter(un comportement) qui sont important pour choisir entre les deux.
    Même si les détails techniques sont importants, la philosophie qui se cache derriere le concepte d'interface et d'heritage sont des notions différentes.
    un humain hérite de mamifère, qui herite d'être vivant.
    un être humain implemente des fonctionalité "Parler",
    un mamifère implemente "Allaiter", "Se deplacer"
    et être vivant "Se nourir"
    Pourquoi ? Parce que cela ne fait que la distinction entre une classe (qu'elle soit abstract, sealed etc...) et un interface. Quand on demande la différence entre une classe abstraite et un interface je ne suis pas d’accords que les mots hériter et implémenter soient les plus importants pour effectuer un choix.

  8. #8
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    J'arrive sur la discussion un peu par hasard, je ne suis donc pas à l'origine des + et -. Cependant, je note effectivement un truc faux la dedans :
    Citation Envoyé par micka132 Voir le message
    Dans ta classe abstraite il peut y avoir des fonctions/méthodes avec une implémentation. Tu peux également avoir des variables(fields), alors que les interfaces ne peuvent avoir que des propriétés.
    Tu ne peux hériter que d'une seule classe abstraite, alors qu'avec les interfaces non.
    Les interfaces ne peuvent avoir que des methodes, des propriétés, des évènements et des indexeurs (il manque méthodes, évènements et indexeurs).

    Ceci est une interface légale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public interface IMyContract 
    {
        void SayHello();
        int AgeDuCapitaine { get; }
        event EventHandler<EventArgs> PafLeChien;
        string this[string key] { get; }
    }

  9. #9
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Les interfaces ne peuvent avoir que des methodes, des propriétés et des évènements (il manque méthodes et évènements).
    Ce n'est donc pas faux c'est incomplet, il manque juste les events . edit:et les indexeurs!

    Tu noteras que j'ai marqué "fonctions/méthodes" parceque la différence est bien floues et je crois être tombés sur des dizaines et des dizaines d'avis différent sur la difference.
    Pour moi c'est que la méthode ne retourne rien et que la fonction oui.
    En c# ca se traduit par le void pour les méthodes, mais certains pensent que ca reste une fonction [...]Du coup j'ai mis les deux!

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par micka132 Voir le message
    Pour moi c'est que la méthode ne retourne rien et que la fonction oui.
    En c# ca se traduit par le void pour les méthodes, mais certains pensent que ca reste une fonction [...]Du coup j'ai mis les deux!
    Non. Tu confonds une méthode et une procédure.
    Une méthode est une notion représentant une fonction (exécute un ensemble d'instructions et renvoie une valeur en retour) ou une procédure (exécute un ensemble d'instructions et ne renvoie rien du tout). Une procédure est forcément une méthode mais la réciproque n'est pas vraie.

    C'est la notion de méthode ou opération qui est utilisée en POO et en UML.

  11. #11
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Effectivement je me suis trompé de terme en voulant être plus précis.

    Bon de toute facons problème réglé j'utilise le terme procedure que pour la BDD.

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