Invité HAVOC Posté(e) le 26 octobre 2008 Share Posté(e) le 26 octobre 2008 J'ai une petite question en JAVA. Pour un petit projet initiatique en JAVA en demande de: Créer la class abonne possédant l' attribut entier id (identifiant de l'abonné) et l'attribut abonnement de type object Abonnement. Ma question est, comment créer un constructeur qui puisse vérifier si l'id entré en paramètre n'a pas déjà utilisé par un autre objet de la classe Abonné ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 26 octobre 2008 Share Posté(e) le 26 octobre 2008 (modifié) Salem, Tu ajoutes une propriété en Static que tu nommeras MaxID par exemple, cette entier étant déclaré en Static sera partagé par toutes les instances Abonnée donc lors de la création d'un Abonné tu incrémentes cette attribut, autrement dit on considérera que tout ce qui est inférieur à MaxID est un ID déjà attribué à un abonné. Bien sure si le ID est entré comme paramètre dans le constructeur tu peux faire appel à un objet Static du genre ArrayList qui contiendra tout les IDs occupés pour ne pas les répéter. J'espère que j'ai pas dit trop de conneries, je ne suis pas un JAVAiste Modifié le 26 octobre 2008 par mouradski Correction Ortho Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité HAVOC Posté(e) le 26 octobre 2008 Share Posté(e) le 26 octobre 2008 Salem, Tu ajoutes une propriété en Static que tu nommeras MaxID par exemple, cette entier étant déclaré en Static sera partagé par toutes les instances Abonnée donc lors de la création d'un Abonné tu incrémentes cette attribut, autrement dit on considérera que tout ce qui est inférieur à MaxID est un ID déjà attribué à un abonné. Bien sure si le ID est entré comme paramètre dans le constructeur tu peux faire appel à un objet Static du genre ArrayList qui contiendra tout les IDs occupés pour ne pas les répéter. J'espère que j'ai pas dit trop de conneries, je ne suis pas un JAVAiste Je suis plus pour une solution avec l'attribut arrayList en static, car l'utilisation d'un attribut maxId comme tu l'as défini n'est pas fiable, en effet, si tu créé l'abonné avec l'id de valeur 1 et un autre avec un id de valeur 3 ton maxId indiquera que les id de valeurs {1,2 ,3} sont pris hors que le 2 est libre, autrement dit, le maxId n'est pas fiable dans le cas de trous dans les id. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 26 octobre 2008 Share Posté(e) le 26 octobre 2008 (modifié) Je suis plus pour une solution avec l'attribut arrayList en static, car l'utilisation d'un attribut maxId comme tu l'as défini n'est pas fiable, en effet, si tu créé l'abonné avec l'id de valeur 1 et un autre avec un id de valeur 3 ton maxId indiquera que les id de valeurs {1,2 ,3} sont pris hors que le 2 est libre, autrement dit, le maxId n'est pas fiable dans le cas de trous dans les id. Pour la première solution c'est bien sure dans le cas ou le constructeur ne contient pas de paramètre ID et que son attribution sera automatisée dans le corps de la Méthode du constructeur. ....... // On matera MaxID en private pour pour éviter qu'on y touche et on laissera ce privilège // qu'au constructeur private static int MaxID; ....... public Abonnée(Abonnement Ab,......) // pas de "int ID" dans les params { ........ this.ID = ++MaxID; ........ // comme ça on aura même pas à faire des teste de redondance comme // dans les base de //données avec auto incrémentation } Donc c'est fiable et automatique et ça évitera plus de calcul et moins de ressource mémoire qu'une ArrayList. Modifié le 27 octobre 2008 par mouradski Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
amarsoft Posté(e) le 26 octobre 2008 Share Posté(e) le 26 octobre 2008 tu as un maxid et et une id if id=maxid+1 then (ton code1) ----else msg(êtes vous sur de vouloir entrer la valeur "id") ----------if ok then (ton code1) -------------else msg(il faut mette comme valeur "maxid+1") si tu veux un array alors c beaucoup plus compliquer que ça a demain Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
powerdev Posté(e) le 26 octobre 2008 Share Posté(e) le 26 octobre 2008 Salam, Je pense qu'il vaux mieux utiliser une hashTable, ou tu stock tes objets et la clé sera l'id, c'est plus facile a manipuler, et tu pourra même faire des recherches sur les objet suivant leur id Bonne chance Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité HAVOC Posté(e) le 26 octobre 2008 Share Posté(e) le 26 octobre 2008 Le souci c'est que la structure de l'object et les paramètres référentiels du constructeur me sont imposés. Je n'ai nullement le choix, je dois avoir un paramètre 'Id' de type int dans le constructeur de l'objet abonné. Je pense que c'est un projet très léger et qu'il n'y a pas à gérer le cas où l'Id utilisé serait déjà exploité. Arfff... je hais les énoncés à 2 balles qui ne sont ni claires ni complets. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 26 octobre 2008 Share Posté(e) le 26 octobre 2008 Arfff... je hais les énoncés à 2 balles qui ne sont ni claires ni complets. Wé c'est ceux qui complexent le plus, à la fin après avoir cru qu'on a une solution ultra sophistiquée, il s'avère que la solution était ultra simple et qu'il n'était nullement demandé de traiter tout les cas MAIS si on décide pour faire simple de ne traiter que ce qui a été explicitement demandé on se retrouve avec des remarques du genre "imaginez que.....alors......pour dire finalement que la solution était erronée" Tout ce speech pour dire que je crois que c'est plus des exos pour tester la réaction de l'étudiant à l'ambiguïté ou MDR un test inconito de recrutement au MIB Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Darkvader Posté(e) le 26 octobre 2008 Share Posté(e) le 26 octobre 2008 Le souci c'est que la structure de l'object et les paramètres référentiels du constructeur me sont imposés. Je n'ai nullement le choix, je dois avoir un paramètre 'Id' de type int dans le constructeur de l'objet abonné. Je pense que c'est un projet très léger et qu'il n'y a pas à gérer le cas où l'Id utilisé serait déjà exploité. Arfff... je hais les énoncés à 2 balles qui ne sont ni claires ni complets. Here you go, you solved yourself. je pense qu'il vaux mieux utiliser une hashTable, ou tu stock tes objets et la clé sera l'id, c'est plus facile a manipuler, et tu pourra même faire des recherches sur les objet suivant leur id [/Quote] I would use HashMap instead of hashtable for uniqueness and search. Hashtable has been replaced more or less by hashmap and hashset. those are my $0.02 and discussion is open. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
abderahime_13 Posté(e) le 6 décembre 2008 Share Posté(e) le 6 décembre 2008 Y a aussi une solution pro, tu peux utiliser le design pattern Singleton, Mais bref, réponse tardive ! c'est pas de rentrer dans les détails. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bassim Posté(e) le 6 décembre 2008 Share Posté(e) le 6 décembre 2008 Y a aussi une solution pro, tu peux utiliser le design pattern Singleton, Mais bref, réponse tardive ! c'est pas de rentrer dans les détails. non, désolé, t'es à coté de la plaque. Un singleton permet de ne créer qu'une seule instance d'une même classe. Or son problème ici, est qu'il veut empêcher la création de deux abonnés ayants le même id, mais rien ne t'empêche de créer deux instances ou + de la classe Abonne. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 7 décembre 2008 Share Posté(e) le 7 décembre 2008 +1 bassim les Designs Patterns sont des techniques pour maitriser une haute complexité d'un problème mais pour le faire il faut tout d'abord bien comprendre le problème Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
abderahime_13 Posté(e) le 7 décembre 2008 Share Posté(e) le 7 décembre 2008 non, désolé, t'es à coté de la plaque. Un singleton permet de ne créer qu'une seule instance d'une même classe. Or son problème ici, est qu'il veut empêcher la création de deux abonnés ayants le même id, mais rien ne t'empêche de créer deux instances ou + de la classe Abonne. Non et 3 milliards non , vous êtes tous les deux en dehors de ma plaque , je m'explique : Je crée une classe mère singleton, par exemple HomeSingleton, qui permettra de de créer des objets Abonnés avec leurs Abonnement, En gros, c'est exactement la solution des EJBs là : un Home ( mon singleton, qui s'appelle HomeAbonnés ) et des classes managées par ce dernier ... Voilà voilou Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bassim Posté(e) le 7 décembre 2008 Share Posté(e) le 7 décembre 2008 (modifié) EJB, Singleton, classes managés ,classe mère ... Il ne reste plus qu'à intégrer tout ça dans un serveur d'application et ça va exploser toute l'université. Voilà ta solution Havoc, c'était pourtant simple non ! Modifié le 7 décembre 2008 par bassim Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
abderahime_13 Posté(e) le 7 décembre 2008 Share Posté(e) le 7 décembre 2008 Ma dernière réponse était adressée à bassim et mouradski ! car je suis sur que HAVOC a déjà trouvé la solution ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité HAVOC Posté(e) le 7 décembre 2008 Share Posté(e) le 7 décembre 2008 ^^ C'était juste un petit TP d'une heure lol En faite ce qui me dérangeait avec la solution se basant sur une variable static (ou globale) est que après la fermeture du programme elle retrouve sa valeur d'initialisation ce qui n'est pas compatible avec une incrémentation automatique de l'ID de l'abonné, cela ne marche que si on ne ferme jamais son logiciel. Mais bon, comme c'était juste un petit TP je ne voulais pas de solution complexe. Cela dit, vos interventions enregissent le forum donc bonne continuation ;-) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 7 décembre 2008 Share Posté(e) le 7 décembre 2008 Salem, ^^ C'était juste un petit TP d'une heure lol En faite ce qui me dérangeait avec la solution se basant sur une variable static (ou globale) est que après la fermeture du programme elle retrouve sa valeur d'initialisation ce qui n'est pas compatible avec une incrémentation automatique de l'ID de l'abonné, cela ne marche que si on ne ferme jamais son logiciel. Mais bon, comme c'était juste un petit TP je ne voulais pas de solution complexe. Cela dit, vos interventions enregissent le forum donc bonne continuation ;-) Je sais que c'est juste un petit tp mais jpeux pas m'empêcher pour le problème de la volatilité de la donnée MaxID, suffit simplement de sauvegarder cette donnée ou même le tout sur une BD ou fichier, les infos seront repris au démarrage de l'application (lol) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité HAVOC Posté(e) le 7 décembre 2008 Share Posté(e) le 7 décembre 2008 Salem, Je sais que c'est juste un petit tp mais jpeux pas m'empêcher pour le problème de la volatilité de la donnée MaxID, suffit simplement de sauvegarder cette donnée ou même le tout sur une BD ou fichier, les infos seront repris au démarrage de l'application (lol) Oui tout ça fait... mais les accès aux BD et l'écriture dans un fichier c'est encore autre chose ^^ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bassim Posté(e) le 7 décembre 2008 Share Posté(e) le 7 décembre 2008 Oui tout ça fait... mais les accès aux BD et l'écriture dans un fichier c'est encore autre chose ^^ Dans ce cas, c'est impossible à implémenter ton programme A partir du moment où on a besoin de stocker une information, la RAM n'est pas le meilleur endroit pour le faire. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mouradski Posté(e) le 7 décembre 2008 Share Posté(e) le 7 décembre 2008 Dans ce cas, c'est impossible à implémenter ton programme A partir du moment où on a besoin de stocker une information, la RAM n'est pas le meilleur endroit pour le faire. mwé, on dérive grave vers une application base de données Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité HAVOC Posté(e) le 7 décembre 2008 Share Posté(e) le 7 décembre 2008 mwé, on dérive grave vers une application base de données Oui mais c'est pour ça que je trouve un coté stupide à ce genre de TP bien que l'objectif soit d'acquérir des connaissances de base. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
abderahime_13 Posté(e) le 8 décembre 2008 Share Posté(e) le 8 décembre 2008 C'est sympa d'avoir de connaissance de base en base de données : select from where ... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité HAVOC Posté(e) le 8 décembre 2008 Share Posté(e) le 8 décembre 2008 C'est sympa d'avoir de connaissance de base en base de données : select from where ... Ben les BD ça fait ricaner beaucoup d'étudiants mais à un certain niveau cela devient moi facile, surtout quand on passe au stade de l'optimisation des requêtes avec toutes les règles à respecter et les contraintes...etc. Bref, c'est intéressant ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
zaki Posté(e) le 10 décembre 2008 Share Posté(e) le 10 décembre 2008 l'année passée j'ai eu 7/20 au controle de BD Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.