Ответ 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
оба метода.