c++ terminology language-lawyer

¿El término "método" está definido por el estándar de C++?



terminology language-lawyer (5)

Aquí mi análisis con respecto a la palabra método .

Hice un escaneo de la documentación oficial (estándares, especificaciones, etc.) en varios lenguajes de programación.

http://componentsprogramming.com/using-the-right-terms-method/

La taxonomía adecuada (que no depende de ningún lenguaje de programación) se publicará en un artículo futuro.

Con respecto a C ++, la terminología correcta es: función miembro / no miembro . Algunas personas usan funciones miembro / libres.

El término "método" se usa a menudo para discutir el código C ++. ¿El término independiente tiene un significado bien definido en C ++ o es ambiguo? ¿Es aceptable usar el término por sí mismo, o debe estar calificado (por ejemplo, un "método de clase" o "método virtual"), o debe simplemente evitarse por completo?


El estándar de C ++ no hace mención del término method . Cabe señalar que las preguntas frecuentes oficiales de C ++ hacen uso de este término, pero para describir una función virtual ; Una simple búsqueda en Google revela más ocurrencias de este término.

Nunca he visto el término method en un IDE (Visual Studio), pero he visto el término member function . En mi opinión, el method es un término de "talla única".


El término método no está definido en el estándar de C ++. La terminología usa la función miembro en su lugar.

Bjarne Stroustrup, sin embargo, define el término método en su propio glossary como función miembro virtual . Así que esto muestra evidencia de que el término es aceptable.


El término método se había usado históricamente como sinónimo del procedimiento de un objeto. Teniendo en cuenta que un objeto tiene datos y comportamiento, es este comportamiento el que se conoce como método. Al rastrear hacia atrás, podría encontrar una referencia al uso del término método al referirme a una versión de MIT ALGOL, AED-0

Citando wikipedia

La versión de MIT ALGOL, AED-0, estructuras de datos vinculadas ("plexes", en ese dialecto) directamente con procedimientos, prefigurando lo que luego se denominaron "mensajes", "métodos" y "funciones miembro".

A lo largo de los años, el método había sido una parte integral del análisis orientado a objetos y el diseño y la programación orientada a objetos. Ahora, C ++ evolucionó como un lenguaje de procedimiento donde extendió C un lenguaje de procedimiento para tener capacidades orientadas a objetos. C tenía el concepto de estructura, y los elementos de datos se llamaban miembros. Consulte los métodos en C ++ . Para no romper el linaje, C ++ continuó llamando a los elementos de clase estructurada y de género más reciente como miembros.

Ahora, para diferenciar entre datos y funciones, en lugar de introducir una nueva terminología, extendió esta terminología para llamar a miembros de datos y funciones de miembros. Las funciones miembro que soportaban el enlace dinámico se llamaban funciones virtuales

Entonces, estrictamente hablando, las referencias oficiales se abstienen de usar los métodos de terminología cuando se refieren a las funciones de los miembros. La terminología es más frecuente entre las personas que tienen un fondo más orientado a objetos. Entonces, si desea permanecer sin ambigüedades, lo mejor es utilizar la terminología como

  • miembro de datos
  • función miembro
  • funciones virtuales

Evitaría este término por completo, ya que queda claro lo que quiere decir con "función miembro", pero no "método", ya que hizo esta pregunta como prueba suficiente.

Sin embargo, las apariencias normativas de la palabra "método" en el estándar C ++ 14 son

  • En la lista de contenidos:

    17.5 Método de descripción (informativo)

    Esto se repite en el título de esa sección.

  • [basic.compound]:

    Estos métodos de construcción de tipos pueden aplicarse recursivamente;

  • [cpp.include]

    El método mediante el cual una secuencia de tokens de preprocesamiento entre un par de token de preproceso < y > o un par de " caracteres se combina en un token de preprocesamiento de nombre de encabezado único se define por implementación.

  • [library.general]

    Las siguientes subcláusulas describen las definiciones (17.3), el método de descripción (17.5) , [..]

  • En la tabla 32, se menciona FLT_EVAL_METHOD .

  • En la etapa 2 del num_get ''s do_get :

    Para los tipos aritméticos, los caracteres punct.thousands_sep() se insertan en la secuencia según lo determinado por el valor devuelto por punct.do_grouping() utilizando el método descrito en 22.4.3.1.2

  • [forwardlist.modifiers]:

    De lo contrario, inserta los elementos sz - distance(begin(), end()) al final de la lista, de modo que cada nuevo elemento, e , se inicialice con un método equivalente a llamar a allocator_traits<allocator_type>::construct(get_allocator(), std::addressof(e), c) .

  • [filebuf.virtuals]:

    Se comporta de acuerdo con la descripción de basic_streambuf<charT,traits>::uflow() , con la especialización de que una secuencia de caracteres se lee desde la entrada con el mismo método que usa el basic_streambuf<charT,traits>::uflow() .

El término claramente nunca se refiere a una "función miembro".