Процедурный и объектно-ориентированный подходы
В процедурном подходе можно различить два отдельных и совершенно разных мира: мир данных и мир кода. Мир данных заполнен переменными различного рода, а мир кода населен кодом, сгруппированным в модули и функции.
Функции могут использовать данные, но не наоборот. Кроме того, функции могут злоупотреблять данными, то есть использовать значение недопустимым образом (например, когда функция синуса получает баланс банковского счета в качестве параметра).
В прошлом мы говорили, что данные не могут использовать функции. Но так ли это? Существуют ли какие-то особые виды данных, которые могут использовать функции?
Да, есть - они называются методами. Это функции, которые вызываются из данных, а не наравне с ними. Если Вы видите это различие, Вы сделали первый шаг в объектном программировании.
Объектный подход предлагает совершенно другой способ мышления. Данные и код объединены в одном мире, но разделены на классы.
Каждый класс подобен рецепту, который можно использовать, когда вы хотите создать полезный объект (отсюда и название подхода). Вы можете создать столько объектов, сколько Вам нужно для решения Вашей задачи.
Каждый объект имеет набор характеристик (они называются свойствами или атрибутами - мы будем использовать оба слова как синонимы) и способен выполнять набор действий (которые называются методами).
Рецепты могут быть изменены, если они не подходят для конкретных целей и, по сути, могут быть созданы новые классы. Эти новые классы наследуют свойства и методы от оригиналов и обычно добавляют некоторые новые, создавая новые, более специфические инструменты.
Объекты - это воплощения идей, выраженных в классах, например, чизкейк на тарелке - воплощение идеи, выраженной в рецепте, напечатанном в старой кулинарной книге.
Объекты взаимодействуют друг с другом, обмениваясь данными или активируя свои методы. Правильно сконструированный класс (и, следовательно, его объекты) способен защищать важные данные и скрывать их от несанкционированных изменений.
Между данными и кодом нет четкой границы: они живут как единое целое в объектах.
Все эти понятия не так абстрактны, как Вы можете сначала подумать. Напротив, все они взяты из опыта реальной жизни и, следовательно, чрезвычайно полезны в компьютерном программировании: они не создают искусственную жизнь - они отражают реальные факты, отношения и обстоятельства.