Здесь я собираюсь дать другой ответ: практически, на самом деле, нет никакой разницы , за небольшим исключением, что «метод» обычно относится к подпрограмме, связанной с объектом в ОО-языках.
Термины «процедура, функция, подпрограмма, подпрограмма и метод» на самом деле означают одно и то же: вызываемая подпрограмма в более крупной программе. Но трудно придумать определение, которое охватывает все варианты использования этих терминов, потому что они не используются единообразно в разных языках программирования или парадигмах.
Вы могли бы сказать, что функция возвращает значение. Хорошо, следующая функция C не возвращает значение:
void f() { return; }
... но я сомневаюсь, что вы найдете кого-нибудь, кто назвал бы это процедурой.
Конечно, в Pascal процедуры не возвращают значений, а функции возвращают значения, но это всего лишь отражение того, как был разработан Pascal. В Фортране функция возвращает значение, а подпрограмма возвращает несколько значений. Тем не менее, ничто из этого не позволяет нам придумать «универсальное» определение этих терминов.
Фактически, термин «процедурное программирование» относится к целому классу языков, включая C, Fortran и Pascal, только один из которых фактически использует термин «процедура» для обозначения чего-либо.
Так что ничего из этого не соответствует действительности. Единственным исключением, вероятно, является «метод», который, кажется, почти полностью используется с языками ОО, ссылаясь на функцию, связанную с объектом. Хотя даже это не всегда соответствует. Например, в C ++ обычно используется термин «функция-член», а не метод (даже несмотря на то, что термин «метод» вошел в общеупотребительный язык C ++ среди программистов).
Дело в том, что все это не соответствует действительности. Он просто отражает терминологию, применяемую теми языками, которые популярны в то время.