Объектно-ориентированное программирование
Уроки Открыть IDE
На главную
ООП • Урок 2

Свойства и методы

Как объекты объединяют данные и действия

Напоминание: переменные и функции

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

У каждого из этих инструментов есть фундаментальное ограничение:

  • Переменные могут хранить данные, но не могут ничего с ними делать.
  • Функции могут обрабатывать данные, но не могут их хранить.

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

Объекты объединяют данные и действия

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

Как это происходит? Очень просто: внутри класса можно объявить как переменные, так и функции.

Мяу! Мяу!

Класс Cat определяет набор переменных (name, color, age) и функцию (meow()). Объект my_cat пользуется этими переменными и функцией.

Терминология: свойства и методы

В контексте ООП используются специальные термины:

  • Свойство (поле) — это переменная, объявленная в теле класса.
  • Метод — это функция, объявленная в теле класса.

То есть, у класса Cat есть свойства name, color, age и метод meow().

Пример: класс Brick

Рассмотрим класс Brick (кирпич) со свойствами и методом:

Бам! На голову упал кирпич!
main.idyl:24: warning: ⚠️ Падение кирпичей на голову является опасным для жизни и здоровья. Рекомендуем носить защитное снаряжение.

В этом примере:

  • Свойства: color, mass, material
  • Метод: fall_on_head()
  • Создано два объекта (b1 и b2) с разными характеристиками
  • Метод вызван только у первого кирпича

Важное замечание

Свойства и методы объявляются в теле класса, а используются объектами этого класса.

Попытка обратиться к свойству или методу через сам класс (а не через объект) приведёт к ошибке компиляции:

main.idyl:8: error: 'meow' is not a static member of 'Cat'

Класс — это только чертёж. Чтобы что-то сделать, нужно создать объект (экземпляр) по этому чертежу.