Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 9, 2011 23:24:24

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Программные интерфейсы в Python.

Kogrom
Но в любом случае, без рассмотрения утиной типизации и abc - это прыжок через 3 ступеньки.
Верно сказано!



Офлайн

#2 Фев. 10, 2011 12:03:35

Subideal Ox
От:
Зарегистрирован: 2010-11-23
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Программные интерфейсы в Python.

slavka
И так, есть ли в Python программные интерфейсы?
Насколько я понимаю, интерфейсы в Delphy, Java и C# - это костыль, необходимость которого вызвана отсутствием в этих языках множественного наследования и одновременным желанием это множественное наследование использовать. В python множественное наследование есть (как, например, в C++ или Eiffel). Поэтому и костыли не нужны.

Итого - для использования “аналогичного функционала” (который называется полиморфизмом) пользуйтесь множественным наследованием.



Офлайн

#3 Фев. 10, 2011 12:23:43

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Программные интерфейсы в Python.

Subideal Ox
Насколько я понимаю, интерфейсы в Delphy, Java и C# - это костыль, необходимость которого вызвана отсутствием в этих языках множественного наследования и одновременным желанием это множественное наследование использовать. В python множественное наследование есть (как, например, в C++ или Eiffel). Поэтому и костыли не нужны.
Итого - для использования “аналогичного функционала” (который называется полиморфизмом) пользуйтесь множественным наследованием.
Почему вы рассматриваете интерфейсы в Java и C# как костыль, мне непонятно. Интерфейс описывает взаимодействие реализации (класса) с внешним миром, для чего он и создавался. Эти языки изначально спроектированы так, чтобы не использовать множественное наследование.

Проблема множественного наследования в C# и Java (если уж так нужно их использовать) решается несколькими путями:
1. Множественное наследование интерфейсов.
2. Вложенные классы.
3. Статические классы, вложенные в интерфейсы.
Может есть и другие пути, но они мне неизвестны.



Офлайн

#4 Фев. 10, 2011 12:35:18

Борисенков Сергей
От:
Зарегистрирован: 2011-01-11
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

Программные интерфейсы в Python.

Здесь вроде неплохо разжевано:
http://habrahabr.ru/blogs/python/72757/



Офлайн

#5 Фев. 10, 2011 12:58:06

Subideal Ox
От:
Зарегистрирован: 2010-11-23
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Программные интерфейсы в Python.

regall
Почему вы рассматриваете интерфейсы в Java и C# как костыль, мне непонятно.
А почему в Java и C# нет множественного наследования?



Офлайн

#6 Фев. 10, 2011 13:08:02

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Программные интерфейсы в Python.

Subideal Ox
А почему в Java и C# нет множественного наследования?
Спросите у Гослинга =). Насколько я помню основным аргументом при отказе от множественного наследования в Java была так называемая “diamond problem” в C++. То есть когда есть иерархия классов типа такой, и классы B и C содержат методы с одинаковыми именами:
        A
/ \
/ \
B-----C
\ /
\ /
D
Когда иерархия классов большая и разветвленная такая проблема часто возникает. В Java отказались от этого, чтобы не было соблазна напроектировать такие проблемы.

В Python есть MRO, который превращает иерархию в линейную структуру, таким образом класс D получит метод из класса C, а метод из класса B будет упущен.

Единственная возможность получить MRO конфликт - построить такую структуру:
 -----------
| |
| O |
| / \ |
- X Y /
| / | /
| / |/
A B
\ /
?
Впрочем, это хорошо описано здесь: http://www.python.org/download/releases/2.3/mro/, так что не буду углубляться.



Офлайн

#7 Фев. 10, 2011 14:55:51

Subideal Ox
От:
Зарегистрирован: 2010-11-23
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Программные интерфейсы в Python.

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

Но если решения так просты, то почему в Java нет MRO? Почему я должен возиться с интерфейсами (т.е. проблемы с повторным использованием кода), или со вложенными классами (проблемы с полиморфизмом), или искать какие-то синтетические решения?



Офлайн

#8 Фев. 10, 2011 15:26:51

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Программные интерфейсы в Python.

Subideal Ox
Но если решения так просты, то почему в Java нет MRO?
Subideal Ox, уж извините, это уже вопросы не ко мне, так как я не очень компетентен в плане архитектуры и устройства JVM, не тянуло меня никогда лезть и копаться там =). Единственное, что могу добавить, что Java всегда борется с повышением быстродействия и т.д. и зачастую архитектурные решения Java принимаются под давлением потребностей повышения скорости выполнения. Такие вещи уже надо смотреть в конкретных реализациях JVM, а именно места, где выполняются блоки статической инициализации и загрузки классов в JVM.



Офлайн

#9 Фев. 10, 2011 15:42:04

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Программные интерфейсы в Python.

regall
Единственное, что могу добавить, что Java всегда борется с повышением быстродействия
Это в смысле каждый раз, когда программы начинают работать быстрее с приходом нового поколения железа - Ява включается в борьбу и возвращает такие привычные тормоза на их законное место? :lol:



Офлайн

#10 Фев. 10, 2011 15:51:52

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Программные интерфейсы в Python.

Андрей Светлов
Это в смысле каждый раз, когда программы начинают работать быстрее с приходом нового поколения железа - Ява включается в борьбу и возвращает такие привычные тормоза на их законное место?
:lol: Блин. Очепятался, бывает =(



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version