3 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
29 mai 2013 à 20:45
29 mai 2013 à 20:45
this.getClass()==Client.class, pour comparer deux objets utilises la méthode equals, mais sinon ici on peux faire plus simple avec instanceof
Cependant, ceci est une mauvaise idée, car cela signifie que ta classe Utilisateur est obligée de connaitre la liste exhaustive de ses classes filles au moment du développement, ce qui n'est pas correct. S'il est nécessaire plus tard d'étendre un troisième type d'Utilisateur, il faudra alors modifier encore la classe Utilisateur, c'est contraire à l'esprit de la programmation objet.
Il vaudrait mieux redéfinir pour chaque classe fille, soit la méthode inscription, soit une méthode auxiliaire utilisée par la méthode inscription, je ne sais pas ce qui est le mieux il faudrait voir ce que tu veux faire avec ton inscription.
public void inscription(Database db, ArrayList<?> o) { if (this instanceof Client) Client clt = (Client) this; else if (this instanceof Gestionnaire) Gestionnaire gest = (Gestionnaire) this; }
Cependant, ceci est une mauvaise idée, car cela signifie que ta classe Utilisateur est obligée de connaitre la liste exhaustive de ses classes filles au moment du développement, ce qui n'est pas correct. S'il est nécessaire plus tard d'étendre un troisième type d'Utilisateur, il faudra alors modifier encore la classe Utilisateur, c'est contraire à l'esprit de la programmation objet.
Il vaudrait mieux redéfinir pour chaque classe fille, soit la méthode inscription, soit une méthode auxiliaire utilisée par la méthode inscription, je ne sais pas ce qui est le mieux il faudrait voir ce que tu veux faire avec ton inscription.
Merci pour ta réponse.
Effectivement, le instanceof... je ne sais pas pourquoi je n'y ai pas pensé, j'ai l'habitude de l'utiliser.
Avec ma méthode inscription, je voudrais faire une requête SQL qui enregistre l'utilisateur dans la base de donnée. Il faut savoir que j'ai créé une table "Utilisateur" qui selon le type d'objet qu'on y enregistre, prends un type "client" ou "gestionnaire". Le deuxième but de la fonction est d'ajouter l'utilisateur à une liste de client ou une liste de gestionnaire chargée en mémoire.
Je comprends bien ce que tu veux dire et c'est vrai que ce n'est pas très joli de devoir connaître la liste des classes. Du coup, je pense que je vais redéfinir les méthodes dans les classes dérivées.
Effectivement, le instanceof... je ne sais pas pourquoi je n'y ai pas pensé, j'ai l'habitude de l'utiliser.
Avec ma méthode inscription, je voudrais faire une requête SQL qui enregistre l'utilisateur dans la base de donnée. Il faut savoir que j'ai créé une table "Utilisateur" qui selon le type d'objet qu'on y enregistre, prends un type "client" ou "gestionnaire". Le deuxième but de la fonction est d'ajouter l'utilisateur à une liste de client ou une liste de gestionnaire chargée en mémoire.
Je comprends bien ce que tu veux dire et c'est vrai que ce n'est pas très joli de devoir connaître la liste des classes. Du coup, je pense que je vais redéfinir les méthodes dans les classes dérivées.
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
30 mai 2013 à 05:54
30 mai 2013 à 05:54
S'il n'y a que la requête qui change il suffit de redéfinir une méthode auxiliaire qui te renvoie juste la requête qu'il faut pour faire ton inscription.
Exemple :
Exemple :
public abstract class Utilisateur extends Personne { protected abstract String requete(); public void inscription(Database db, ArrayList<?> o) { String req = requete(); ... } } public class Client extends Utilisateur { protected String requete() { return "insert into 'Client' values ..."; } } public class Gestionnaire extends Utilisateur { protected String requete() { return "insert into 'Gestionnaire' values ..."; } }