Erf merci je l'avais pas vus :?
Version imprimable
Erf merci je l'avais pas vus :?
Puisque cela semble résolu, des commentaires.
J'ai l'impression que tu te poses des faux problèmes. Des problèmes certes qui existent dans l'absolu, mais pas dans ton problème précis.
P.ex. D'un point de vu fonctionnel, si tu passes par ton salaire pour modifier le nom de l'employé qui perçoit le salaire, tu as un sacré problème de conception.
De plus, deux personnes sont différentes. Toute personne est une entité unique. Deux personnes qui ont un même nom sont deux homonymes. Cela peut arriver. Tu les distingueras par autre chose (numéro d'employé, ...).
Du coup, cela veut dire deux choses :
- il n'y a pas grand intérêt à mettre en place des opérations qui permettent de copier des personnes : toute nouvelle personne peut (et doit! -- c'est tellement plus simple de la sorte) être créée avec un certain nombre de propriétés déjà initialisées et qui ne changeront jamais, ou presque, (numéro d'employé, nom-prénoms, status, contrat). Qui plus est, quand on commence à manipuler des personnes qui peuvent être ou non des salariés, ... l'héritage est tout proche, et du coup la copie à bannir. N'ayant pas grand intérêt (dans ces classes type qui ont une sémantique d'entité), inutile de se compliquer la vie et le code avec. Rends ta classe non copiable et passe tes paramètres par références (constantes si en lecture seule)
- Ton salaire, il va partir à une personne précise qui existe déjà, dont le nom est déjà connu, ... On peut même aller plus loin en exigeant qu'un salaire ait toujours une personne associée à laquelle il s'applique => pas de constructeur par défaut, mais un constructeur d'initialisation qui recevra une référence (au sens large) vers la personne "destinataire" du salaire.
Dernier truc, dans le cas particulier des gens, on peut effectivement changer leur nom tout en considérant la même personne -- mariage, adoption, ... Un mutateur sur le nom a du sens.
Dans beaucoup d'applications, on utilise des identifiants que l'on appelle simplement "nom" (voire "name" vu l'immense majorité des règles de codage industrielles). Ces noms sont connus au moment de la création de l'objet, et n'évoluent jamais. Il n'y a alors aucun intérêt à avoir des mutateurs triviaux qui servent à changer ces noms.
Il est vrai que le nom des classes sont relativement stupides au vus de la conception, mais à ma défense, les différentes classes que j'ai créé pour ce problème ne l'ont été que dans un but d'apprentissage, d'un point de vue technique du language.
J'aurais pus autant choisir des classses nommées X, Jean ou Paul, que cela n'aurait eu aucunes différences. Mais il est vrai que je devrais choisir d'autres noms, d'un coté pour expliquer mon problème et ainsi écarter tous problèmes de logique / conception et donc etre plus clair.
En tout cas merci à tous pour votre aide, pour ce que j'ai pus remarquer, du haut de mes deux jours d'expériences dans le C++, ben ca me parait assez différents d'autres languages. Enfin toujours du point de vue technique.
Mais il m'en reste encore bcp à apprendre.
PS : Cependant ta conception est très interessante, j'aurais fait certaines choses dans la meme optique pour le cas de ce genre d'appli, mais rajouter, en y réfléchissant, pas mal de chose inutile ( mutateur ).