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 :

décidement, j'ai du mal avec les interfaces


Sujet :

C#

  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut décidement, j'ai du mal avec les interfaces
    Hello,

    je suis en train de me refaire une santé en C# (avec le bouquin C# version 2) et si j'ai compris que les interfaces étaient un contrat permettant de garantir qu'une classe dispose de certaines méthodes implémentées, je voudrais une petite explication sur l'exemple suivant :

    1. Je crée une classe Personne
    2. Pour pouvoir dupliquer une instance de Personne, je dois créer la méthode Clone dans laquelle j'utilise la méthode MemberWiseClone().

    Dans l'exemple que donne le bouquin, il interface la classe Personne avec ICloneable. Ma question est la suivante :
    Pour que la méthode Clone fonctionne, il n'y a pas besoin que la classe Personne soit ICloneable (j'ai testé :-). Donc, techniquement, à quoi sert le fait de déclarer Personne comme ICloneable ?

    Merci de votre aide !

  2. #2
    Membre habitué Avatar de zhouyu
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Points : 143
    Points
    143
    Par défaut
    Salut.
    Ca sert à ce que ta classe soit utilisable par d'autre méthodes qui accepte une interface IClonable.

    Une interface permet de spécifier que telle ou telle classe à ses propriétés. Et si une méthode demande cette interface en paramètre, toutes les classes implémentant cette interface peuvent être donné à l'appel de la fonction.

  3. #3
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    quand tu dis classes, c'est un raccourci pour "objets de la classe" ?
    pourrais-tu me donner un exemple rapide ? Merci !

  4. #4
    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 : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Pas de chance, IClonable est une interface un peu...ratée. Elle est d'ailleurs déconseillées par Microsoft (en gros car elle ne précise pas si c'est un clonage type "deep copy" or "shallow copy".

    En gros, l’héritage d'une classe est une relation "est une". "Manager" est une "Personne". Il y a une notion de spécialisation

    Une interface est une caractéristique, une fonctionnalité qui n'est pas relié spécialement à une classe. "IComparable", par exemple n'est pas une spécialisation d'une classe quelconque. IComparable peut être utilisée sur n'importe quelle classe. Si tu veux qu'une classe ait cette fonctionnalité, tu peux l'implémenter. Grâce à ça, tout le monde peut savoir que ta classe peut être comparée et peut donc être utilisée avec certains méthodes de tri, comme Array.Sort(), par exemple.

    On voit là un autre avantage des interfaces : une sorte de généricité. La méthode Sort() de Array demande juste une interface IComparable. Elle ne se soucie pas de la classe elle-même. C'est donc très générique, n'importe qui peut l'utiliser en implémentant IComparable. Si Sort() demandait un type "Manager", par exemple, elle ne pourrait être utilisée que par des classes de type "Manager" ou dérivées.

    Bon c'est peut-être pas super académique ce que je dis, mais c'est l'idée générale
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Les interfaces sont, entre autres, des contrats, c'est-à-dire une promesse d'implémentation.

    Qu'il existe une interface ICloneable n'empêche aucune classe d'implémenter une méthode Clone().

    C# offre le moyen de contraindre des instances à respecter un contrat donné et ça se fait par l'adhérence de la classe de cette instance à une interface.

    Et ce même si cette contrainte ne garantit en rien la nature de l'implémentation du contrat.

    Si une méthode exige un object qui adhère à IDisposable, rien ne garantie que l'implémentation de Dispose() ne sera pas un WriteLine("Hello!").

    Par exemple, dans un module de bas niveau, j'exige qu'on passe une instance d'une classe qui implémente ICloneable à cause d'opérations parallèles asynchroniques. Je suis prêt à accepter que le clonage ne fonctionne pas (mon thread va m'indiquer que mon objet n'est pas valide) mais au moins, je n'aurai pas exception d'implémentation, ce qui serait assez gênant dans une librairie publique comme la nôtre.

  6. #6
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Merci à tous, c'est plus clair en effet !

Discussions similaires

  1. probleme sql - j'ai du mal avec les dates
    Par zetton dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/06/2008, 18h23
  2. [XSLT] Du mal avec les fonctions preceding math:min etc.
    Par Mil17 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 16/08/2007, 12h27
  3. du mal avec les fichiers ressources
    Par keil dans le forum MFC
    Réponses: 1
    Dernier message: 01/02/2006, 02h46
  4. [POO] Un peu de mal avec les membres de ma classe
    Par Spack dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/11/2005, 03h41

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