Какой смысл имеют классы
Я недавно стал изучать ООП в pyhton (так как это мой первый язык программирования то этого я вообще ООП не изучал). И у меня возник вопрос - зачем вообще использовать классы если можно просто создавать свою функцию с помощью def.
Ответы (2 шт):
Представьте себе, что для расчета в Вашей функции нужен какой-то сложный коэффициент. Этот коэффициент рассчитывается очень трудоемко и долго.
Теперь представьте себе, что Вашу функцию нужно вызывать очень-очень-очень много раз из разных мест.
Для увеличения производительности этот коэффициент хорошо бы один раз рассчитать, а потом уже использовать в Вашей функции уже рассчитанное значение.
Это рассчитанное значение нужно куда-то записать. Но куда? Можно сделать глобальную переменную. И использовать ее. Но тогда нужно еще предусмотреть метод, который будет рассчитывать этот коэффициент и записывать значение в эту глобальную переменную. Где бы этот метод разместить? Ну, например, в при инициализации программы.
Итого. Мы имеем ТРИ места, которые нужно знать чтобы Ваша функция корректно работала.
- Глобальная переменная
- Инициализирующий метод
- Ваша функция
А теперь представьте себе, что инициализация этого коэффициента зависит от параметров, которые изменяются в Вашей программе... И все усложняется в разы. Инициализирующий метод нужно вызывать каждый раз, когда изменяются параметры. Возможно, понадобится не одна глобальная переменная, а несколько, для хранения коэффициентов для разных параметров... и так далее. Поддержка и модификация такого конгломерата усложняется очень сильно.
Для чего же классы? Класс нужен для того, чтобы этот коэффициент привязать как значение экземпляра этого класса. Рассчитываться этот коэффициент будет при создании экземпляра. При этом можно учитывать разные внешние параметры Вашей программы. В этом же классе реализуется Ваша ФУНКЦИЯ, ради чего все затевалось. Только вызваться она будет не как отдельная глобальная функция, а как функция экземпляра класса.
Что мы имеем в итоге:
- Коэффициент, инициализация и функция привязаны к одному месту - Классу.
- При изменении условий использования коэффициента или функции мы легко можем это сделать в классе, а не искать это по всей программе.
- Повышается надежность программы, так как все связанные вычисления делаются в одном месте.
- При усложнении расчетов может понадобится использование наследования и полиморфизма. Это уже совсем другой уровень абстракции в парадигме ООП.
Классы в пайтон позволяют масштабировать (использовать повторно) те же функции (которые в классе называют методами). Один раз создав класс со своими методами (функциями) вы можете их использовать повторно по необходимости создав объект на основании класса.
Как пример, класс - это чертеж дома, а объект (со своими методами) - это сам дом. И таких объектов (домов) вы можете создавать сколько необходимо.