Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 5, 2017 07:05:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Общие методы для группы классов

FishHook
зачем в нем вообще нужен класс Animal
Это интерфейс. Он используется только для того, чтобы на нём функции писать. Иначе ты никак не поймёшь, какие интерфейсы у тебя есть в программе и что ты можешь реализовывать.
Ты можешь от него и отнаследоваться, но это не нужно.



Отредактировано py.user.next (Окт. 5, 2017 07:10:58)

Офлайн

#2 Окт. 5, 2017 07:10:58

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Общие методы для группы классов

Великолепно! У тебя в программе есть интерфейсы, которые сама программа не использует. Осталось только показать на примере какой-нибудь юз-кейс использования этих интерфейсов программистом.



Офлайн

#3 Окт. 5, 2017 07:13:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Общие методы для группы классов

FishHook
У тебя в программе есть интерфейсы, которые сама программа не использует.
Она их использует, просто в питоне пофиг какой тип передаётся в функцию. А вот в каком-нибудь C++ тебе надо будет от этого класса наследоваться, потому что при вызове функции, которая работает с этим интерфейсом, будет происходить проверка типа. А в питоне этого не надо делать. Ты можешь наследоваться, а можешь не наследоваться. Наследуйся в уме, короче. Не нужно стремиться к идеалу какому-то типа “всё должно использоваться, положено использоваться - должно использоваться”. Зачем тебе делать эту связь через наследование, если в питоне её можно не делать?



Отредактировано py.user.next (Окт. 5, 2017 07:16:30)

Офлайн

#4 Окт. 5, 2017 07:24:19

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Общие методы для группы классов

Объясняю для вновь вошедших.
Фабула такова: примерно полгода назад py.user.next узнал о существовании языка go, и очень негативно отзывался по его поводу, аргументируя тем, что корпорация зла Google не может сделать ничего хорошего, её цель “подсадить” программистов на иглу технологии, а потом коварно изменить лицензию и всех поработить. Но, видимо, почитав доки, наш коллега проникся идеями и теперь демонстрирует любовь к довольно противоречивому подходу, применяемому в голанге. Более того, теперь это уже “современный мир программирования”, а остальное все гавно. Еще более того, писать на других языках нужно ровно так же как на голанге. Ну и что, что в питоне нет интерфейсов, а в го есть? Надо их эмулировать, и насрать, что получаются бессмысленные куски кода, это неважно. В го нет наследования, так оно и нигде не нужно!! Вот так вот! И насрать, что в го наследование заменяется композицией структур. В питоне нет композиции структур? И ладно, пусть их не будет, главное чтобы и наследования тоже не было. А как же повторное использование, как же всякий там DRY? Ну, в голанге при композиции структур методы родителя композируются в методы потомка. Ну да, это похоже на наследование, но нет. А как в питоне то быть с его “несовременной” интерпретацией ООП? А никак! Нет ноженек - нет мультиков!



Офлайн

#5 Окт. 5, 2017 07:25:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Общие методы для группы классов

py.user.next
Она их использует
Покажи каким образом.

Не нужно стремиться к идеалу какому-то типа “всё должно использоваться, положено использоваться - должно использоваться”

Ты серьезно? Предлагаешь писать код, который никак не участвует в программе?



Отредактировано FishHook (Окт. 5, 2017 07:26:10)

Офлайн

#6 Окт. 5, 2017 07:48:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Общие методы для группы классов

FishHook
Покажи каким образом.
В функции вызывается только то, что есть в этом интерфейсе. Функция вообще не знает ни про Dog, ни про Cat. Ты пойми, то, что ты видишь, что оно лежит в одном месте, это оно только здесь в одном месте лежит. В реале оно будет лежать в своих модулях. И для того, чтобы использовать эту функцию, ты должен будешь реализовать этот интерфейс в других там каких-то классах, которые лежат хрен знает где.

FishHook
Но, видимо, почитав доки, наш коллега проникся идеями и теперь демонстрирует любовь к довольно противоречивому подходу, применяемому в голанге.
Go вообще не имеет к этому отношения. Просто было интересно, почему они наследование не сделали изначально, это же типа везде есть. А потом оказалось, что сейчас все отказываются от классического ООП и встаёт вопрос “а нужно ли оно вообще?”. Ты о проблеме ромба читал? Иерархия классов создаёт проблемы.

FishHook
Ну и что, что в питоне нет интерфейсов, а в го есть? Надо их эмулировать
Интерфейсы - это средство для организации полиморфизма. А полиморфизм нужен, чтобы не менять уже написанный код. Ты сотню функций написал для одного интерфейса и они у тебя больше не затрагиваются.

FishHook
А как же повторное использование, как же всякий там DRY?
На практике его нет. Вот у тебя виджет с кучей методов есть, например, но в своей программе ты сколько из них используешь? Ты же не должен их все пробрасывать. Ты его сагрегировал, нужные методы пробросил, используя этот виджет внутри класса, а дальше пользуешься своим классом. И никуда он не привязан, ни к какой иерархии.

FishHook
Предлагаешь писать код, который никак не участвует в программе?
Обычно его пишут и наследуются, но это наследование не является необходимым.


В питоне есть пример полиморфизма: итерабельные объекты. Любой итерабельный объект можно перебрать циклом for. А как сделать объект итерабельным, если он самодельный? Нужно реализовать в нём интерфейс итератора или интерфейс последовательности. А где тут наследование? А нигде. Поэтому утверждение о том, что без наследования нет полиморфизма, - это бред.



Отредактировано py.user.next (Окт. 5, 2017 07:55:37)

Офлайн

#7 Окт. 5, 2017 08:05:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Общие методы для группы классов

py.user.next
что сейчас все отказываются
Вот кто эти все? Вот на днях вышла девятая Джава. Не только наследование не отменили, но и вообще приватные методы в интерфейсах разрешили. А ранее впилили дефолтные реализации в интерфесы. Может быть посмотрим, как дела обстоят с дот нете? В С++? В JS? Кто эти мифические “все”?



Офлайн

#8 Окт. 5, 2017 08:18:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Общие методы для группы классов

py.user.next
Нужно реализовать в нём интерфейс итератора или интерфейс последовательности. А где тут наследование? А нигде. Поэтому утверждение о том, что без наследования нет полиморфизма, - это бред.
Это убогий подход, который работает только в скриптовых языках типа питона. В питоне объект может не реализовывать интерфейса итератора при создании, а потом внезапно взять и начать реализовывать. Просто в него добавили методов в рантайме. Интерпретатор может найти метод по имени, и таким образом решить, реализован интерфейс или нет. Это не есть гуд. Во-первых, вытягивать имена и сигнатуры методов через рефлексию для проверки на соответствие контракту - идея крайне убогая. Во-вторых, проверка на соответствие контракту в рантайме - это даже не серьезно. Тот факт, что в питоне можно так делать, не значит, что нужно. Это дичь и бред.



Офлайн

#9 Окт. 5, 2017 08:19:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Общие методы для группы классов

FishHook
Вот на днях вышла девятая Джава. Не только наследование не отменили
Как они отменят, если много кода с наследованием написано? И его надо поддерживать, продолжая в том же духе.

FishHook
Вот кто эти все?
Натрахавшиеся с иерархией классов (кто разрабатывал в классической ООП парадигме долгое время). Из той же серии разговор об однометодных классах. Если у тебя получается класс, в котором один метод, лучше сделать вместо него функцию отдельную. Хотя в классике у тебя должен быть класс, ведь от него типа может понадобиться унаследоваться. Программирование же продолжает развиваться, стили устаревают. Когда-то ведь и на Паскале все поголовно писали, а сейчас он считается старьём в плане своих возможностей.

FishHook
В JS?
Вот я в книжке по JavaScript это и прочитал. И пример там приведён. Не надо загрязнять дерево типов без нужды.


FishHook
Это убогий подход, который работает только в скриптовых языках типа питона.
Да это везде так работает. Только в языках типа Go, Java интерфейсы есть в виде конструкций. Ты точно так же имплементируешь интерфейс, чтобы сделать объект, подходящим для определённых операций. Не в рантайме, конечно, но в самом коде это так и делается.



Отредактировано py.user.next (Окт. 5, 2017 08:24:04)

Офлайн

#10 Окт. 5, 2017 08:29:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Общие методы для группы классов

py.user.next
Имена, дружище, имена! Конторы, известные ученые, исследовательские группы. Все - это ты и еще один дурачок с sql.ru, от серьезных людей я подобного не слышал.

Давай на примере, не про кошек и собак, а возьмем реальную задачу. На базе питоньего dict нужно реализовать классы DefaultDict и NotNoneKeyDict. Прошу продемонстрировать мастер класс. Без наследования, естественно.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version