Метод vs function vs procedure vs class?

Я знаю основы этих методов, процедур, функций и классов, но я всегда путаюсь различать среди тех, кто отличается от объектно-ориентированного программирования, поэтому, пожалуйста, может ли кто-нибудь сказать мне разницу между простыми примерами?

Ответы

Ответ 1

A class, в текущем, обычном ООП, представляет собой набор данных (переменных-членов), связанных вместе с функциями/процедурами, которые работают с этими данными (функциями-членами или методами). Класс не имеет отношения к другим трем терминам, кроме того, что он "содержит" (более правильно "связан с" ) последним.

Остальные три слова... ну, это зависит.

Функция представляет собой набор вычисляющих операторов. Итак, процедура. Однако в некоторых очень анальных ретенсивных языках функция возвращает значение, а процедура - нет. В таких языках процедуры обычно используются для их побочных эффектов (например, ввода-вывода), в то время как функции используются для расчетов и имеют тенденцию избегать побочных эффектов. (Это использование, которое я предпочитаю. Да, я такой анальный ретентив.)

Однако большинство языков не являются такими анальными ретентивными, и в результате люди будут использовать термины "функция" и "процедура" взаимозаменяемо, предпочитая друг другу на основе их фона. (Программисты Modula- * будут стремиться использовать "процедуру", в то время как C/С++/Java/как правило, будут использовать "функцию", например.)

A метод - это просто жаргон для функции (или процедуры), связанной с классом. Действительно, не все языки ООП используют термин "метод". В типичной (но не универсальной!) Реализации методы имеют подразумеваемый первый параметр (называемый такими вещами, как this или self или тому подобное) для доступа к содержащемуся классу. Это не так, как я сказал, универсальный. Некоторые языки делают этот первый параметр явным (и, таким образом, позволяют называть все, что вам нравится), в то время как в других нет никакого волшебного первого параметра вообще.


Отредактировано для добавления этого примера:

Следующий непроверенный и некомпилированный код на С++ должен показать вам, какие вещи задействованы.

class MyClass
{
  int memberVariable;

  void setMemberVariableProcedure(int v)
  {
    memberVariable = v;
  }

  int getMemberVariableFunction()
  {
    return memberVariable;
  }
};

void plainOldProcedure(int stuff)
{
  cout << stuff;
}

int plainOldFunction(int stuff)
{
  return 2 * stuff;
}

В этом коде getMemberVariableProcedure и getMemberVariableFunction оба метода.

Ответ 2

Процедуры, функции и методы, как правило, одинаковы, они содержат некоторые операторы обработки.

Единственные различия, которые я могу представить между этими тремя и местами, где они используются.

Я имею в виду, что "метод" обычно используется для определения функций внутри класса, где могут быть определены несколько типов доступа пользователей, таких как public, protected, private.

"Процедуры" также функционируют, но они обычно представляют собой последовательность функций, которая должна выполняться по завершении одной функции или параллельно с другой.


Классы - это набор связанных атрибутов и методов. Атрибуты определяют объект класса, где в качестве методов это действие, выполняемое или выполняемое в классе.

Надеюсь, это было полезно