2015-04-10 3 views
2

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

До сих пор я нашел хорошие определения метода против функции:

Difference between a method and a function

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

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

И функция против процедуры:

What is the difference between a "function" and a "procedure"?

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

Процедура - это набор команд, который может быть выполнен в порядке.

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

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

Но как подпрограмма и особенно операция связана с этими терминами?

EDIT: Так как это кажется слишком широким здесь является попытка сузить: метод, процедура и функция довольно ясно из моего прежнего исследования. Кроме того, подпрограмма уже не так расплывчата.

Вопрос в том, что такое в области информатики?

+0

Выберите один язык, ** не ** три несвязанных. –

+0

Правда, удалены все. Вопрос не относится ни к какому языку. – thalm

+0

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

ответ

2

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

  • подпрограммой является «некоторый код, который вы можете позвонить всякий раз, когда". Это буквально рутина, которая вызывается другими подпрограммами (отсюда подпрограмма). «Подпрограмма» и «рутина» кажутся довольно архаичными.

    Придумайте инструкции GOSUB BASIC в: (не говоря уже о том, что Бейсик ужасный язык)

    10 PRINT "Hello" 
    20 GOSUB 100 
    30 PRINT "Goodbye" 
    40 GOSUB 100 
    50 END 
    
    100 PRINT "World" 
    110 RETURN 
    

    Это печатает:

    Hello 
    World 
    Goodbye 
    World 
    
  • процедура это то же самое, как подпрограмма, но менее архаичным.

  • A Функция похожа на процедуру, но вместо того, чтобы просто быть списком команд, она может принимать параметры и возвращать значение. Вы должны быть знакомы с функциями от многих языков, но вот пример в C++:

    #include <iostream> 
    using namespace std; 
    
    int calculate(int a, int b) { 
        return a + b - 2; 
    } 
    
    int main() { 
        cout << calculate(5, 2) << endl; 
        cout << calculate(100, 20) << endl; 
    
        int i = calculate(5, 1); 
        for(int k = 0; k < i; k++) // repeat the next line i times 
         cout << "Hello" << endl; 
    } 
    

    Это печатает:

    1 
    78 
    Hello 
    Hello 
    

    Обратите внимание, что функция calculateне делает саму печать - вместо , он возвращает число, которое main может выбрать для печати или для чего-то другого. Третий вызов calculate возвращает 2, но 2 не печатается - вместо этого он определяет, сколько раз печатается «Hello».

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

  • A метод - это функция, которую можно вызвать на объект. Возможно, вам знакомы нестатические методы с Java или C#. Метод имеет доступ к состоянию объекта, на который он был вызван (который называется приемником ).

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

    Простой пример методов в Java, демонстрируя полиморфизм:

    class Car { 
        int getNumberOfWheels() {return 4;} 
        void printNumberOfWheels() { 
         System.out.println(getNumberOfWheels()); 
        } 
    } 
    
    class HondaCivic extends Car { 
        // no code here 
    } 
    
    class ReliantRobin extends Car { 
        int getNumberOfWheels() {return 3;} 
    } 
    
    class Main { 
        public static void main(String[] args) { 
         Car h = new HondaCivic(); 
         Car r = new ReliantRobin(); 
    
         h.printNumberOfWheels(); 
         r.printNumberOfWheels(); 
        } 
    } 
    

    Это печатает:

    4 
    3 
    

    даже если вы могли бы подумать, что printNumberOfWheels всегда печатает 4 - подклассы могут "перехватывать" в getNumberOfWheels вызов метода.