На Горох
Информатика, 9 класс

1.5. Функции в языках объектно-ориентированного и процедурного программирования

"Информатика (изд. "БИНОМ. Лаборатория знаний")", Угринович Н.Д.

Объяснение темы В оглавлении: 1.5. Функции в языках объектно-ориентированного и процедурного программирования

Кратко о теме

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

Объяснение темы

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

Определения и обозначения

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

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

Процедура — подпрограмма, которая выполняет действия, но не возвращает значение как результат выражения. Например, она может вывести сообщение или изменить данные. Процедуры нужны, когда важен сам выполненный шаг, а не значение, которое можно подставить в дальнейший расчёт.

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

Как это устроено

Повторяющееся действие выгодно вынести в отдельную функцию, чтобы не переписывать один и тот же алгоритм в нескольких местах. Когда правило расчёта меняется, достаточно исправить его в одном месте, а не искать копии по всей программе. Такое устройство также упрощает проверку: функцию можно испытать отдельно на разных входных данных. В результате программа становится понятнее и её легче поддерживать.

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

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

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

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

Сравнение функций, процедур и методов

СвойствоФункция в процедурном программированииПроцедураМетод в объектно-ориентированном программировании
НазначениеВыполняет вычисление или другое действие с получением результатаВыполняет команду или последовательность действийВыполняет действие, связанное с объектом или классом
Наличие возвращаемого значенияВозвращает значениеНе возвращает значение для выраженияМожет возвращать значение или не возвращать его
Способ вызоваПо имени функции с аргументами, если они нужныПо имени процедуры как отдельная командаВ контексте объекта или класса
Параметры и аргументыПараметры задают ожидаемые данные, аргументы передают при вызовеМогут быть нужны для выполнения действияМогут передаваться дополнительно к данным объекта
Связь с данными программыОбычно получает данные через параметрыРаботает с переданными или доступными даннымиМожет обращаться к свойствам объекта
Пример результата работыВычисленное большее числоВыведенное сообщениеИзменённое свойство объекта или возвращённое значение

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

Разбор задач

Встроенная функция модуля числа

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

  1. Считаем введённое значение числом и сохраняем его в переменную, например x. Это значение будет входными данными вычисления.
  2. Передаём x встроенной функции abs: записываем вызов abs(x). Здесь abs — имя функции, а x — аргумент, потому что это конкретное переданное значение.
  3. Сохраняем результат вызова в переменную m, а затем выводим m. Так мы явно видим, что функция возвращает число, с которым программа продолжает работу.

Ответ: программа выводит модуль введённого числа; например, для −7 результат будет 7. При вводе положительного числа модуль совпадает с ним, а для нуля остаётся равным нулю. Вызов abs(x) можно было бы использовать непосредственно в команде вывода, поскольку функция возвращает значение.

Функция, выбирающая большее число

Условие: описать собственную функцию, которая принимает два числа и возвращает большее, затем вызвать её несколько раз. В заголовке функции обозначим ожидаемые данные параметрами a и b. Чтобы выбрать ответ, сравним числа условием: если a больше b, вернём a, иначе вернём b.

  1. Описываем функцию max2 с параметрами a и b. Эти имена — параметры, а не сами числа, которые будут сравниваться.
  2. Добавляем условие a > b и две ветви возврата: вернуть a, если условие истинно, иначе вернуть b. Так функция выдаёт ровно одно из переданных значений.
  3. Вызываем max2(4, 9), затем, например, max2(12, 5), и сохраняем или выводим результаты. В первом вызове аргументы 4 и 9 соответствуют параметрам a и b, во втором вызове поступают другие аргументы.

Ответ: функция возвращает 9 для пары 4 и 9, а для пары 12 и 5 — 12. Одно описание можно применять снова и снова, меняя аргументы. Перед вызовом проверяем, что переданы два значения подходящего типа и в нужном порядке.

Метод для объектов с данными

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

  1. Создаём класс «Счёт» со свойством сумма и методом пополнить(значение). Класс задаёт устройство объектов, а свойство хранит данные каждого отдельного счёта.
  2. Внутри метода увеличиваем сумму текущего объекта на переданное значение. Это действие использует и аргумент метода, и уже сохранённое состояние объекта.
  3. Создаём два счёта с разными суммами и вызываем метод у каждого, передавая, например, 100. Затем проверяем их свойства отдельно, чтобы убедиться, что изменились оба объекта, но каждый сохранил собственную сумму.

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

Типичные ошибки

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

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

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

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

Связь с другими темами

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

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

Что запомнить

  • Функция выполняет действия и возвращает значение.
  • Процедура выполняет действия, но не используется как значение выражения.
  • Параметр описывается в заголовке функции, а аргумент передаётся при её вызове.
  • Количество, порядок и типы аргументов должны соответствовать параметрам.
  • Вызов функции можно включать в выражение, если функция возвращает результат.
  • Метод является функцией или процедурой, связанной с объектом или классом.

Частые вопросы по теме

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

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

Почему параметр и аргумент — не одно и то же?

Параметр — имя для ожидаемых данных в описании функции. Аргумент — конкретное значение, которое передают при её вызове.

Можно ли вызвать функцию без аргументов?

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

Зачем нужны собственные функции, если в языке уже есть встроенные?

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

Чем метод объекта отличается от обычной функции?

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

Спросить по теме параграфа

1.5. Функции в языках объектно-ориентированного и процедурного программирования

Учебник

Оглавление →
Предмет
Информатика
Класс
9 класс
Учебник
"Информатика (изд. "БИНОМ. Лаборатория знаний")", Угринович Н.Д.