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 :

les interfaces; quelle utilité?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut les interfaces; quelle utilité?
    salut tout le monde
    c# c# c# c# c# c# c# c# c# c# c# c#

    S.V.P si qq'un peut m'expliquer l'importance des interfaces puisqu'on va implémenter les mêthodes qu'elles contiennent dans dans toute classe qui a recours à ces mêthodes, une chose qu'on peut bien faire sans ces interfaces
    je n'arrive vraiment pas à toucher l'utilité


    encore une question:
    pourquoi le terme "interface"

    merci beaucoup

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    C'est très simple, prenons un exemple concret avec les bases de données et les interfaces IDataReader.
    Tu as une base de données SqlServer, et tu veux une méthode M qui renvoie un DataReader. Dans ton cas tu renvoies un SqlDataReader. Juste là ça marche. Admettons maintenant que tu veuilles passer sous une base Oracle. Tu es en train de te dire "bah c'est pas grave, je remplace mon SqlDataReader par un OracleDataReader dans les méthodes qui en ont besoin".
    C'est une solution mais tu perds un temps précieux.
    En regardant la définition de SqlDataReader et OracleDataReader, tu vois que les deux implémentent IDataReader.
    Dans ton cas, M, au lieu de renvoyer un SqlDataReader devrait renvoyer un IDataReader. Dans le code qui appelle M tu n'aurais rien eu à changer vu que dans les deux cas, tu obtiens un IDataReader. Tu n'aurais eu qu'à modifier le corps de M.
    De manière générale, les interfaces permettent d'ajouter un niveau d'abstraction pour pouvoir faire des changements dans une couche de l'application sans avoir à modifier les couches supérieures.
    Typiquement un Web Service devrait toujours prendre en paramètre et retourner des interfaces, histoire de découpler au maximum le Web Service et les applications qui l'utilisent.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Les interfaces sont un concept POO, c'est beaucoup plus généraliste que C#
    Lis un bouquin (online ou pas) sur les concepts POO tu comprendra très vite l'énorme utilité.

  4. #4
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    En clair, imagines que tu t'amuses à réaliser un programme qui manipule des véhicules.

    Tu as plein de véhicules différents... Avion, Voiture, Charette.... Tricycle....

    Et tu pour te simplifier la vie, au lieu d'avoir 200000 variables différentes, tu utilises une liste (logique non ?)

    Donc on va dire List<T> ça parait un très bon choix.
    Problème... List<T> demande un type particulier.... Bon, il faudrait pouvoir dire qu'on veut mettre des véhicules dans cette liste. Alors... List<Avion> ? List<Voiture> ?

    Bon, finalement, pas pratique cette List<T>, on va utiliser un ArrayList (qui correspond à List<object> en fait), comme ça on peut mettre ce qu'on veut dedans...

    Alors...
    ArrayList maListe = new ArrayList();
    [blablabla...]
    maListe.add(new Avion());
    maListe.add(new Voiture());
    maListe.add(new....);
    etc...

    Cool, on a notre liste bien remplie.
    Bon, maintenant, le problème, c'est qu'on aimerait bien démarrer un de ces appareils (mettre le contact quoi).

    Alors, on fait comment, dans la mesure où on a que les types Avion, Voiture, Bicyclette....

    if(maListe[i] is Avion){
    (maListe[i] as Avion).demarrer();
    }else if(maListe[i] is Voiture){
    .... blablabla

    C'est galère non ?

    Alors, au lieu de se faire chier avec ces spaghettis, on utilise une interface qui implémente demarrer();

    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
    interface IVehicule{
      void demarrer();
    }
     
    class Avion : IVehicule{...}
    class Voiture : IVehicule{...}
    etc...
     
    Et au final on peut même utiliser notre List<T> du début :
    List<IVehicule> maListe = new List<IVehicule>();
    maListe.add(new Avion());
    maListe.add(new Bicyclette());
    foreach(IVehicule v in maListe){
      v.demarrer();
    }
    C'est beaucoup plus simple que l'immonde armée des if imbriqués non ?

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Ouais c'est bien beau tout ça, mais il y a quand même une faille dans ton raisonnement :
    on a que les types Avion, Voiture, Bicyclette
    Comment tu démarres un vélo ?

    Ouais je sors...

    PS : Je me demandais : "l'immonde armée des if imbriqués", ça serait pas un film de Romero ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  6. #6
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Tu connais pas les solex ? :p

Discussions similaires

  1. [C#] Les interfaces en C# - interet
    Par igorzup dans le forum Windows Forms
    Réponses: 14
    Dernier message: 10/03/2005, 11h01
  2. Réponses: 9
    Dernier message: 03/03/2005, 14h36
  3. [C#] A quoi servent les interfaces???
    Par sof_nns dans le forum Windows Forms
    Réponses: 8
    Dernier message: 28/10/2004, 20h51
  4. à quoit sert les interfaces ?
    Par nytmare dans le forum MVC
    Réponses: 13
    Dernier message: 12/09/2004, 11h57
  5. Réponses: 2
    Dernier message: 31/10/2003, 16h32

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