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 :

Besoin d'aide pour vérification de saisie dans le cadre de la POO ! [Débutant]


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2020
    Messages : 23
    Par défaut Besoin d'aide pour vérification de saisie dans le cadre de la POO !
    Bonjour et ravis de vous retrouver !

    Les amis, je me suis attaqué à la POO récemment, j'avance bien dans mon apprentissage du développement. Pour rappel j'ai commencé il y a peu de temps (soit 3 semaines à peu prêt).

    Alors voici mon problème :

    - J'ai mis en place un programme qui permet d'entrer un login et un password. En fonction de la saisie, il indiquera différentes combinaisons de messages.
    - Pour se faire, j'ai créer une classe, dans laquelle j'ai créer un objet que l'on pourrait nommer "Saisie". Oui mon objet a une seule caractéristique, soit un simple Console.ReadLine, mais soyez indulgent je débute vraiment la progra xD
    - Je vais utiliser cet objet dans deux méthodes différentes, l'une pour le login et l'autre pour le password.

    Le problème, c'est que je ne sais pas quoi comparer, à mes variables de type chaîne de caractère : "login" et "password", afin de déterminer si les bons caractères ont été saisie ou non?

    Dans mon code ci-dessous, j'ai mis les méthodes dans mes conditions mais je m'attendais à un tel problème, sachant que la méthode comprend plusieurs éléments de type différents, donc ça n'a pas vraiment de sens.
    Le plus logique semblerait de comparer "pickedSomething" ou "Class1" (qui sont dans la classe) car c'est eux qui correspondent précisément à la saisie, mais ils sont "hors portée".

    Bref je suis un peu perdu là :/

    la classe :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace Testing
    {
        class Class1
        {
            public string pickedSomething;
     
            public Class1()
            {
                pickedSomething = Console.ReadLine();
            }
     
     
        }
    }
    le Program.cs :
    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
     
    using Testing;
    using System;
     
     
    namespace GameNumber
    {
        class Program
        {
            static void Main(string[] args)
            {
     
                string login = "hi";
                string password = "hello";
     
                pickedLogin();
                pickedPassword();
                if (pickedLogin() == login && pickedPassword() == password)
                {
                    Console.WriteLine("Connecté !");
                }
                else
                {
                    Console.WriteLine("Les données sont érronée, veuillez renouveler votre saisie :");
                }
     
            }
     
            static void pickedLogin()
            {
                Console.WriteLine("Enter your login :");
                Class1 pickedLog;
                pickedLog = new Class1();
            }
     
            static void pickedPassword()
            {
                Console.WriteLine("Enter your password :");
                Class1 pickedPass;
                pickedPass = new Class1();
            }
        }
    }
    Merci d'avance pour votre aide

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    Bonjour,

    Je vois que tu es un peu perdu, il y a plusieurs erreurs, du coup j'ai repris ton exemple en le simplifiant.

    Voici la classe Saisie, ta classe Class1 :

    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
        public class Saisie
        {
            string question;
            string reponse;
     
            public Saisie(string question)
            {
                this.question = question;
            }
     
            public void Saisir()
            {
                Console.WriteLine(question);
                reponse = Console.ReadLine();
            }
     
            public string Reponse
            {
                get { return reponse; }
                set { reponse = value; }
            }
        }
    Et voici la méthode Main :

    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
     
            static void Main(string[] args)
            {
                string login = "hi";
                string password = "hello";
     
                Saisie saisieLogin = new Saisie("Enter your login :");
                Saisie saisiePassword = new Saisie("Enter your password :");
     
                saisieLogin.Saisir();
                saisiePassword.Saisir();
     
                if (saisieLogin.Reponse == login && saisiePassword.Reponse == password)
                {
                    Console.WriteLine("Connecté !");
                }
                else
                {
                    Console.WriteLine("Les données sont érronée, veuillez renouveler votre saisie :");
                }
            }
    Comme tu peux voir, j'ai simplifié la classe. Déjà plus de saisie dans le constructeur, c'est plus safe et plus propre. Essaye de limiter le code dans le constructeur à uniquement ce qu'il a besoin pour avoir un objet fonctionnel.
    Du coup, la question elle-même est stockée dans l'objet, comme ça tu peux la poser autant de fois que tu le veux, pareil pour la réponse.

    Maintenant on appelle la saisie par la méthode du même nom, comme ça tu la déclenche en temps voulu et non à l'instanciation.

    J'ai aussi passé la réponse en propriété au lieu d'être en public directement. Toujours une bonne habitude à prendre.

    Tu essayes aussi de comparer une méthode de type void a un string, ce qui n'est pas possible. Il te faut comparer la valeur de ton objet a un équivalent, comme je l'ai fait. Il est d'ailleurs possible de faire directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (saisieLogin == login && saisiePassword == password)
    Mais il te faut passer par de la surcharge d'opérateur, c'est peut-être un trop gros morceau pour toi directement. Mais en gros tu écris comment pour ta classe, tu définis une égalité (ou une inégalité) avec un autre objet du même type ou une variable. Je te mets le code a ajouter à la classe Saisie si jamais tu veux tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            public static bool operator ==(Saisie obj1, string obj2)
            {
                return obj1.Reponse == obj2;
            }
     
            public static bool operator !=(Saisie obj1, string obj2)
            {
                return !(obj1 == obj2);
            }
    Si il y a quelque chose qui n'est pas encore bien clair, n'hésite pas à nous le faire savoir .

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2020
    Messages : 23
    Par défaut
    Merci beaucoup pour ta réponse PixelJuice ! Effectivement, c'était un peu confus dans ma tête.

    Voici ce que j'ai réalisé grâce à tes précieux conseils et l'aide d'un ami :

    Une classe nommée "Identifiant", qui permet de saisir et de stocker le login et le mot de passe :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace Identification
    {
        class Identifiant
        {
            public string ID;
            public string MotDePasse;
     
            public void DemanderIdentifiant()
            {
                Console.Write("ID: ");
                ID = Console.ReadLine();
     
                Console.Write("Mot de passe: ");
                MotDePasse = Console.ReadLine();
            }
        }
    }
    Une classe nommée "Idendificateur" qui permet de vérifier que la saisie correspond bien au login et mot de passe attendus, ou pas. Elle affiche des messages en fonction des situations :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace Identification
    {
        class Identificateur
        {
            private string ID = "Raikho";
            private string MotDePasse = "1234";
     
            public bool Identifier(Identifiant identifiant)
            {
                if (identifiant.ID == ID && identifiant.MotDePasse == MotDePasse)
                {
                    Console.WriteLine("Connecté !");
                    return true;
                }
                else
                {
                    Console.WriteLine("Les données saisies sont érronées, veuillez recommencer");
                    return false;
                }
            }
        }
    }
    Et enfin on utilise dans le main, nos deux classes :
    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
     
    using System;
     
    namespace Identification
    {
        class Program
        {
            static void Main(string[] args)
            {
                Identifiant identifiant = new Identifiant();
                identifiant.DemanderIdentifiant(); // Rempli les champs ID et Mot de passe de l'objet identifiant
     
                Identificateur identificateur = new Identificateur();
                identificateur.Identifier(identifiant);
            }
        }
    }
    On utilise donc 2 classes versus 1 dans ton exemple, ce qui montre l'étendu des possibilités dans la programmation. Il y a vraiment une "infinité" de chemins, pour arriver au même endroit et c'est ce qui me perturbe encore pour le moment.
    Mais mon ami m'a aussi montré le travail préalable qu'il réalise avant chaque début de chantier.

    Nous avons donc écrit ce que l'on voulait faire dans un document texte, et détaillé chaque élément avant de se lancer dans la progra :

    mon projet :

    besoin = un identificateur et une saisie clavier de l'utilisateur

    identificateur : affiche des messages en fonction de l'ID saisie
    quand la saisie correspond à l'ID prédéfini : message de succès
    quand la saisie ne correspond pas à l'ID prédéfini : message d'erreur

    saisie : la saisie est effectuée par l'utilisateur

    --------------------

    Classes candidates :
    - Identificateur
    - Saisie

    Description des classes :
    - Identificateur :
    Données : ID et MDP prédéfinis : Chaine de caractère : string
    Méthodes : Identifier :
    Paramètres entrant : Identifiant
    Paramètre sortant : Booléen : Vrai si la personne est connu par le système (identifié) sinon faux

    - Identifiant :
    Données : ID (string) , Mot de passe (string)
    Méthodes : DemanderIdentifiant :
    Paramètres entrant : void
    Paramètre sortant : void
    C'est un passage important selon lui, qui permet de clarifier précisément ce que l'on veut faire, les tâches et responsabilités que l'on veut affecter à chaque classe/objet.

    Ce fut très enrichissant pour moi ce premier pas dans la POO et je continue donc avec la notion d'héritage.

    Encore merci PixelJuice et sûrement à plus tard pour d'autres questions.

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

Discussions similaires

  1. Besoin d'aide pour garder un "referid=" dans mes URL
    Par gcvoiron dans le forum Langage
    Réponses: 4
    Dernier message: 21/05/2006, 16h17
  2. Besoin d'aide pour afficher une image dans un applet
    Par argon dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 19/01/2006, 19h45
  3. Besoin d'aide pour afficher du text dans un applet
    Par argon dans le forum Applets
    Réponses: 2
    Dernier message: 15/01/2006, 21h53
  4. Réponses: 3
    Dernier message: 05/12/2005, 02h30
  5. besoin d'aide pour intégrer une entité dans un MCD
    Par barkleyfr dans le forum Schéma
    Réponses: 17
    Dernier message: 13/10/2005, 13h29

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