Quão errado é falar sobre "métodos" em C ++ (versus "funções-membro")?


19

I entender que de acordo com o C ++ especificação não existe tal coisa como um "método", e alguns (muitos? A maioria?) Programadores C ++ considerar "método" para ser um Java-ismo. Por outro lado, mesmo em um fórum C ++, as pessoas parecem falar sobre métodos sem se contorcer. Estou procurando convenções conhecidas ou práticas comuns relacionadas a essa terminologia.

Estou documentando uma API que possui as versões C ++ e Java. Os desenvolvedores mantiveram os nomes de classe e método / função de membro os mesmos entre os dois, provavelmente por conveniência em portar e testar. Por esse motivo, parte do que precisa ser documentado sobre essas APIs fica "acima" da escolha do idioma; Eu preciso ser capaz de falar em geral sobre Foos e Bars, com seus métodos baz () e mumble () ...?

Se eu falar sobre métodos que os programadores de Java consideram natural e, aparentemente, os programadores de C ++ provavelmente entenderão, mas alguns o considerarão incorreto. Minha pergunta é: quão hediondo isso é na prática ? Como as funções de membro do C ++ são abordadas convencionalmente em contextos "OOP gerais", em oposição aos específicos do C ++? Existe uma maneira melhor de falar sobre funções de membro de uma maneira que não esteja incorreta para nenhum dos idiomas? ("Funções de membro" é um pouco detalhada).

Esta não é uma pesquisa de opinião; Estou tentando determinar se existem convenções reais ou práticas comuns para resolver esse problema.

Estou ciente dessa pergunta , mas é sobre OOP em geral e não pergunta sobre idiomas específicos.


Li a Central de Ajuda e revi a lista de tags antes de fazer isso. Eu fiz algo errado perguntando isso aqui?
Monica Cellio

O voto certeiro que você tem é basicamente baseado na opinião, o que pode muito bem ser… Não tenho certeza de como isso pode funcionar em qualquer site da SE, apenas porque é difícil dizer com autoridade se as pessoas ficarão irritadas com você e com que amplitude elas irão ou não. ser .. Uma pessoa pode achar que está totalmente bem e outra achará uma terrível quebra de terminologia, assim como você descreveu no Q- por causa disso é um tipo de coisa relativamente apenas para opinião
Jimmy Hoffa

2
O conceito de métodos OOP seria mapeado de maneira mais limpa para a "função de membro virtual" em C ++, mas é a mesma coisa. Existe uma terminologia pior no lado do Java, como "métodos estáticos", que não são métodos, mas funções. Continue usando a palavra independente de idioma "método", e todos entenderão o que você quer dizer. Se alguém insiste que o C ++ não tem métodos, isso é realmente errado e é incrivelmente irritante o descarte de bicicletas.
amon

1
@JimmyHoffa isso é melhor?
Monica Cellio

3
Basta chamá-los de métodos no seu documento da API em vários idiomas. Você pode incluir uma frase no texto de introdução como "Para tentar permanecer independente da linguagem de programação, esta documentação da API usará o termo método para se referir às funções de membro do C ++".
Brandin

Respostas:


11

Por que você não inclui uma explicação (como fez na sua pergunta) na parte introdutória da documentação, por exemplo, uma seção de Convenções ? Em seguida, você pode explicar que o termo "método", conforme usado na documentação, se refere ao sentido genérico do método (Java), função membro (C ++), ... já que a documentação se aplica a todas as implementações.


Foi o que fiz, e até agora as pessoas parecem estar bem com isso. Obrigado pela sugestão.
Monica Cellio

15

Bem, você não será executado por isso.

A reclamação no mundo C ++ não é de correção pedante: é de ambiguidade. Existem tantos tipos diferentes de "métodos" por aí, dependendo do domínio que você está falando, que muitos de nós preferem seguir a terminologia padrão para evitar mal-entendidos mais tarde. Isso significa, grosso modo, "função estática / [não estática] [pura] virtual / [não virtual] membro / [livre]".

Se você escrever "método" em sua documentação, alguns programadores de C ++ podem reclamar que não está realmente claro do que você está falando, ou se preocupar que, se você não estiver familiarizado com esta convenção de C ++, que outros estão faltando?

Mas tenho certeza de que existem milhões de programadores profissionais em C ++ que não fazem ideia de que isso é algo. É um grande mundo velho.

Você não será executado por isso.


3

Eiffel os chama de Rotinas ou Recursos , o C ++ os chama de Funções de Membro e (quase) todas as outras linguagens OO já criadas em toda a história da computação, antes e depois do C ++ os chamar de Métodos , de modo que esse termo geralmente geralmente deve ser entendido mesmo por C ++ (e Eiffel) programadores, a menos que eles realmente nunca ouvi falar de Simula, Smalltalk, Auto, Objective-C, Novilíngua, Java, C #, VB.NET, PHP, Python, ruby, ECMAScript / JavaScript, Scala, CoffeeScript, ...


Exceto que o ponto é que eles geralmente significam coisas sutilmente diferentes nesses domínios. É por isso que o OP está perguntando se é melhor seguir a terminologia específica do domínio e por que a resposta correta é "sim" ...
Lightness Races com Monica

Acabei de perceber que você provou meu argumento citando JavaScript, que nem sequer tem classes (o OO é baseado em protótipo). Então, como os métodos JavaScript podem ser os mesmos que em outros lugares? A inteligibilidade mútua que você está reivindicando não existe realmente.
Lightness Races com Monica

OOP baseado em protótipo não faz diferença. OOP baseia-se na noção de que os objetos se comunicam por meio de mensagens (como servidores enviando solicitações uns aos outros), e um método refere-se à maneira (método) em que qualquer objeto em particular responde a uma determinada mensagem. O protótipo OO só faz diferença no que diz respeito à maneira como os métodos podem ser herdados. O que faz uma diferença maior seria OOP baseado em slot (como Python) vs baseado em mensagem (como Ruby), e se você tem ligação tardia ou antecipada.
saolof 27/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.