POURQUOI CE BLOG, POUR QUI ?


POURQUOI CE BLOG, POUR QUI ?
Ce Blog s'adresse à tous ceux qui sont passionnés par les sciences informatiques , Professionnels,Etudiants,Amateurs ...
Les sujets exposés dans la suite se rapporteront essentiellement sur l'analyse informatique,la programmation,le développement ainsi que à l'architecture IT.
QUI SUIS JE ?
Je suis Kangulungu Lubilanji, Consultant-Freelance sur les technologies .NET,C#,ASP.NET ... Contactez moi pour plus d'informations.

La Programmation OO: Chapitre 14. Clonage, comparaison et assignation d'objets

 Chapitre 14. Clonage, comparaison et assignation d'objets
Ce chapitre va permettre, par l'entremise de la super-superclasse Object de comprendre comment l'installation en mémoire des objets et la définition de leurs relations aux autres objets sont déterminantes lors du clonage de ces objets, lors de leur comparaison deux à deux, et lors de l'affectation de l'un d'entre eux à un autre. 


La classe Object, en C#, non seulement toutes les classes mais également toutes les structures , héritent de la classe Object.
Une telle classe présente ce premier avantage que vous pouvez l'utiliser comme argument ou type de retour d'une méthode, que vous souhaitez à compétence universelle (pouvant s'opérer sur toute sorte d'objet), méthode que vous pourrez, par la suite, spécialiser selon le type d'objet en question. Cette classe Object est donc, le plus souvent, candidate à une utilisation de type « universelle ». Vous pouvez l'utiliser quand vous concevez un type de structure particulière, qui concerne tous les objets sans distinction de classe, comme une liste liée ou un tableau extensible.
En C#, toute une panoplie de classes collections fait largement usage de la classe Object. L'exemple le plus connu en est la classe ArrayList, tableaux extensibles, qui peuvent contenir un nombre indéterminé d'objets de toute classe.
ToString(), permet à l'objet de se présenter, tout en nous renseignant sur sa classe. Des méthodes comme GetType() en C# permettent également un  semblant d'introspection où l'objet, lui-même, peut informer celui qui le manipule sur la nature de sa classe et, par là même, obtenir toutes les informations désirées sur les méthodes ou les attributs qui caractérisent cette classe.

Comparaison d'objets, la version C# permet d'opter en redéfinissant la méthode Equals() et en définissant la méthode Clone().
Pour les structures, il n'y a pas lieu de s'occuper de surcharger quoi que ce soit en ce qui concerne l'assignation d'objets, puisque le fonctionnement par défaut est le seul que l'on puisse imaginer. L'assignation se fait d'office en suivant le fil des référents. Pour la comparaison, on peut soit surcharger les opérateurs de comparaison, soit redéfinir la méthode Equals() héritée de la superclasse Object. En effet, au même titre que les classes, les structures héritent également de la classe Object. C'est la seule classe dont elles peuvent hériter.
En général, C# vous incite à favoriser la redéfinition de la méthode Equals() par rapport à la surcharge d'opérateur. Même si vous avez surchargé les opérateurs appropriés, il vous avisera de redéfinir la méthode Equals() afin de pouvoir faire fonctionner la procédure de comparaison de manière polymorphique, vu que cette méthode provient de la classe Object. Vous ne pouvez, par ailleurs, pas surcharger l'opérateur == sans surcharger également son dual, l'opérateur !=. Si vous surchargez un opérateur logique, vous êtes contraint et forcé de surcharger son contraire.
Pour les classes, vous pouvez à nouveau utiliser la surcharge ou la redéfinition de la méthode  Equals() pour la comparaison. En revanche, la duplication d'un objet ne peut se faire qu'à l'aide de la méthode Clone(), vu l'impossibilité de surcharger l'opérateur d'affectation ou d'assignation. Cette dernière procède d'abord à une copie superficielle de l'objet, par l'entremise de la méthode MemberwiseClone(), héritée de la superclasse Object, puis crée un clone afin de reproduire l'attribut référent. La présence de MemberwiseClone() se justifie par l'impossibilité en C# de redéfinir une méthode définie comme protected dans la superclasse, en assignant à la version redéfinie une priorité d'accès plus large (public ici).


Aucun commentaire: