function отличие - В чем разница между методом и функцией?




функции метода (25)

Может ли кто-то предоставить простое объяснение методов и функций в контексте ООП?


Answers

Я знаю, что многие другие уже ответили, но я нашел следующее - простой, но эффективный однострочный ответ. Хотя это не выглядит намного лучше, чем другие ответы здесь, но если вы внимательно прочитаете его, у него есть все, что вам нужно знать о методе vs function.

Метод - это функция, которая имеет определенный приемник, в терминах ООП, метод является функцией экземпляра объекта.


Если вам хочется читать здесь «Мое введение в методы OO»,

Идея объектно-ориентированной парадигмы заключается в «угрозе» программного обеспечения состоит из ... хорошо «объектов». Объекты в реальном мире имеют свойства, например, если у вас есть Сотрудник, у сотрудника есть имя, идентификатор сотрудника, должность, он принадлежит отделу и т. Д.

Объект также знает, как справляться с его атрибутами и выполнять некоторые операции над ними. Скажем, если мы хотим знать, что делает работник прямо сейчас, мы спросим его.

employe whatAreYouDoing.

Это «whatAreYouDoing» - это «сообщение», отправленное объекту. Объект знает, как ответить на эти вопросы, говорится, что у него есть «метод» для разрешения вопроса.

Таким образом, способы, с помощью которых объекты должны выставлять свое поведение, называются методами. Таким образом, методы артефакта должны «что-то» делать.

Другие возможные методы:

employee whatIsYourName
employee whatIsYourDepartmentsName

и т.п.

Функции с другой стороны - это способы, которыми язык программирования должен вычислять некоторые данные, например, у вас может быть функция addValues ​​(8, 8), которая возвращает 16

// pseudo-code
function addValues( int x, int y )  return x + y 
// call it 
result = addValues( 8,8 )
print result // output is 16...

Поскольку первые популярные языки программирования (такие как fortran, c, pascal) не охватывали парадигму OO, они только ссылаются на эти «артефакты» этих артефактов.

например, предыдущая функция в C:

int addValues( int x, int y ) 
{
   return x + y;
}

«Естественно» не сказать, что у объекта есть «функция» для выполнения какого-либо действия, потому что функции больше связаны с математическим материалом, в то время как у Работника мало математики на нем, но у вас могут быть методы, которые выполняют точно такие же функции, как функции, например, в Java это будет эквивалентная функция addValues.

public static int addValues( int x, int y ) {
    return x + y;
}

Выглядит знакомо? Это потому, что Java имеет свои корни на C ++ и C ++ на C.

В конце это всего лишь концепция, в реализации они могут выглядеть одинаково, но в документации OO они называются методом.

Вот пример предыдущего объекта Employee в Java.

public class Employee {

    Department department;
    String name;

    public String whatsYourName(){
        return this.name;
    }
    public String whatsYourDeparmentsName(){
         return this.department.name();
    }
    public String whatAreYouDoing(){
        return "nothing";
    } 
    // Ignore the following, only set here for completness
    public Employee( String name ) {
        this.name = name;
    }

}

// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John

// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();

// Print the info to the console.

 System.out.printf("Employee %s is doing: %s", name, doingWhat );

Output:
Employee John is doing nothing.

Разница тогда, находится в «домене», где она применяется.

AppleScript имеет представление о «естественном языке» matphor, что в какой-то момент OO. Например, Smalltalk. Надеюсь, вам будет легче понять методы в объектах после прочтения этого.

ПРИМЕЧАНИЕ. Код не должен компилироваться, просто чтобы служить примером. Не стесняйтесь модифицировать сообщение и добавить пример Python.


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

Метод - это концепция объектно-ориентированного программирования, где метод является членом класса, который в основном обрабатывает элементы класса.


Очень общее определение основного различия между функцией и методом :

Функции определяются вне классов, а методы определены внутри и в части классов.


Иногда в C ++ метод используется для отражения понятия функции-члена класса. Однако недавно я нашел заявление в книге «Язык программирования C ++ 4th Edition», на странице 586 «Производные классы»,

Виртуальную функцию иногда называют методом.

Это немного запутанно, но он иногда говорил , поэтому он имеет смысл, C ++ создатель имеет тенденцию видеть методы, поскольку функции могут быть вызваны на объекты и могут вести себя полиморфно.


Метод находится на объекте.
Функция не зависит от объекта.

Для Java существуют только методы.
Для C существуют только функции.

Для C ++ это будет зависеть от того, находитесь ли вы в классе.


Функция или метод - это именованная вызываемая часть кода, которая выполняет некоторые операции и, при необходимости, возвращает значение.

На языке C используется функция term. Люди Java и C # сказали бы, что это метод (и функция в этом случае определяется внутри класса / объекта).

Программист C ++ может называть его функцией или иногда методом (в зависимости от того, записывают ли они процедурный код c ++ или делают объектно-ориентированный путь C ++, также программист на C / C ++, скорее всего, назвал бы это функцией, потому что термин «метод» реже используется в литературе C / C ++).

Вы используете функцию, просто называя ее именем,

result = mySum(num1, num2);


Вы должны вызвать метод, сначала ссылаясь на свой объект,

result = MyCalc.mySum(num1,num2);

Простой способ запомнить:

  • FF ree (Свободные означает не принадлежность к объекту или классу)
  • M ethod → M ember (член объекта или класса)

Функция - это набор логических элементов, которые могут использоваться для управления данными. В то время как метод - это функция, которая используется для управления данными объекта, к которому он принадлежит. Технически, если у вас есть функция, которая не полностью связана с вашим классом, но была объявлена ​​в классе, это не метод; Это называется плохой дизайн.


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

Метод - это функция, принадлежащая объекту (в некоторых объектно-ориентированных системах правильнее сказать, что он принадлежит классу). Будучи «принадлежащим» объектом / классом, вы ссылаетесь на метод через объект / класс; например, на Java, если вы хотите вызвать метод «open ()», принадлежащий «двери» объекта, вам нужно написать «door.open ()».

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

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


для меня: функция метода и функция одинаковы, если я соглашусь с тем, что:

  • функция может вернуть значение
  • могут ожидать параметры

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

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

new Employer().calculateSum( 8, 8 );

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

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


Методы действия класса действуют на экземпляр класса, называемый объектом.

class Example
{
   public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".

   public void UpdateData() // .. and manipulates it (This is a method by the way)
   {
      data = data + 1;
   }

   public void PrintData() // This is also a method
   {
      Console.WriteLine(data);
   }
}

class Program
{
   public static void Main()
   {
       Example exampleObject1 = new Example();
       Example exampleObject2 = new Example();

       exampleObject1.UpdateData();
       exampleObject1.UpdateData();

       exampleObject2.UpdateData();

       exampleObject1.PrintData(); // Prints "2"
       exampleObject2.PrintData(); // Prints "1"
   }
}

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

Метод - это часть кода, вызываемая именем, связанным с объектом. В большинстве случаев он идентичен функции, за исключением двух ключевых различий:

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

(это упрощенное объяснение, игнорирование вопросов scope и т. д.),


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

Возьмем следующий пример python:

class Door:
  def open(self):
    print 'hello stranger'

def knock_door:
  a_door = Door()
  Door.open(a_door)

knock_door()

Приведенный пример показывает вам класс под названием «Дверь», который имеет метод или действие «открыто», он называется методом, потому что он был объявлен внутри класса. Существует еще одна часть кода с «def» чуть ниже, которая определяет функцию, это функция, потому что она не объявлена ​​внутри класса, эта функция вызывает метод, который мы определили внутри нашего класса, как вы можете видеть, и, наконец, функция само по себе.

Как вы можете видеть, вы можете вызывать функцию где угодно, но если вы хотите вызвать метод, вам нужно передать новый объект того же типа, что и класс, объявленный методом (Class.method (object)), или вам нужно вызвать метод внутри объекта (object.Method ()), по крайней мере, в python.

Подумайте о методах, которые могут выполнять только одна сущность, поэтому, если у вас есть класс Dog, имеет смысл иметь функцию коры только внутри этого класса, и это будет метод, если у вас также есть класс Person, это может иметь смысл напишите функцию «feed», которая не принадлежит ни одному классу, поскольку могут быть переданы как люди, так и собаки, и вы можете назвать эту функцию, поскольку она не относится к какому-либо классу в частности.


Класс - это сбор некоторых данных и функций, необязательно с конструктором.

При создании экземпляра (копирование, репликация) этого конкретного класса конструктор инициализирует класс и возвращает объект.

Теперь класс становится объектом (без конструктора), а функции известны как метод в контексте объекта.

Итак, в основном

Класс <== new ==> Объект

Функция <== new ==> Метод

В java обычно говорят, что имя конструктора такое же, как имя класса, но в реальности этот конструктор похож на блок экземпляра и статический блок, но с тем, что пользователь определяет тип возвращаемого типа (например, тип класса)

Хотя класс может иметь статический блок, блок экземпляра, конструктор, функцию. Объект обычно имеет только данные и метод.


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

# perfectly normal function
def hello(greetee):
  print "Hello", greetee

# generalise a bit (still a function though)
def greet(greeting, greetee):
  print greeting, greetee

# hide the greeting behind a layer of abstraction (still a function!)
def greet_with_greeter(greeter, greetee):
  print greeter.greeting, greetee

# very simple class we can pass to greet_with_greeter
class Greeter(object):
  def __init__(self, greeting):
    self.greeting = greeting

  # while we're at it, here's a method that uses self.greeting...
  def greet(self, greetee):
    print self.greeting, greetee

# save an object of class Greeter for later
hello_greeter = Greeter("Hello")

# now all of the following print the same message
hello("World")
greet("Hello", "World")
greet_with_greeter(hello_greeter, "World")
hello_greeter.greet("World")

Теперь сравните функцию greet_with_greeter и метод greet : единственное отличие - это имя первого параметра (в функции, которую я назвал «greeter», в методе, который я назвал «self»). Поэтому я могу использовать метод greet точно так же, как я использую функцию greet_with_greeter (используя синтаксис «dot», чтобы получить на нем, поскольку я определил его внутри класса):

Greeter.greet(hello_greeter, "World")

Поэтому я эффективно превратил метод в функцию. Могу ли я превратить функцию в метод? Ну, поскольку Python позволяет вам общаться с классами после того, как они определены, давайте попробуем:

Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")

Да, функция greet_with_greeter теперь также известна как метод greet2 . Это показывает единственную реальную разницу между методом и функцией: когда вы вызываете метод «on» объекта, вызывая object.method(args) , язык магически превращает его в method(object, args) .

(Пуристы OO могут утверждать, что метод отличается от функции, и если вы попадаете в продвинутый Python или Ruby - или Smalltalk! - вы начнете видеть их точку. Также некоторые языки предоставляют методы специального доступа к битам объекта. основная концептуальная разница по-прежнему остается скрытым дополнительным параметром.)


По моему мнению, метод - это любая операция, которая может выполняться в классе. Это общий термин, используемый в программировании.

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

Например, скажем, вы хотите описать кошку, и вы хотели бы, чтобы она могла зевать. Вы должны создать класс Cat с помощью метода Yawn, который, скорее всего, будет функцией без возвращаемого значения.


Вот некоторые объяснения метода против функции с использованием примеров JavaScript:

test(20, 50); функция определяет и использует для выполнения некоторых шагов или возвращает что-то назад, которое может быть где-то сохранено / использовано.

Вы можете повторно использовать код: Определите код один раз и используйте его много раз.

Вы можете использовать один и тот же код много раз с разными аргументами, чтобы получить разные результаты.

var x = myFunction(4, 3);   // Function is called, return value will end up in x

function myFunction(a, b) {
    return a * b;          // Function returns the product of a and b
}

var test = something.test(); здесь test () может быть методом некоторого объекта или настраиваемого пользователем прототипа для встроенных объектов, вот более объяснение:

Методы JavaScript - это действия, которые могут выполняться над объектами.

Метод JavaScript - это свойство, содержащее определение функции.

Встроенное свойство / метод для строк в javascript:

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

Пользовательский пример:

function person(firstName, lastName, age, eyeColor) {
    this.firstName = firstName;  
    this.lastName = lastName;
    this.age = age;
    this.eyeColor = eyeColor;
    this.changeName = function (name) {
        this.lastName = name;
    };
}

something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'

Вы также можете определить свойства для String, Array и т. Д.

String.prototype.distance = function (char) {
    var index = this.indexOf(char);

    if (index === -1) {
        console.log(char + " does not appear in " + this);
    } else {
        console.log(char + " is " + (this.length - index) + " characters from the end of the string!");
    }
};

var something = "ThisIsSomeString"

// now use distance like this, run and check console log

something.distance("m");

Некоторые ссылки: Javascript Object Method , Functions , Дополнительная информация о прототипе


Функция - это набор логических элементов, которые могут использоваться для управления данными.

В то время как метод - это функция, которая используется для управления данными объекта, к которому он принадлежит. Технически, если у вас есть функция, которая не полностью связана с вашим классом, но была объявлена ​​в классе, это не метод; Это называется плохой дизайн.


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


Люди ИМХО просто хотели придумать новое слово для упрощения связи между программистами, когда они хотели ссылаться на функции внутри объектов.

Если вы говорите о методах, вы подразумеваете функции внутри класса. Если вы говорите о функциях, вы имеете в виду просто функции вне класса.

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

Функция - это код, который должен сыграть роль ( функция ) что-то делать. Метод - это метод решения проблемы.

Он делает то же самое. Это одно и то же. Если вы хотите быть сверхточным и соглашаться с соглашением, вы можете вызывать методы как функции внутри объектов.


Исторически сложилось так, что может быть тонкая разница, когда «метод» является чем-то, что не возвращает значение, а «функцию», которая имеет. Каждый язык имеет свой собственный лексикон терминов со специальным значением.

В «С» слово «функция» означает программу .

В Java термин «функция» не имеет особого значения. В то время как «метод» означает одну из подпрограмм, которые образуют реализацию класса.

В C #, который будет выглядеть следующим образом:

public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function

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


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

С чистой точки зрения Math и CS функция всегда возвращает тот же результат при вызове с теми же аргументами (f (x, y) = (x + y)). Метод, с другой стороны, обычно связан с экземпляром класса. Опять же, большинство современных языков OO больше не используют термин «функция» по большей части. Многие статические методы могут быть похожими на функции, поскольку они обычно не имеют состояния (не всегда верно).


Функция - математическая концепция. Например:

f(x,y) = sin(x) + cos(y)

говорит, что функция f () вернет sin первого параметра, добавленного к косинусу второго параметра. Это просто математика. Так как sin () и cos () также являются функциями. Функция имеет другое свойство: все вызовы функции с теми же параметрами должны возвращать тот же результат.

С другой стороны, метод - это функция, связанная с объектом на объектно-ориентированном языке. Он имеет один неявный параметр: объект действует (и это состояние).

Итак, если у вас есть объект Z с помощью метода g (x), вы можете увидеть следующее:

Z.g(x) = sin(x) + cos(Z.y)

В этом случае параметр x передается, как и в примере функции раньше. Однако параметр cos () является значением, которое живет внутри объекта Z. Z, а данные, которые находятся внутри него (Zy), являются неявными параметрами для метода g () Z.


Я просто укажу их на страницу Mozilla Closures . Это лучшее, кратчайшее и простое объяснение основ закрытия и практического использования, которые я нашел. Настоятельно рекомендуется всем, кто изучает JavaScript.

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





function oop methods language-agnostic terminology