Змеиное ООП. Начало
TL;DR В этой статье кода не будет, тут мы поговорим об ООП в целом
Программирование - процесс, который сочетает в себе технические навыки и элемент творчества. Поэтому нет рецепта, как создать идеальную программу, но есть подходы, которые упрощают этот процесс и проверены временем. Одним из таких подходов является объектно ориентированное программирование(ООП). Зачем оно нужно? Если коротко, то чтобы вашу программу было потом легче поддерживать, а добавление функционала не было связано с приступами боли.
3 столпа
Есть 3 принципа, которые являются основой ООП и которые надо держать в голове, когда пишешь программу в этом стиле.
- Наследование
- Инкапсуляция
- Полиморфизм
Теперь обо всём поподробнее.
Как легко понять из названия, мы будем работать с объектами. Объект - сущность, обладающая какими-то характеристиками, которые определяются его классом. Например стол, который стоит у вас в комнате. (Почему бы и нет?) В мире существует великое множество столов, все из которых похожи, но у них есть различия. Таким образом, стол - это класс, то есть тип объекта. У каждого стола есть ножки и крышка, но вот их геометрия и материалы у всех столов разные. Так вот, ваш экземпляр - объект общего класса "стол". Теперь давайте вернёмся к тем трём умным словам, которые я написал выше.
Наследование
Есть разные виды столов, допустим письменный. Это же стол? Конечно. Но вот он отличаются от остальных. Или например кухонный. Можно рассматривать их как отдельные классы. Но это же всё столы и ножки с крышкой никто не отменял. Поэтому эти классы являются "потомками" более общего класса "стол". Суть наследования в том, чтобы похожие, но отличающиеся классы представлять потомками какого-то более общего, чтобы не писать одни и те же свойства 2 раза, а просто "унаследовать" их с родительского.
Инкапсуляция
Скажите честно, вы знаете как устроен ваш стол, из какого дерева сделан и каким образом прикручены винтики? Нет? Вот и я тоже. Но нас это с вами не волнует, главное, чтобы за ним можно было писать или есть. А было бы вам приятно, если бы из крышки был виден гвоздь? Нет конечно, он ведь для нас бесполезен, а нужен только для того, чтобы стол держался. В этом и суть инкапсуляции - скрывать детали реализации от пользователя. То есть когда кто-то будет использовать объекты, которые вы создали, нельзя будет понять, какие "гвозди", то есть способы реализации вы использовали. Это незачем знать тому, кто будет использовать ваш код, а вот запутать его это может.
Полиморфизм
Как уже упоминалось, у разных столов разное предназначение. Например за одним мы едим, а за другим пишем. Однако никто не запрещает нам делать и то и то за одним. У нас же нет отдельных столов для того чтобы писать письма и чтобы подписывать бумаги. Один стол вполне справляется с этой целью. Это и есть полиморфизм, когда один и тот же участок кода может использоваться с разными целями, если он для того подходит. Не надо его копировать-вставлять, чтобы использовать по-другому.
Заключение
Теперь вы должны примерно представлять суть ООП. Разные языки предоставляют разные возможности для реализации этих принципов. В следующих статьях мы поговорим о языке Python и как в нём можно создавать классы и объекты.
Статья для группы SnakeBlog