¿Qué tan incorrecto es hablar de "métodos" C ++ (versus "funciones miembro")?

19

Yo entiendo que de acuerdo a la especificación C ++ no hay tal cosa como un "método", y algunos (muchos? La mayoría?) Los programadores de C ++ consideran "método" para ser un Java-ismo. Por otro lado, incluso en un foro de C ++ la gente parece hablar sobre métodos sin contracciones. Estoy buscando convenciones conocidas o prácticas comunes con respecto a esta terminología.

Estoy documentando una API que tiene versiones de C ++ y Java. Los desarrolladores realmente mantuvieron los nombres de clase y método / función de miembro iguales entre los dos, presumiblemente por conveniencia en portabilidad y prueba. Debido a esto, parte de lo que debe documentarse sobre estas API se encuentra "por encima" de la elección del idioma; Necesito poder hablar en general sobre Foos y Bars, con sus métodos baz () y mumble () ...

Si hablo de métodos, los programadores de Java lo considerarán natural y, al parecer, los programadores de C ++ probablemente lo entenderán, pero algunos lo considerarán incorrecto. Mi pregunta es: ¿qué tan atroz es esto en la práctica ? ¿Cómo se habla convencionalmente de las funciones miembro de C ++ en contextos "OOP generales", en oposición a los específicos de C ++? ¿Hay una mejor manera de hablar sobre las funciones de los miembros de una manera que no sea incorrecta para ninguno de los idiomas? ("Funciones de miembro" es un poco detallado).

Esta no es una encuesta de opinión; Estoy tratando de determinar si hay convenciones reales o prácticas comunes para abordar este problema.

Soy consciente de esta pregunta , pero se trata de OOP en general y no pregunta sobre idiomas específicos.

Monica Cellio
fuente
Leí el centro de ayuda y revisé la lista de etiquetas antes de preguntar esto. ¿Hice algo mal al preguntar esto aquí?
Monica Cellio
El voto cercano que tiene es principalmente para la opinión basada en lo que puede ser esto. No estoy seguro de qué tan bien puede funcionar en cualquier sitio de SE solo porque es difícil decir con autoridad si las personas se irritarán o no con usted y con qué amplitud lo harán. ser ... Una persona puede pensar que está totalmente bien y otra pensará que es una terrible violación de la terminología, tal como lo describiste en la P- debido a esto es relativamente un tipo de cosa solo de opinión
Jimmy Hoffa
2
El concepto de métodos OOP se correlacionaría más claramente con la "función miembro virtual" en C ++, pero es lo mismo. Hay una peor terminología en el lado de Java, como los "métodos estáticos" que no son métodos sino funciones. Simplemente siga usando la palabra "método" independiente del idioma, y ​​todos entenderán lo que quiere decir. Si alguien insiste en que C ++ no tiene métodos, eso es realmente incorrecto e increíblemente molesto.
amon
1
@JimmyHoffa es esto mejor?
Monica Cellio
3
Simplemente llámelos métodos en su documento API de idiomas cruzados. Puede incluir una frase en el texto de introducción como "Para tratar de permanecer independiente del lenguaje de programación, esta documentación de la API utilizará el término método para referirse a las funciones miembro de C ++".
Brandin

Respuestas:

11

¿Por qué no incluye una explicación (como lo hizo en su pregunta) en la parte introductoria de la documentación, por ejemplo, una sección de Convenciones ? Luego, podría explicar que el término "método", como se usa en su documentación, se entiende en el sentido genérico de método (Java), función miembro (C ++), ... ya que la documentación se aplica a todas las implementaciones.

sceaj
fuente
Esto es lo que hice, y hasta ahora la gente parece estar de acuerdo. Gracias por la sugerencia.
Monica Cellio
15

Bueno, no vas a ser ejecutado por eso.

La queja en el mundo de C ++ no es de corrección pedante: es de ambigüedad. Hay tantos tipos diferentes de "métodos" en el desierto dependiendo del dominio del que esté hablando, que muchos de nosotros preferimos apegarnos a la terminología estándar para evitar malentendidos más adelante. Eso significa, aproximadamente, "función estática / [no estática] [pura] virtual / miembro [no virtual] / [libre]".

Si escribe "método" en su documentación, algunos programadores de C ++ pueden quejarse de que no está realmente claro de qué está hablando, o preocuparse de que si no está familiarizado con esta convención de C ++, ¿qué otros se están perdiendo?

Pero estoy seguro de que hay millones de programadores profesionales de C ++ que no tienen ni idea de que esto sea siquiera una cosa. Es un gran mundo antiguo.

No vas a ser ejecutado por eso.

La ligereza corre con Mónica
fuente
3

Eiffel los llama Rutinas o Características , C ++ los llama Funciones de Miembros , y (casi) cualquier otro lenguaje OO que se haya creado en toda la historia de la computación, tanto antes como después de que C ++ los llame Métodos , por lo que este último término generalmente debe ser entendido incluso por C ++ (y programadores Eiffel), a menos que realmente nunca han oído hablar de Simula, Smalltalk, Ser, Objective-C, la neolengua, Java, C #, VB.NET, PHP, Python, Ruby, ECMAScript / JavaScript, Scala, CoffeeScript, ...

Jörg W Mittag
fuente
Excepto que el punto es que a menudo significan cosas sutilmente diferentes en esos dominios. Es por eso que el OP pregunta si es mejor atenerse a la terminología específica del dominio, y por qué la respuesta correcta es "sí" ...
Lightness compite con Monica el
Me acabo de dar cuenta de que probaste mi punto citando JavaScript, que ni siquiera tiene clases (su OO está basado en prototipos). Entonces, ¿cómo pueden los métodos JavaScript ser los mismos que en otros lugares? La inteligibilidad mutua que reclamas en realidad no existe.
Lightness compite con Monica el
La OOP basada en prototipos no hace ninguna diferencia. OOP se basa en la noción de que los objetos se comunican a través de mensajes (como servidores que envían solicitudes entre sí), y un método se refiere a la forma (método) en la que cualquier objeto en particular responde a un mensaje dado. El prototipo OO solo hace una diferencia con respecto a cómo se pueden heredar los métodos. Lo que sí hace una gran diferencia sería la OOP basada en ranuras (como Python) frente a mensajes (como Ruby), y si tiene un enlace tardío o temprano.
saolof