Le ramasse miette (
a- ou l'utilisation de smart pointer - ca revient au même)
b- est indirectement mais inéluctablement lié au concept de l'orienté objet.
c- Or l'orienté objet spécifie clairement qu'un objet peut à n'importe quel moment être de n'importe quelle taille - c'est parfaitement incompatible.
d- Prenons un exemple en langage Java. Imaginons des classes A et B qui ne sont pas de notre conception (pas de possibilité de les modifier). Une méthode de A prend comme argument un objet B, puis cette méthode appelle quelque méthodes de B. En Java, on peut si on le veut faire une classe dérivant de B, redéfinir ses methodes et passer un objet de cette nouvelle classe à la methode de A. Tout ca fonctionnera à tous les coups.
e- Par contre en C++... le nombre de conditions à remplir pour permettre ceci est faramineux. Il faut que toutes les méthodes qu'on veut redéfinir soient virtuelles, que la classe A n'aie pas la mauvaise idée de copier l'objet de B,... Autant dire qu'à moins que ce ne soit spécifié dans la doc c'est impossible.
f- Autre exemple: on démarre un projet, on se crée une petite classe qu'à priori on a pas l'intention de faire hériter, on en fait des copies par valeur ect... On passe deux mois à faire son applic puis on finit par se rendre compte qu'on doit faire une classe dérivée de notre petite classe, sauf qu'on en a déja fait une utilisation intensive partout dans le code. Il faut donc vérifier quasi tout son code pour être sur que ca colle bien à la nouvelle façon de s'en servir.
Ou alors on concoit direct toutes ses classes pour faire de l'héritage mais ca personne ne le fait jamais
g- Non, le C++ c'est du pseudo objet. Ca reste possible d'en faire mais c'est beaucoup trop intrusif. Ca n'en reste pas moins un langage interessant, pour d'autres raisons.
Partager