Pregunta

Recientemente hice una pregunta sobre lo que llamé "llamadas a métodos".La respuesta se refería a "mensajes".Como programador aficionado autodidacta que intenta formular preguntas que no me hagan parecer un idiota, me doy cuenta de que la terminología que uso revela mucho sobre cómo aprendí a programar.

¿Existe una distinción entre los distintos términos para métodos/mensajes/etc.en programación OO?¿Es esta una diferencia que proviene de diferentes lenguajes de programación que utilizan terminología diferente para describir conceptos similares?

Creo recordar que en los lenguajes anteriores a OO, a veces se hacía una distinción entre "subrutinas" y "funciones" en función de si se esperaba un valor de retorno, pero incluso entonces, ¿era esta una distinción idioma por idioma?

¿Fue útil?

Solución

Descubrí que esto es una cuestión de lenguaje y paradigma de programación.Un paradigma, la programación orientada a objetos, se refiere a objetos con métodos miembro, que conceptualmente son la forma en que se envían mensajes a esos objetos (esta vista se refleja en UML, por ejemplo).

Otro paradigma, el funcional, puede implicar o no clases de objetos, pero las funciones son la unidad atómica de trabajo.

En la programación estructurada, había subrutinas (observe que el prefijo "sub" implica estructura).

En la programación imperativa (que se superpone bastante con la estructurada, pero con una forma ligeramente diferente de ver las cosas), se tiene una visión más formulada del mundo, por lo que las "funciones" representan alguna operación (a menudo matemática).

Todo lo que tienes que hacer para no parecer un idiota es usar la terminología utilizada por la referencia del idioma para el idioma que estás usando.

Otros consejos

¡Mensaje!=Método!=función

en programación orientada a objetos diferente objetos puede tener diferentes métodos ligado al mismo mensaje.

Por ejemplo:el mensaje "girar a la izquierda n grados" se implementaría de manera diferente según diferentes objetos, como forma, círculo, rectángulo y cuadrado.

Mensajes:Los objetos se comunican a través de mensajes.

-Los objetos envían y reciben mensajes.

-la respuesta a un mensaje es ejecutar un método.

-El método a utilizar es determinar si será el receptor en tiempo de ejecución.

En C++ se llaman métodos y mensajes. miembros de la función.

Yo creo mensaje se utiliza en conversaciones triviales.

Java, C#, etc.tienden a usar método o método de instancia.

Estoy bastante seguro (pero un rápido Wikipedia check parece confirmar esto) que la terminología de "transmisión de mensajes" proviene de la comunidad Smalltalk.Creo que es más o menos equivalente a una llamada a un método.

El término "Mensaje" puede referirse al envío de un mensaje a un objeto, que es compatible con algunos lenguajes de programación y no con otros.

Si el objeto admite el mensaje, ejecutará algún código.De lo contrario, simplemente lo ignorará.Este es un enfoque más dinámico que una llamada explícita a una función/método donde el objeto debe admitir esa función.

Creo que Objective-c utiliza este enfoque de mensajería.

En implementaciones orientadas a objetos como C#, el concepto de "mensaje" no existe realmente como una construcción de lenguaje explícita.No puedes mirar un fragmento de código en particular y decir "ahí está el mensaje".

En cambio, un método de la clase de un objeto implica la idea de que otros objetos pueden enviar un tipo de mensaje que desencadena el comportamiento dentro de ese método.Entonces terminas especificando el método directamente, en lugar de enviar un mensaje.

Con otras implementaciones como Smalltalk, puedes ver el mensaje que se pasa y el objeto receptor tiene la capacidad de hacer con ese mensaje lo que quiera.

Hay bibliotecas que se encuentran encima de lenguajes como C# que intentan restaurar la sensación de transmisión de mensajes explícitos al lenguaje.He estado cocinando uno propio para divertirme aquí: http://collaborateframework.codeplex.com/

No estoy seguro del origen de mensaje terminología.La mayoría de las veces me encuentro mensajes en diseño UML.Los objetos (actores en terminología UML) pueden comunicarse entre sí mediante mensajes.En código del mundo real mensaje Por lo general, es solo una llamada de función.Pienso en el mensaje como un intento de comunicarse con algún objeto.Puede ser un mensaje real (como mensajes en el sistema operativo) o llamadas a funciones.

Por lo general, "Método" parece ser el nombre correcto para Funciones.Sin embargo, cada idioma tiene sus propias palabras clave.Delphi, por ejemplo, incluso hace una diferencia entre los métodos que devuelven algo ("Funciones") y los métodos que devuelven nada ("Procedimientos"), mientras que en los lenguajes C-Type no hay diferencia.

Aquí hay algunas definiciones simplificadas:

métodos/subrutinas/vacíos:realizar una acción

funciones:realizar una acción y devolver un valor

eventos:Se llaman cuando se actúa sobre un objeto.

manejadores:son las funciones/métodos que manejan los eventos


PD:este es un ejemplo perfecto de por qué SO debería admitir etiquetas DL/DT/DD.

Creo que es una cuestión de preferencia en este momento.Las palabras que mencionas son básicamente sinónimos en los idiomas actuales y, en su mayor parte, la gente entenderá lo que quieres decir si dices "método" o "función".Si utiliza "mensaje", que sólo se utiliza realmente en programación orientada a objetos, puede confundir lo que intenta transmitir. Por ejemplo:"Necesito crear un mensaje para enviar un mensaje de correo electrónico". Otros términos que podrían ser sinónimos, y esta no es una lista completa, son subrutina, acción, procedimiento, operación (aunque generalmente de naturaleza matemática), subprograma, comando ...

método :similar a funcionar en idiomas tradicionales

mensaje :similar al paso de parámetros en el lenguaje tradicional

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top