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ébutant] Compréhension de code


Sujet :

C#

  1. #1
    Membre habitué Avatar de isarian
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 268
    Points : 161
    Points
    161
    Par défaut [débutant] Compréhension de code
    Le code

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    using System;
    namespace ArraySorting
    {
        public class Employee: IComparable
        {
            public string name;
            public int level;
            public DateTime hiringDate;
     
            public Employee(string name, int level, DateTime hiringDate)
            {
                this.name = name;
                this.level = level;
                this.hiringDate = hiringDate;
            }
     
            public int CompareTo(Object anObject)
            {
                if (anObject == null) return 1;
                if (!(anObject is Employee))
                {
                    throw new ArgumentException();
                }
     
                Employee anEmployee = (Employee)anObject;
                if (level < anEmployee.level) return -1;
                else
                {
                    if (level == anEmployee.level)
                    {
                        if (hiringDate < anEmployee.hiringDate)
                            return -1;
                        else
                        {
                            if (hiringDate == anEmployee.hiringDate)
                                return 0;
                            else return 1;
                        }
                    }
                    else return 1;
                }
            }
        }
        public class ArraySort
        {
            public static void Main()
            {
                // Create and initialize a new Array instance.
                Employee[] myEmployees = new Employee[10];
                myEmployees[0] = new Employee("a", 2, new DateTime(1990, 1, 1));
                myEmployees[1] = new Employee("b", 2, new DateTime(2000, 1, 1));
                myEmployees[2] = new Employee("c", 2, new DateTime(1990, 1, 1));
                myEmployees[3] = new Employee("d", 4, new DateTime(2000, 1, 1));
                myEmployees[4] = new Employee("e", 4, new DateTime(1990, 1, 1));
                myEmployees[5] = new Employee("f", 4, new DateTime(2000, 1, 1));
                myEmployees[6] = new Employee("g", 1, new DateTime(1990, 2, 5));
                myEmployees[7] = new Employee("h", 1, new DateTime(2000, 1, 1));
                myEmployees[8] = new Employee("i", 1, new DateTime(1990, 1, 1));
                myEmployees[9] = new Employee("j", 0, new DateTime(2001, 1, 1));
     
                // Display the values of the Array.
                Console.WriteLine("The Array instance initially contains values:");
                PrintIndexAndValues(myEmployees);
     
                // Sort the values of the Array.
                Array.Sort(myEmployees);
                // Display the values of the Array.
                Console.WriteLine("After sorting:");
                PrintIndexAndValues(myEmployees);
            }
            public static void PrintIndexAndValues(Array myEmployees)
            {
                foreach (Employee e in myEmployees)
                {
                    Console.WriteLine("name: {0} \tlevel: {1} \tdate:{2:d}", e.name, e.level, e.hiringDate);
                }
            }
        }
    }
    Voila étant débutant, ( et oui débutant toujours depuis 2 semaines ^^) je suis les cours c#, et dans le syllabus, voici le code. il trie des employé suivant le level.

    VOila ce que je ne comprends pas, et ne trouve pas d'expliquation clair (ou alors mal cherché)

    1. la notation public class Employee: IComparable
    cela signifie quoi? que employee herite de icomparable?

    2. cette methode public int CompareTo(Object anObject), je ne l'appel jamais mais pourtant l'enlever est pas possible il me marque un message d'erreur. et à quoi sert elle exactement?

    3. throw ce petit mot tout gentil à quoi il correspond?

    EDIT: JE vois que IComparable fait partie du using system; savez vous ou je pourrais trouvé un récapitulatif de ce que font, c'est élémént.

    Merci d'avance

    Isarian

  2. #2
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Salut Isarian,


    Citation Envoyé par isarian Voir le message
    1. la notation public class Employee: IComparable
    cela signifie quoi? que employee herite de icomparable?
    Tu n'es pas loin, la classe Employee herite de l'interface IComparable.

    Pour plus d'infos sur cette interface, MSDN est ton ami :
    http://msdn2.microsoft.com/en-us/lib...omparable.aspx



    Citation Envoyé par isarian Voir le message
    2. cette methode public int CompareTo(Object anObject), je ne l'appel jamais mais pourtant l'enlever est pas possible il me marque un message d'erreur. et à quoi sert elle exactement?
    C'est justement tout l'interet des interfaces.
    Tu y definis un ensemble de methodes que toute classe heritant de l'interface se doit d'implementer.
    Le but ici est de redefinir la methode CompareTo qui va donner la possibilite a la classe Employee d'etre comparee.

    L'exemple MSDN qui suit permet d'identifier si un objet est un objet Temperature, et si oui, de le comparer avec celui existant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public int CompareTo(object obj) {
            if(obj is Temperature) 
            {
                Temperature otherTemperature = (Temperature) obj;
                return this.temperatureF.CompareTo(otherTemperature.temperatureF);
            }
            else
            {
               throw new ArgumentException("object is not a Temperature");
            }    
        }
    Dans ce code, si l'objet que l'on veut comparer est bien un objet Temparature :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(obj is Temperature)
    {
     ...
    }
    Alors, on cast cet objet Object en un objet Temperature pour ensuite les comparer par leurs valeurs en Fahrenheit otherTemperature.temperatureF et en retourner le resultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Temperature otherTemperature = (Temperature) obj;
    return this.temperatureF.CompareTo(otherTemperature.temperatureF);
    Dans ce cas, la propriete temperatureF est un Double (voir code complet dans le lien MSDN).


    Citation Envoyé par isarian Voir le message
    3. throw ce petit mot tout gentil à quoi il correspond?
    Throw te permet de lancer une exception (une erreur) qui va pouvoir etre geree par la suite via un bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Try
    {
     //My code
    }
    Catch(MyException ex)
    {
     //My error handler
    }
    Voila, j'espere que c'est desormais un peu plus clair

  3. #3
    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
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par Jack le Boulet Voir le message
    Tu n'es pas loin, la classe Employee herite de l'interface IComparable.
    Tu n'es pas loin non plus.

    Employee n'hérite pas de IComparable. Employee implémente l'interface IComparable.
    Une interface est une sorte de contrat, et implémenter une interface implique de définir dans la classe toutes les propriétés et méthodes définies dans l'interface.
    Par exemple l'interface IComparable définit une méthode CompareTo, donc toute classe qui souhaite implémenter IComparable doit elle-même définir une méthode.

  4. #4
    Membre habitué Avatar de isarian
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 268
    Points : 161
    Points
    161
    Par défaut
    Premier point oky super bien compris

    2 ieme point
    DOnc si j'utilise Icomparable
    j'aurais une methode compareto que je suis obligé d'implementer?

    Si oui alors comment savoir quand on commence a programmer quel interface (j'ai difficile avec cette notion d'interface connaitrais tu un lien qui expliquerais assez bien cela?) notre méthode doit heriter et comment l'utilisé?

    je suppose que beaucoup de pratique aide deja pas mal?

    pour le compare temperature, on compare returne true si c'est bien une température et false si cela ne l'est pas? (EDIT: erreur j'ai pas lu tout le code: il compare 2 valeur, mais il retoune quoi ? la difference des 2 Alors?)

    si c'est bon , j'ai bien progresser ^^

  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
    Points : 6 334
    Points
    6 334
    Par défaut
    Un lien pour comprendre les interfaces :
    http://msdn2.microsoft.com/fr-fr/lib...5b(VS.80).aspx

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Tu n'es pas loin non plus.
    Employee n'hérite pas de IComparable. Employee implémente l'interface IComparable.
    Merci pour cette precision.
    Effectivement les interfaces ne contiennent que des declarations...
    Je voulais exprimer ceci par l'emploi du terme "heritage" :

    Citation Envoyé par SaumonAgile Voir le message
    implémenter une interface implique de définir dans la classe toutes les propriétés et méthodes définies dans l'interface
    Cette classe implementant l'interface herite donc d'un ensemble de methodes/proprietes a implementer.



    Citation Envoyé par isarian
    Si oui alors comment savoir quand on commence a programmer quel interface (j'ai difficile avec cette notion d'interface connaitrais tu un lien qui expliquerais assez bien cela?) notre méthode doit heriter et comment l'utilisé?
    Generalement, quand un developpeur decide d'implementer une interface, il le fait parce qu'il connait ses benefices et qu'ils sont justifies...
    On implemente pas une interface juste pour faire bien.
    A toi de te renseigner sur les interfaces que le framework .NET offre aux developpeurs...


    Citation Envoyé par isarian
    pour le compare temperature, on compare returne true si c'est bien une température et false si cela ne l'est pas?
    Pas du tout !
    Comme l'indique le lien MSDN, IComparable te permet de trier des objets et non de savoir s'ils sont egaux (vrai ou faux).
    La definition de la methode "public int CompareTo(object obj)"
    t'indique qu'elle ne renvoie pas un booleen mais un integer...

  7. #7
    Membre habitué Avatar de isarian
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 268
    Points : 161
    Points
    161
    Par défaut
    Je crois avoir compris le code de temperature.

    Il renvoie -1 , 0 ou 1 suivant si le premier est plus grand, egal ou plus petit.

    A toi de te renseigner sur les interfaces que le framework .NET offre aux developpeurs...
    Tu saurais me dire ou je peux me renseigner

    sur msdn2?

    Il est vrai que pour les petits excercices style afficher hello et autre l'interface ne présente aucun interet et c'est pour cela que je bloque assez bien sur cette notion.

    Mais grace à vos expliquation cela devient plus clair.

    Merci beaucoup

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Voici un autre lien qui t'explique en detail et en francais le fonctionnement de IComparable :
    http://support.microsoft.com/kb/320727

    Pour trouver toutes les informations sur les interfaces, tu peux rechercher sur les liens Microsoft que j'ai poste.
    Evidemment, il faut en connaitre le nom...

    Pour trouver une classe/interface qui permettrait de resoudre tes futurs problemes, il te reste Google ou poser ta question sur le forum

  9. #9
    Membre habitué Avatar de isarian
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 268
    Points : 161
    Points
    161
    Par défaut
    Je vous remercie tous les 2.

    J'ai mieux compris les interfaces, et comment les utilisées.

    restera le pourquoi et le quand mais ca la pratique m'aidera.

    Sujet Résolu

    Merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/02/2014, 11h29
  2. Débutant: compréhension code et conversion en VB
    Par Casey_ dans le forum Langage
    Réponses: 4
    Dernier message: 02/02/2011, 09h18
  3. [Débutant] Compréhension de code
    Par sebatlante dans le forum x86 16-bits
    Réponses: 10
    Dernier message: 18/01/2009, 17h10
  4. [débutant] Compréhension de code II
    Par isarian dans le forum C#
    Réponses: 19
    Dernier message: 07/03/2008, 10h27
  5. Réponses: 4
    Dernier message: 06/11/2003, 10h37

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