Функции или методы? - PullRequest
       45

Функции или методы?

4 голосов
/ 30 января 2012

Если я пишу абстрактные типы данных на C, функции, написанные для выполнения действий над этими типами данных и представленные в интерфейсе (файлы .h), называются функции , методы или что-то еще совсем другое?Кажется, я нигде не могу найти конструктивный ответ.Является ли метод специфичным для C ++ термином?

Ответы [ 6 ]

6 голосов
/ 31 января 2012

Является ли метод специфичным для C ++ термином?

«Метод» - это объектно-ориентированный программный термин, который относится к функции, являющейся частью пространства имен объекта. Таким образом, вы можете создавать методы для объектов на таких языках, как C ++, Java, Objective-C и т. Д. В C, с другой стороны, у вас все еще есть отдельные функции, а не методы.

Имейте в виду, что "официальный" термин C ++ для метода класса является "функцией-членом" и описан в разделе 9.3 спецификации.

4 голосов
/ 31 января 2012

Я всегда использовал «метод» в качестве синонима «функции-члена», что подразумевает C ++, поскольку в C такой вещи нет.

Однако на другой стороне медали можно утверждать, что роль foo_alter_state в:

struct foo {
  // implementation stuff;
}; 

void foo_alter_state(struct foo *self);

был все еще методом, работающим на foo с, хотя и стоящим отдельно. Это в основном ООП в Си, но реализовано вручную.

Эта перспектива может быть особенно верной, если struct foo; только когда-либо был объявлен в заголовках, но нигде не определен публично.

3 голосов
/ 31 января 2012

Методы - это функции, связанные с классом.

Так как классы не существуют в C, технически все является функцией.

2 голосов
/ 31 января 2012

Метод обычно используется для описания «функций», которые являются частью класса в ООП.Функции - это просто функции, а не часть класса.

В файле .h я бы назвал их "объявлениями функций", а в .c я бы назвал их "реализациями функций" ... Хотя я не эксперт, просто мой .02.

1 голос
/ 31 января 2012

Строго говоря, функция - это операция, которая дает выход для данного входа. Принимая во внимание, что метод является функцией, связанной с типом. С имеет только функции, я не думаю, что вы думаете по-другому.

Но если вы реализуете ADT, например, помещая указатели функций в структуру (на функции, которые получают контекстный указатель на экземпляр структуры), так что вы имитируете объект с помощью методов, тогда я не вижу причина называть их «методы, реализованные как функции».

1 голос
/ 31 января 2012

Я не думаю, что это особенно полезное различие, но в целом вы бы назвали их функции , потому что слово метод подразумевает целую кучу ООПчто С не предоставляет.Как и следующие :

Методы имеют специальное свойство, заключающееся в том, что во время выполнения они имеют доступ к данным, хранящимся в экземпляре класса (или экземпляре класса или объекте класса или объекте)они связаны и, таким образом, способны контролировать состояние экземпляра.

Но я обычно слышал, что люди, выросшие на Java, ссылаются на функции C как методы и я ни разу не запутался в том, что они имели в виду.Даже немного.

Однако вы можете захотеть сделать следующие (свободные) различия:

  • A процедура является блокомкода, который что-то делает

  • A функция - это процедура, которая связывает один или несколько входов с выходом

  • A метод - это процедура, которая принадлежит некоторому классу или экземпляру этого класса

...