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

 Java Discussion :

Programme de gestion d'utilisateurs


Sujet :

Java

  1. #1
    Candidat au Club
    Programme de gestion d'utilisateurs
    Bonjour je suis débutant et ça risque de piquer aux yeux de tout les vrai programmateurs désolé par avance ;-)
    Je dois modifier ce programme afin de référencer des utilisateur et ensuite faire un code pour ajouter et supprimer un utilisateur est ce que quelqu'un peut m'aider merci
    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
    public class FakeApiService implements ApiService {
     
        private List<User> users = generateUsers();
     
        /**
         * Return a list of {@link User}
         * Those users must be generated by {@link FakeApiServiceGenerator}
         */
        @Override
        public List<User> getUsers() {
     
            public static ArrayList Users {FakeApiServiceGenerator}
            public static <T extends Truc> ArrayList<T>FakeApiServiceGenerator() {     //<-- le code que j'ai écrit pour recenser les utilisateurs 
                ArrayList<T> resultat = new ArrayList<>();
                return resultat;
     
            }
     
        // TODO: A modifier
     
    }
     
        /**
         * Generate a random {@link User} and add it {@link FakeApiService#users} list.
         * This user must be get from the {@link FakeApiServiceGenerator#FAKE_USERS_RANDOM} list.
         */
        @Override
        public void generateRandomUser() {
            // TODO: A modifier
        }
     
        /**
         * Delete a {@link User} from the {@link FakeApiService#users} list.
         */
        @Override
        public void deleteUser(User user) {
            // TODO: A modifier
        }
    }

  2. #2
    Modérateur

    Salut,

    Normalement, il faudrait être plus précis dans ta demande... dire ce que tu n'arrives à faire précisément, poser une question précise sur la syntaxe Java ou l'usage d'une classe du JDK, nous dire que tu as une erreur quelque part que tu n'arrives pas à corriger, et laquelle.

    Je vais te guider un peu. Il semble que tu aies trois ou quatre méthodes à implémenter, dont trois à priori sont définies dans l'interface ApiService, et une qui me semble de ton cru :

    1. generateUsers() qui devrait générer une liste d'utilisateurs (qui va servir à initialiser la liste d'utilisateurs gérées par le FakeApiService)
      mais je me demande si ce n'est pas du code que tu as ajouté toi, parce que ce n'est pas cohérent avec la méthode generateRandomUser()
    2. getUsers() qui doit retourner une liste d'utilisateurs
    3. generateRandomUser() qui doit générer un utilisateur aléatoirement (avec des données aléatoires) et l'ajouter dans la liste d'utilisateurs.
    4. deleteUser(User) qui doit supprimer de la liste d'utilisateurs l'utilisateur spécifié en argument


    Il semble que tu aies tenté d'écrire quelque chose :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static ArrayList Users {FakeApiServiceGenerator}
            public static <T extends Truc> ArrayList<T>FakeApiServiceGenerator() {     //<-- le code que j'ai écrit pour recenser les utilisateurs 
                ArrayList<T> resultat = new ArrayList<>();
                return resultat;
     
            }


    Donc en gros une méthode static FakeApiServiceGenerator qui retourne à chaque appel une liste vide d'instance de classe qui étende Truc.
    Et ce truc : public static ArrayList Users {FakeApiServiceGenerator} qui est n'importe quoi (une sorte de mélange entre plusieurs machins qui de toute manière n'est pas syntaxiquement correcte.

    Normalement, mise à part une déclaration et initialisation de variable pour stocker les utilisateurs (une List), tu n'es à priori pas censé écrire quelque chose dans le corps de la classe d'autres que les trois méthodes de l'interface.

    As-tu remarqué qu'il y avait une variable dans ta classe :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    private List<User> users = generateUsers();

    La valeur de cette variable est censé être initialisée par la méthode generateUsers(). Cette méthode doit d'abord être déclarée, sinon elle n'existe pas, et donc ne peut être appelée. Elle doit créer une ArrayList et à priori ajouter des utilisateurs, donc je suppose qu'ils doivent être générés par la méthode generateRandomUser(). Donc il va falloir appeler un certain nombre de fois cette méthode (je ne sais pas si ton énoncé donne le nombre d'utilisateurs que cette liste est censée contenir, ou si ce nombre doit être aléatoire, mais gros le principe est le même. Un for, un appel de generateRandomUser() à chaque itération pour ajouter un nouveau user dans la liste.
    On voit qu'il y a un problème parce que la méthode generateRandomUser() ajoute les users dans la liste d'utilisateurs. Elle doit donc exister et donc ne peut être construite dans une méthode qui appelle generateRandomUser().
    En résumé, il faut plutôt que la variable users soit déclarée comme ça :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    private List<User> users = new ArrayList();

    Mais avec un tel code, on ne remplit pas la liste. Il faut un code qui appelle generateRandomUser() un certain nombre de fois. Dans le constructeur par exemple.


    Pour getUsers(), c'est le plus simple. Cette méthode retourne la liste d'utilisateurs gérés par le service. Il suffit donc de retourner users.

    Pour generateRandomUser(), je ne sais pas quelles sont les informations d'un User, mais en gros, il s'agit de créer une instance de classe User et de lui affecter les informations nécessaires. Puis de l'ajouter la liste users, par la méthode List::add.

    Et pour deleteUser(User), le principe est simplement de le supprimer de la liste users, avec la méthode List::remove. Ce qui implique que les méthodes hashCode et equals de la classe User soient correctement implémentées (pour que le bon user soit retrouvé dans la liste).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Merci du temps que tu passe pour m'aider
    Bonjour, merci de ta réponse désolé je ne suis pas encore familiarisé avec le langage.
    pour bien comprendre je met l'exercice complet en faite pour le premier je dois créer une liste qui permet de lister les utilisateur Github et ensuite mettre une fonction qui permette d'ajouter et une de supprimer un utilisateur.
    Je dois utiliser ApiService et faire que les Utilisateurs soit générés par FakeApiservice. pour moi j'ai pensé qu"il fallait que je face une liste et faire un méthode récursive mais je n'arrive pas à faire l'appel correctement je te met l'exercice avec le lien de l'application merci encore de ton aide.


    Scénario
    Félicitations ! C’est votre premier jour en tant que développeur Android junior dans une grande entreprise, OCompany, dont le cœur de métier est la création de sites web personnalisés pour les petites et moyennes entreprises.

    O'Company
    O'Company


    Sous la responsabilité de Matthieu, le CTO de l’entreprise, vous avez été embauché afin de remplacer le développeur actuel, Brice, parti un an en congé sabbatique pour faire le tour du monde à bicyclette. Avant de partir, il avait commencé à réaliser une application mobile. Son idée était de lister les utilisateurs de GitHub, une plateforme qui permet d'héberger des projets de développement et de les partager facilement. Il n’a cependant pas pu terminer.

    Matthieu vous fait un état des lieux.

    Description

    Nom de l’application : MagIC Github
    Fonctionnalité : lister des utilisateurs inscrits sur GitHub
    Tests unitaires : créés (UserRepositoryTest)
    Tests d’intégration : créés (UserListInstrumentedTest)
    État des tests : échec
    Langage utilisé et à utiliser : Java
    À faire

    faire passer les tests existants au vert en modifiant uniquement le code source ;
    développer les fonctionnalités que Brice n’a pas eu le temps de faire, à savoir supprimer un utilisateur et ajouter un utilisateur aléatoire (des TODO sont dans le code).

    Mock-up de l'application



    MagicGithub
    MagicGithub



    Code de l'application

    À télécharger https://github.com/PhilippeBoisney/O...ne_application
    Livrables
    Pour ce projet, vous fournirez un dossier compressé en ZIP contenant :

    les 2 rapports d'exécution (unitaire et instrumentalisé) des tests initiaux (qui doivent indiquer que les tests échouent) au format HTML ;
    les 2 rapports d'exécution (unitaire et instrumentalisé) des tests finaux (qui doivent indiquer que les tests réussissent) au format HTML ;
    le lien GitHub contenant le code de l'application. Celle-ci doit s’exécuter et compiler.

  4. #4
    Modérateur

    La méthode generateUsers vient en fait d'une abstraction, FakeApiServiceGenerator, qui est importé en static via :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    import static com.openclassrooms.magicgithub.api.FakeApiServiceGenerator.generateUsers;


    Cette abstraction fournit en plus deux listes :
    1. une liste d'utilisateurs qui sert pour initialiser la liste d'utilisateurs du FakeApiService
    2. une liste d'utilisateurs qui doit servira pour générer aléatoirement un utilisateur


    Donc, pour résumé, et repréciser ce que j'ai déjà écrit, et qui d'ailleurs est en clair dans les commentaires des méthodes, tu as les trois méthodes de l'interface ApiService à implémenter :
    1. List<User> getUsers();

      qui doit retourner la liste d'utilisateurs, donc la variable users de FakeApiService
    2. void generateRandomUser();

      qui doit choisir au hasard un utilisateur dans FakeApiServiceGenerator.FAKE_USERS_RANDOM et l'ajouter dans la liste.
    3. void deleteUser(User username);

      qui doit supprimer un utilisateur se trouvant dans la liste


    Par ailleurs, le point important est d'écrire des classes de tests unitaires de cette implémentation.

    Qu'est-ce qui te bloque en particulier là-dedans ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Candidat au Club
    Bonjour
    Bonjour en faite quand j'écrit mon code sur le coté il m'écrit Récursive Call donc me manque t'il un méthode récusive? voici mon code quand je ne met pas de parenthèse à getUsers() il ne le prend pas en compte
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     @Override
        public List<User> getUsers() {
                // TODO: A modifier
            List<users>(getUsers());
            return users;

  6. #6
    Modérateur

    Bonjour,

    Pour retourner la liste de User, soit ce qui est référencé par la variable (d'instance) users, il suffit d'écrire :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
    public List<User> getUsers() {
        return users;
    }


    A quoi est censé servir cette ligne : List<users>(getUsers());

    Si une instruction commence par un type, comme List<users>, c'est qu'on veut déclarer une variable, ici de type List de users (ce qui entre chevrons). La classe c'est User déjà, pas users. users c'est une variable. On voit d'ailleurs que le type de retour de la méthode est List<User> et que dans le corps de la classe la variable users est déclarée par private List<User> users = generateUsers();. Pourquoi utiliser une autre façon que List<User> ?

    En plus, il est inutile de déclarer une variable ici, puisqu'elle existe déjà (en tant que variable d'instance). On peut écrire :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Override
    public List<User> getUsers() {
        List<User> users = this.users;
        return users;
    }

    Mais c'est écrire du code qui ne sert à rien.

    Citation Envoyé par Steeve2911 Voir le message
    il m'écrit Récursive Call donc me manque t'il un méthode récusive?
    C'est surtout que tu as écrit dans ta méthode getUsers() un appel à getUsers(), en simplifié en enlevant le type List<users> :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Override
    public List<User> getUsers() {
        [highlight]getUsers()[/highlight];
        return users;
    }

    Ce qui signifie que quand on éxécute getUsers(), on appelle getUsers(), donc on l'exécute, donc on appelle à nouveau getUsers(), donc on recommence, comme ça, en boucle à l'infini, enfin jusqu'à ce qu'on pète la pile, parce que limitée en taille, en obtenant une StackOverflowError. Le compilateur t'avertit juste que tu as écrit quelque chose qui est forcément une erreur, parce que ça plantera forcément.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Candidat au Club
    Merci du temps que tu passe pour m'aider
    Bonjour, merci pour t'es précieux renseignements et très précis en plus. ;-)
    Je vais essayer de me débrouiller pour faire l'ajout et le supprime je te remercie encore du temps que tu as passé à me réponde. Bonne fête de fin d'année.