2008-09-04 33 views
31

Hace poco hice una pregunta acerca de lo que llamé "llamadas a métodos". La respuesta se refiere a "mensajes". Como programador aficionado autodidacta que intenta formular preguntas que no me hacen parecer un idiota, me doy cuenta de que la terminología que uso revela mucho sobre cómo aprendí a programar.'método' vs. 'mensaje' vs. 'función' vs. '???'

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

Me parece recordar que en idiomas pre-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 aun así, ¿era esto un idioma por idioma? ¿distinción?

Respuesta

18

He encontrado que esto es un lenguaje y paradigma de programación. Un paradigma - OOP - se refiere a los 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, funcional, puede o no incluir clases de objetos, pero las funciones son la unidad de trabajo atómica.

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

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

Todo lo que tiene que hacer para que no suene como un rube es utilizar la terminología utilizada por la referencia de idioma para el idioma que está utilizando.

+7

Si las funciones son atómicas, ¿eso lo convierte en un neutrón? Un identificador de un quark? ¿Y dónde está el bosón de Higgs? –

+3

El bosón de Higgs son las excepciones. Una parte inevitable de la excitación, pero difícil de encontrar cuando los estás buscando. – JonC

+0

Bien puesto, Ben ... – nicorellius

0

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

+3

El origen es un diseño antiguo de Smalltalk. Alan Kay jugó brevemente con el modelo de simultaneidad del actor e hizo que cada objeto sea su propio actor ejecutándose en su propio hilo. En ese sistema, las llamadas a métodos realmente * eran * envíos de mensajes asíncronos. Este diseño se revirtió rápidamente, la terminología no lo era. –

0

Por lo general, "Método" parece ser el nombre propio de las 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 idiomas de tipo C, no hay diferencia.

3

Creo mensaje se utiliza en smalltalk.

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

3

Estoy bastante seguro (pero una comprobación rápida de Wikipedia parece confirmar esto) que la terminología de 'mensaje que pasa' proviene de la comunidad de Smalltalk. Creo que es más o menos equivalente a una llamada a un método.

0

Así es algunas definiciones simplificadas:

métodos/subrutinas/huecos: realizar una acción

funciones: realizar una acción y devolver un valor

eventos: se invocan cuando se actúa sobre un objeto al

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


PS: este es un ejemplo perfecto de por qué deberán prestar apoyo a las etiquetas dl/DT/DD.

2

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, se ejecutará algún código. De lo contrario, simplemente lo ignorará. Este es un enfoque más dinámico que una llamada función/método explícita donde el objeto debe soportar esa función.

Objetivo-c, creo, utiliza este enfoque de mensajería.

0

Creo que es una cuestión de preferencia en este punto. Las palabras que mencionas son básicamente sinónimos en los idiomas actuales y, en su mayoría, las personas entenderán lo que quieres decir si dices "método" o "función". Si usa "mensaje", que solo se usa realmente en OOP, entonces puede confundir lo que está intentando transmitir. Por ejemplo: "Necesito crear un mensaje para enviar un mensaje de correo electrónico". Otros términos que pueden ser sinónimos, y esto no es una lista completa, son subrutina, acción, procedimiento, operación (aunque normalmente de naturaleza matemática), subprograma, comando ...

10

Mensaje! = Método! = Función

en OOP diferente objetos pueden tener diferentes métodos unidos al mismo mensaje.

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

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

-Objetos enviar y recibir mensajes.

-la respuesta a un mensaje está ejecutando un método.

-el método a usar es determinar ser el receptor en tiempo de ejecución.

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

+1

C++ realmente no usa el paso de mensajes. Los objetos tienen funciones de miembro que a veces se llaman métodos y los llama directamente en lugar de pasar un símbolo de mensaje. – Chuck

+0

No se trata de pasar mensajes o tener funciones de miembros, se trata de flujo lógico. No se realizan permutaciones de datos dentro de los mensajes, solo se envía información de un objeto a otro, de ahí el "mensaje". Cuando quiera meterse con los datos/objetos, debería usar métodos. La función es un término de programación básico, ambos mensajes/métodos son funciones, incluso un constructor es una función. Por lo general, para mantener su flujo lógico limpio y comprensible, envía mensajes cuando los datos necesitan ser procesados ​​/ los objetos necesitan ser actualizados. El receptor final del mensaje realiza métodos para completar la acción. – Mike

+0

Debo agregar que, obviamente, los Métodos son funciones miembro de objetos, y que los mensajes también suelen ser funciones de miembros, pero con el único propósito de ser un informante o pasar datos. Los métodos (o funciones de miembro) se deben usar cuando se modifican o crean datos nuevos dentro de ese objeto. La encapsulación es el razonamiento que usamos los mensajes y es por eso que no los llamamos métodos, porque no son el método de ese objeto/clase, simplemente informan a la clase/objeto que debería estar trabajando con esta información. – Mike

0

: similar a funcionar en lenguajes tradicionales

mensaje: similar al parámetro que pasa en el lenguaje tradicional

2

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

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

Con otras implementaciones como Smalltalk, puede 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 en la parte superior de idiomas como C# que intentan restaurar el sentido de paso de mensaje explícito al idioma. He estado cocinando uno de los míos por diversión aquí: http://collaborateframework.codeplex.com/

Cuestiones relacionadas