323

ООП сейчас не все используют

Случайно наткнулся на такой комментарий

ООП сейчас не все используют

И прямо полыхнуло.


Где в трёх принципах ООП (наследование, инкапсуляция, полиморфизм) есть что-то про сеттеры, геттеры и деструкторы?


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


Сейчас в трёх китах ООП логика такая:

1. инкапсуляция — это объединение данных (называемых полями или атрибутами) и функций для работы с ними (называемых методами),

2. наследование — возможность породить класс из существующего, взяв себе все поля и методы,

3. полиморфизм — это возможность взаимозаменять объекты в рамках иерархии.


Давайте на примере. У нас собака - это сложная такая штука. Но всю сложность на себя берёт программист, который реализовал класс Собака. У нас есть поля (например, количество лап), есть методы (например, бежать). Вы можете сказать собака.бежать(), при этом внутреннее устройство собаки вас не интересует - в этом смысл инкапсуляции. Некоторые ошибочно говорят про "сокрытие" и начинают про private-public-protected, но этого не требуется. Поэтому, например, в python нет сокрытия, а инкапсуляция всё ещё есть.


Дальше. Мы создали Собаку. Теперь хотим Чихуахуа. Чтобы не переписывать общие места, у нас есть наследование. Мы создаём Чихуахуа(Собака), то есть наследуемся от неё. Теперь мы можем переписать только отличающиеся места (например, изменить метод Бежать так, чтобы Чихуахуа ещё противно шкрябала когтями).


И третье - полиморфизм. Это когда мы можем сделать много собак, и для каждой собаки вызвать метод собака.бежать(). В зависимости от типа собаки (Собака или Чихуахуа) у нас будет вызван нужный метод бежать. То есть на питоне


# создадим пару очаровательных собак
dog_party = [ Dog(), Сhihuahua() ]
# пройдёмся циклом по всем собакам
for dog in dog_party:
.  # у каждой собаки вызовем свой метод бежать
dog.run()
И тогда все собаки из dog_party побегут как умеют. Такие дела.


PS: некоторые относят к китам ООП ещё и абстракцию "для выделения в моделируемом предмете важного для решения конкретной задачи по предмету" (вики). Тут у меня вопрос. Вообще всё программирование состоит в выделении важного и игнорировании неважного независимо от парадигмы. Причём тут ООП? А если мы говорим о выделении сущности собаки в виде полей, то это свойство называется инкапсуляция.


В телеграмм-канале devfm разбираем разные нюансы из жизни разработчика на Python и не только — python, bash, linux, тесты, командную разработку.

Программирование на python

940 постов12K подписчиков

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Вы смотрите срез комментариев. Показать все
13
Автор поста оценил этот комментарий
Исторически ООП задумывалось в таком виде: программа проектируется как множество объектов

Есть "исторически" а есть "практически". История ушла (это где там сообщения ыли ... в smalltalk'е?)


На практике ООП слишком часто использут и злоупотребляют наследованием.


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

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

Или очешь ты дать возможность переопределить метод, но только один а не все сразу.


Ну и так далее...


А в питоне у нас вместо ограничений duck typing...

Иллюстрация к комментарию
раскрыть ветку (8)
7
Автор поста оценил этот комментарий
Только потом появляются костыли в виде type hints в питоне, js мутирует в TypeScript, один только bash держится.
раскрыть ветку (1)
Автор поста оценил этот комментарий

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

1
Автор поста оценил этот комментарий

Как круто ты про Епифанцева и нейросеть запилил "Я записываю" (Stable Diffusion, правило 63)

0
Автор поста оценил этот комментарий

Сейчас наследование стараются заменять композицией, так оказалось лучше


Отсутствие ограничений, даааа. Радостно, конечно, что мне в питоне не нужны

порождающие паттерны, но блин. Цена за это тоже высока

Иллюстрация к комментарию
раскрыть ветку (4)
1
Автор поста оценил этот комментарий

Согласен, композиция это круто.

Отсутствие ограничений даёт проблемы в долгосрочной перспективы. Так как любая ошибка, которую не поймал компилятор - это потенциальный косяк в рантайме. Чем больше свободы, тем меньше ошибок ловит.

Ну хоть у меня это не основной язык, что радует. (*смотрит на страницу питон кода*)

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

Да, в питоне приходится больше обкладываться инструментами - pylint и тесты. Из позитивного - люди вынуждены писать тесты, что есть хорошо :)

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

как ООП'шник со стажем. тесты никуда не деваются. это норма, я бы сказал база для любой разработки. язык, подходы, не особо важны

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

тесты must have. Просто из-за отсутствия компилятора и runtime ошибок легче показать, что без тестов никуда

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества