Question

J'ai récemment posé une question sur ce que j'appelle les « appels de méthode ».La réponse faisait référence à des "messages".En tant que programmeur amateur autodidacte essayant de formuler des questions qui ne me font pas passer pour un idiot, je me rends compte que la terminologie que j'utilise en dit long sur la façon dont j'ai appris à programmer.

Existe-t-il une distinction entre les différents termes pour méthodes/messages/etc.en programmation OO ?Est-ce une différence qui vient du fait que différents langages de programmation utilisent une terminologie différente pour décrire des concepts similaires ?

Il me semble que dans les langages pré-OO, une distinction était parfois faite entre les « sous-programmes » et les « fonctions » selon qu'une valeur de retour était attendue, mais même dans ce cas, s'agissait-il d'une distinction langue par langue ?

Était-ce utile?

La solution

J'ai trouvé que c'était une question de langage et de paradigme de programmation.Un paradigme - POO - fait référence aux objets avec des méthodes membres, qui représentent conceptuellement la manière dont vous envoyez des messages à ces objets (cette vue se reflète dans UML, par exemple).

Un autre paradigme – fonctionnel – peut impliquer ou non des classes d'objets, mais les fonctions sont l'unité atomique de travail.

Dans la programmation structurée, vous aviez des sous-routines (notez que le préfixe « sub » implique une structure).

Dans la programmation impérative (qui recoupe beaucoup la programmation structurée, mais une façon légèrement différente de voir les choses), vous avez une vision plus formelle du monde, et donc les « fonctions » représentent une opération (souvent mathématique).

Tout ce que vous avez à faire pour ne pas ressembler à un rube est d'utiliser la terminologie utilisée par la langue de référence pour la langue que vous utilisez.

Autres conseils

Message!=Méthode!=fonction

en POO différent objets peut-être différent méthodes lié au même message.

Par exemple:le message "faire pivoter à gauche de n degrés" serait implémenté différemment par différents objets tels que la forme, le cercle, le rectangle et le carré.

Messages:Les objets communiquent par messages.

-Les objets envoient et reçoivent des messages.

-la réponse à un message exécute une méthode.

-la méthode à utiliser est de déterminer si le destinataire est au moment de l'exécution.

En C++, les méthodes et les messages sont appelés membres de fonction.

Je crois message est utilisé dans le smalltalk.

Java, C#, etc.ont tendance à utiliser méthode ou méthode d'instance.

J'en suis presque sûr (mais un rapide Wikipédia check semble le confirmer) que la terminologie « transmission de messages » vient de la communauté Smalltalk.Je pense que c'est plus ou moins équivalent à un appel de méthode.

Le terme « Message » peut faire référence à l'envoi d'un message à un objet, ce qui est pris en charge dans certains langages de programmation et pas dans d'autres.

Si l'objet prend en charge le message, il exécutera du code.Sinon, il l'ignorera simplement.Il s'agit d'une approche plus dynamique qu'un appel explicite de fonction/méthode où l'objet doit prendre en charge cette fonction.

Objective-c, je crois, utilise cette approche de messagerie.

Dans les implémentations orientées objet comme C#, le concept de « message » n’existe pas vraiment en tant que construction de langage explicite.Vous ne pouvez pas regarder un morceau de code en particulier et dire « voilà le message ».

Au lieu de cela, une méthode de la classe d'un objet implique l'idée que d'autres objets peuvent envoyer un type de message qui déclenche le comportement au sein de cette méthode.Vous finissez donc par spécifier directement la méthode, plutôt que d'envoyer un message.

Avec d'autres implémentations comme Smalltalk, vous pouvez voir le message transmis et l'objet récepteur a la capacité de faire ce qu'il veut avec ce message.

Il existe des bibliothèques situées au-dessus de langages tels que C# qui tentent de restaurer la sensation de transmission de messages explicites au langage.J'en ai concocté un moi-même pour m'amuser ici : http://collaborateframework.codeplex.com/

Je ne suis pas sûr de l'origine de message terminologie.Le plus souvent je rencontre messages dans la conception UML.Les objets (acteurs dans la terminologie UML) peuvent communiquer entre eux au moyen de messages.Dans le code du monde réel message est juste un appel de fonction en général.Je considère le message comme une tentative de communication avec un objet.Il peut s'agir d'un message réel (comme les messages dans le système d'exploitation) ou d'appels de fonction.

Habituellement, « Méthode » semble être le nom propre des fonctions.Cependant, chaque langue possède ses propres mots-clés.Delphi par exemple fait même une différence entre les méthodes qui renvoient quelque chose ("Fonctions") et les méthodes qui ne renvoient rien ("Procédures") alors que dans les langages de type C, il n'y a aucune différence.

Voici quelques définitions simplifiées :

méthodes/sous-programmes/vides :effectuer une action

les fonctions:effectuer une action et renvoyer une valeur

événements:sont appelés lorsqu'un objet subit une action

gestionnaires :sont les fonctions/méthodes qui gèrent les événements


PS :c'est un exemple parfait de la raison pour laquelle SO devrait prendre en charge les balises DL/DT/DD.

Je crois que c'est une question de préférence à ce stade.Les mots que vous mentionnez sont essentiellement des synonymes dans les langues d'aujourd'hui et pour la plupart, les gens comprendront ce que vous voulez dire si vous dites « méthode » ou « fonction ».Si vous utilisez « message », qui n'est utilisé réellement qu'en POO, vous risquez de confondre ce que vous essayez de transmettre. Par exemple :"J'ai besoin de créer un message pour envoyer un e-mail." D'autres termes qui pourraient être synonymes, et ce n'est pas une liste complète, sont le sous-programme, l'action, la procédure, le fonctionnement (bien que généralement de nature mathématique), les sous-programmes, la commande ...

méthode :similaire à la fonction dans les langues traditionnelles

message :similaire au passage de paramètres dans le langage traditionnel

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top