Pour moi lorsque une classe qui m'est fournie par un acteur du maché comme ceci.
1 2 3 4 5 6 7 8 9 10
| Class Toto {
private a;
private b;
public getA() {...};
public setA(a) {...};
public getB() {...};
public setA(b) {...};
} |
Je suis peut être un vieux con qui ne veux pas comprendre la conception, mais je n'ai pas le choix je NE PEUX PAS FAIRE
1 2 3 4 5
| obj = new Toto();
foreach (member : obj.getMembers()) {
// traitement sur un champ de l'objet
} |
C'EST le principe même de la POO à base de classe que de l'INTERDIRE.
du coup comme un con je dois faire pour chaque classes pour lequel je rencontre ce genre de difficultée.
1 2 3 4 5 6
| Map maMap = new MAP();
maMap.put("a", obj.getA());
maMap.put("b", obj.getB());
foreach (member : maMap) {
// traitement sur un champ de l'objet
} |
Et que vous preniez le problème par tout les bout lorsque la classe Toto NE VOUS APPARTIENT PAS et qu'elle à cette contrainte la seule et unique façon d'accéder à un membre c'est de passer par le getter. et c'est NORMAL vu que la POO à base de CLASSE a été concue pour ça.
Ce n'est pas un problème de conception c'est uin problème de langage.
Je pourais construire ma prope classe qui offre cette possibilité de parcour.
1 2 3 4 5 6 7 8 9 10
| Classe TotoBis {
Map maMap = new MAP();
TotoBis (Toto obj) {
maMap.put("a", obj.getA());
maMap.put("b", obj.getB());
}
Map getMembers() {...}
} |
Mais il suffit de regarder le code de cette classe pour comprendre que ça ne change rien à la donne. Il FAUT acéder aux getter l'or du DEV un à un pour allimenter la MAP.
La seule et unique façon de pouvoir accéder au membres de façon itérative est de CASSER ce modèle de la POO classique.
certain langages le permètent de façon plus où moins élégante. d'autre comme java propose l'introspection.
Je devrais revoir ma conception pour obtenir une classe à moi et Redévelopper moi même des librairies lourdes industrialisées, normalicée certifiées.
Puis il y a des langage qui CHOISSISSENT de ne surtout pas contraindre trop fortement les objets.
c'est UN CHOIX tout aussi RESPECTABLE que la POO à base de CLASSE STATIQUES.
Ce genre de situation qui pour vous est rarissime est mon lot quotidien. Dans un cas comme celui-ci répété à longueur de journée un langage plus souple est plus que bien venu c'est un gage de QUALITE, de ROBUSTESSE, d'EVOLUTIVITE, de PERENITE, c'est GAIN de TEMPS, d'ARGENT.
Et ça demande comme pour tous language de MAITRISER les capaciter de sont outil.
cela n'en fait ni un meilleur outil ni un moins bon. cela en fait un outil différent adapté à des usages différent. un outil capable de proposer des solution SIMPLE et ELEGANTE là où le typage fort et statique est INCAPABLE de proposer une solution.
Au même titre qu'il y a un besoin dans le web d'un langage plus structures pour faire des appli. il y a dans le monde des grand secteur d'activité où l'information déstructures est le meilleurs gage de succes. et pour ces activitées utiliser un lagage dont les concepts sont aussi souple que de l'information est déstructurée est une bénédiction.
A+JYT
Partager