Чем отличается метод от функции в java
Перейти к содержимому

Чем отличается метод от функции в java

  • автор:

Разница между методом и функцией

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

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

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

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

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

PS: Это касается любых языков программирования, поддерживающих концепцию объектно-ориентированного программирования.

Чем отличаются понятия функции, процедуры и метода в программировании?

Периодически вижу все 3 определения. Это одно и то же или же что-то разное, и какое из понятий правильнее всего употреблять?

  • Вопрос задан более трёх лет назад
  • 86152 просмотра

Комментировать
Решения вопроса 2

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

Ответ написан более трёх лет назад
Нравится 30 5 комментариев

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

MaxLich, Ничего я не забыл. Это не имеет отношения к вопросу. Вопрос был: чем отличаются. А то что функция/процедура/метод имеет имя и список рациональных параметров это и так очевидно. Скобки — это вообще деталь реализации.

mashletov

«Процедура», имхо, устаревшее понятие. Просто функция, которая не возвращает ничего (void). Это еще во времена Delphi процедура имела отдельное ключевое слово.

D3lphi, Ну я-то про определения, которые Вы дали. Это не просто подпрограмма, а подпрограмма, имеющая имя. Инициализатор (в джаве), например, тоже блок кода, подпрограмма, но имени не имеет, и параметров тоже, поэтому это не функция/метод.

MaxLich, это не определения, а лишь то, чем эти понятия отличаются друг от друга.
Функция/процедура не обязана иметь имя — анонимные функции, как пример.

jenki

Всё это можно свести к понятию — подпрограмма. Бывает, читаешь книгу, там автор пишет о своём куске кода как о методе, потом его начинает называть функцией.

Ответ написан более трёх лет назад
Комментировать
Нравится 6 Комментировать
Ответы на вопрос 4

mindtester

# @mindtester
http://iczin.su/hexagram_48

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

как бы да, но. только на самом начальном этапе, что бы угомонить хаос в голове новичка ))

в дальнейшем, все интереснее все эти понятия контекстно зависимые, контекстом является парадигма программирования и/или конкретный язык

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

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

но .. есть много языков, где понятия метод нет вообще

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

2 — из контекста языков:

понятие процедура в явном виде, чаще всего употребляют преподаватели, которые сами учились на языках типа Fortran, Pascal или родственных, и либо не имели другого опыта вообще, либо иной опыт был на много скромнее

сейчас доминируют языки, основывающиеся на Си синтаксисе, даже java и js в данном вопросе станут родственниками классического Си

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

смешение всего этого на примере C# — в этом языке, все есть объект. а любой исполняемый код это метод, и методы реализуются только функциями (в тч void функциями)

Функция и Методы в Java

Добрый день скажите Как создаётся функция в java дайте пару наглядных примеров, и какая разница между функцией и Методом, заранее спасибо.

Комментарии (7)

  • популярные
  • новые
  • старые

Для того, чтобы оставить комментарий Вы должны авторизоваться
21 ноября 2020, 21:11

Скажите А конструктор и Метод ? вчеём разница, в возврате згачения?? Метод возвращает а Конструктор нет ?? Зарание спасибо.

Justinian Judge в Mega City One Master
21 ноября 2020, 21:17

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

class Cat  public Cat(String name)  ... > >

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

Cat cat = new Cat("Vaska");

при создании экземпляра мы указываем аргумент «Васька» который и попадет в конструктор при создании экземпляра. Метод может быть вызван бесконечное количество раз. Конструктор отработает для конкретного экземпляра только один единственный раз — при создании экземпляра объекта

Justinian Judge в Mega City One Master
21 ноября 2020, 20:49

Функция это общекомпьютерный термин, обозначающий подпрограмму, структурно обособленный небольшой кусок кода. В джаве функции называются методами. В каких-то языках программирования это функции, в каких-то называют методы. В джаве это методы. Что можно почитать на тему.. — https://javarush.com/groups/posts/2757-chto-takoe-metodih-v-java — https://javarush.com/groups/posts/1950-metodih-ikh-parametrih-vzaimodeystvie-i-peregruzka — https://javarush.com/groups/posts/1381-metodih-v-java Почитай, будут вопросы — задавай.

Wladyslaw Java Developer Master
22 ноября 2020, 09:00

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

Justinian Judge в Mega City One Master
22 ноября 2020, 10:06

Не вроде 🙂 Есть синтаксис языка, есть JLS. На уровне синтаксиса, с которым мы работаем, подпрограммы в джаве называются методами. Это чисто название — процедуры в паскале, функции в С, методы в джаве. Нужно очень четко расграничивать, где мы говорим о языке как синтаксисе и конкретно о джаве. И где мы выходим на другой уровень абстракции, где называем классы — программами , методы — функциями, и рассуждаем в общекомпьютерной плоскости, что такое функции, что такое чистые функцие и тд. Я часто встречаю, как те у кого бекграунд на других языках,, то методами называют, т о функциями, странно, почему не процедурами 🙂 Это не является корректным в принципе. В каждом языке свои правила, и взаимозаменяемое использование терминов может путать и других и себя. Ну назвали класс классом, метод методом, пусть так и будет. Смешивать различные уровни абстракции не является корректным занятием с точки зрения формальной логики. Оно может и допустимо иногда но в ограниченном количестве случаев. п.с. кстати, конструкторы это по сути методы, точно так же, как методы — функции. Но опять же, если все начнут на конструкторы методы говорить ) поправил метод, вызвал метод, опять же, по сути это верно. Но путаницу вызвать может. Я вот об этом аспекте имею ввиду

Wladyslaw Java Developer Master
22 ноября 2020, 10:16

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

Justinian Judge в Mega City One Master
22 ноября 2020, 10:32

quod licet jovi или как там )) Я исходил из того, что на начальном этапе нужно четко разграничить терминологию, чтобы не путаться. Поэтому тебе можно 🙂 Тем кто только начал изучать, нет 🙂 Они должны фокусироваться на главном, и так слишком всего много на них наваливается, глаза разбегаются, важно дать/найти какую-то стабильность, островки понимания, и постепенно расширять плацдарм. А тут только копни, методы, функции, чистые функции, виртуальные функции и тд ))

  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
  • Задачи-игры

Сообщество

JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.

Статический метод vs функция в ООП: разница и определения

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

Скопировать код

class Calculator < public static int add(int a, int b) < // Когда числа находят друг друга. они объединяются! return a + b; >> // Применение метода: int sum = Calculator.add(5, 3); // sum = 8. И это работает даже с еще бОльшими числами!

Метод add — статический, и поэтому он принадлежит классу Calculator . Он обладает всеми чертами метода: параметры, возвращаемый тип и тело функции.

Статические vs экземплярные методы: разница в формате видимости

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

Классы в Java как объекты

В Java класс обычно используется как конструктор объектов. Но если рассматривать класс как пространство имен, он становится похожим на объект. Поэтому можно утверждать, что статические методы — это методы первоначального ‘объекта класса’.

Соблюдение спецификации Java

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

Визуализация

Вот наглядный пример, объясняющий, почему статический метод является методом:

Скопировать код

�� Статический метод: Это как ***общественная библиотека***, которая открыта для **всех**. Вы можете пользоваться книгами, не являясь их владельцем; это **общие ресурсы**. �� Метод экземпляра: Это аналогично вашей ***собственной книжной полке***. Книги принадлежат лично вам; чтобы пользоваться ими, 'полка' должна всегда быть рядом с вами.

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

Особенности и ограничения статических методов

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

Лучшие практики и распространенные заблуждения

Статические методы зачастую выполняют роль «вспомогательных» и не влияют на состояние объекта. Распространенное заблуждение состоит в том, что такие методы кажутся менее ‘методичными’, чем методы экземпляра, однако это не так. Они просто используют другой метод доступа и вызова.

Терминология Java: метод в отличие от функции

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

Изучение ООП: разделение классов

Для освоения принципов ООП важно понимать разницу между статическими (объекты класса) и экземплярными методами (объекты экземпляра). Четкое понимание различий в доступе и вызове методов помогает избежать путаницы и способствует созданию логичного и структурированного кода.

Полезные материалы

  1. Понимание членов класса (учебные пособия Java™) — Авторитетный ресурс Oracle, подробно объясняющий переменные класса и их поведение.
  2. Статические методы против методов экземпляра в Java — GeeksforGeeks — Внимательное сравнение статических и экземплярных методов с примерами.
  3. Методы в Java — TutorialsPoint — Быстрый обзор различных типов методов в Java.
  4. Educative: Интерактивные курсы для разработчиков по программному обеспечению — Полное руководство по ключевому слову static в Java и вариантам его применения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *