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 6. Méthodes ou message ?

Chapitre 6.  Méthodes ou message ?
Ce chapitre aborde de manière plus technique les mécanismes d'envoi de message. Les passages d'argument par valeur ou par référence, qu'il s'agisse de variables de type prédéfini ou de variables d'objet. La différence entre un message et une méthode est précisée. La notion d’interface et le fait que les messages puissent circuler à travers Internet sont, à ce stade, simplement évoqué.


Passage d'arguments prédéfinis dans les messages, Pour Envoyer un bon message, procédez avec méthode. En effet, les objets communiquent par envois de message, lorsqu'un objet passe la main à un  autre, afin qu'une méthode s'exécute sur ce dernier. Lors de son exécution, comme en programmation classique, la méthode peut recevoir des arguments. Ces arguments seront utilisés dans son corps d'instruction . Ces arguments, tout comme lorsqu'on déclare une fonction mathématique f(x), permettent d'affiner ou de calibrer le comportement de la méthode, en fonction de la valeur de l'argument passé. Considérons à nouveau la déclaration de la méthode jeTravaillePour02(int x)  de la classe 02, mais qui cette fois, prévoit de recevoir un argument de type entier : « x ». Cette méthode peut être activée par un message, comme dans l'exemple suivant :
class 01{
    02 lien02 ;
    void jeTravaillePour01() {
       int b = 5;
       lien02.jeTravaillePour02(b) ;
    }
}
class 02{
    02 lien02 ;
    void jeTravaillePour02(int x) {
       ....
    }
}
Rien de particulier n'est à signaler. Ajoutons maintenant, que la méthode jeTravaillePour02(int x) modifie l'argument qu'elle reçoit. La variable locale b, créée dans la méthode  jeTravaillePour01(), et passée comme argument du message jeTravaillePour02(b), en général, un passage d’argument s'effectue de manière préférentielle « par valeur ». On  entend par là la création d'une valeur temporaire x, recopiée de l'originale, qui recevra, le temps de l'exécution de la méthode, la même valeur que la valeur transmise, et disparaîtra à la fin de cette exécution. La seule variable de départ b est laissée complément inchangée, seule la copie est affectée. L'exécution de la méthode s'accompagne, d'une petite mémoire pile, dont le temps de vie est celui de cette exécution, pas une seconde de plus. Si une méthode en appelle une autre dans le corps d'instruction, les nouvelles variables propres à cette deuxième méthode se placeront dans la pile au dessus de celles concernant la méthode appelante.

Nous avons dans le code C# suivant, déclaré deux fois la méthode jeTravaillePour02(int x), la première fois, normalement, la seconde fois en spécifiant que nous voulions effectuer le passage d'arguments par référent. Nous utilisons ici le mécanisme de surcharge. Dans le second cas, ce n'est plus la valeur de la variable que nous passons, mais bien une copie de son référent qui, tout comme le référent d'un objet, contient l'adresse de la variable. En modifiant cette variable, on modifiera cette fois la valeur contenue à cette adresse, en conséquence, la variable de départ elle-même. 
class 01{
    02 lien02 ;
    void jeTravaillePour01() {
       int b = 5;
       lien02.jeTravaillePour02(b) ;
       lien02.jeTravaillePour02( ref b) ;  /* observez bien l'addition du mot-clé ref */
    }
}
class 02{
    02 lien02 ;
    void jeTravaillePour02(int x) {
       ....
    }
    void jeTravaillePour02( ref int x) { /* observez bien l'addition du mot-clé ref */
       ....
    }
}

Passage par valeur ou par référent, en ce qui concerne le passage d'argument de type prédéfini, le passage par valeur aura pour effet de passer une copie de la variable et laissera inchangée la variable de départ, alors que le passage par référent passera la variable originale, sur laquelle la méthode pourra effectuer ses manipulations.

Une méthode est-elle d'office un message ? Nous avons vu que message il  y a quand une méthode intervient dans l'interaction entre deux objets. Les concepts de message et de méthode deviennent-ils dès lors synonymiques ? Pas vraiment et ce pour plusieurs raisons. Le message ramène la méthode à sa seule signature. Pour qu'un objet s'adresse à un autre, il doit uniquement connaître la signature de la méthode, et peut se désintéresser complètement du corps de cette dernière. Ce qu'il doit connaître de la méthode, c'est son mode d'appel, c'est à dire : son nom, ses arguments et le type de ce que la méthode retourne, pour autant qu'elle retourne quelque chose.
Même message, plusieurs méthodes, le fait de tenir la signature séparée du corps de la méthode permet aussi de prévoir plusieurs implémentations possible pour un même message, implémentations qui pourraient, ou évoluer dans le temps, sans que le message lui-même ne s'en trouve affecté, ou, toujours plus fort, qui pourraient différer, selon la nature ultime de l'objet à qui le message est destiné. 
Message = signature de méthode disponible, le message se limite uniquement à la signature de la méthode : le type de ce qu'elle retourne, son nom et ses arguments. En aucun cas, l'expéditeur n'a besoin, lors de l'écriture de son appel, de connaître son implémentation ou son corps d'instructions. Cela simplifie la conception et stabilise l'évolution du programme.

Interface : liste de signatures de méthodes disponibles,toutes les signatures de méthodes ne deviendront pas des messages pour autant. Nous expliquerons par la suite la pratique de «  l'encapsulation  », qui n'octroie qu'à un nombre restreint de méthodes la possibilité d'être appelée de l’extérieur. L'idée est de pouvoir extraire de la définition de chaque classe la liste des signatures de méthode qui pourront faire l'objet d'envoi de messages. De manière quelque peu anticipée, nous appellerons cette liste l'interface de la classe, car il s'agit de la partie visible de la classe, seule disponible pour des utilisateurs extérieurs. Dans la figure ci-dessous vous observez l'extraction, à partir de la définition des classes, des seules méthodes qui pourront faire des messages.
Pour l'instant, le seul point à retenir est que chaque objet se caractérise par une liste de messages disponibles, son interface, que d'autres pourront déclencher sur lui. Dorénavant, ce sera l'interface, plus que la classe directement, qui reprendra les services que l'objet sera en mesure de rendre à tout autre. Les objets sont d'une pudeur extrême et ne montre que leur interface aux autres objets. Pourquoi extraire de la classe cette seule partie visible ? Car il n'est pas nécessaire pour un premier objet, utilisant les méthodes du second, d'avoir accès à toutes ces méthodes, surtout si celles-ci risquent d'évoluer au cours du temps. Certaines relèvent du fonctionnement interne et intime de l'objet, et ne peuvent être actionnées que par l'objet lui-même.
Interface, la liste des messages disponibles dans une classe sera appelée l'interface de cette classe.
La mondialisation des messages, messages sur Internet, un message se limite-t-il à circuler dans la mémoire vive de l'ordinateur, ou peut-il franchir les murs, les frontières, les océans, les planètes et les univers... Oui il peut et bien plus encore, pour autant qu'il trouve là-bas un objet à qui s'adresser, et qui a prévu, là-bas, de par sa classe, de pouvoir répondre à ces messages. Il existe une manière répandue aujourd'hui pour relier des objets informatiques entre eux ! Internet. Deux objets pourront se charger mutuellement de certains services. Pour qu'un premier objet parle à un second, il lui sera maintenant important de connaître, non seulement son nom, mais également son adresse Internet, de manière à retrouver l'ordinateur sur lequel cet objet s'activera.

L'informatique distribuée, les objets distribués, les technologies d'objets distribués tentent d'étendre à tout internet la portée des envois de message entre objets, et ce de la manière la plus simple et transparente qui soit.

Aucun commentaire: