![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Modus ponens
|
По поводу аналогии с розеткой: В глобальном плане она более правильная, чем аналогия с разными вещами для глажки, т.как интерфейс потому так и называется, что описывает способ общения с внешним миром (между поверхносями или между рельефами, ну как-то так), и не описывает, что он должен делать или для чего предназначен. CLI (Command Line Interface) не имеет конкретного назначения, вернее его назначение не более конкретно, чем назначение более широкого понятия, которое включает в себя CLI (общение с пользователем посредством командой строки)... Более того, это вполне себе правильно (предположим, в идиотской инструкции) сказать по-английски, что an electronic device interfaces with power supply through a socket in the wall (дословно: электроприбор взаимодействует с источником энергии через розетку на стене
). Говорю я это к тому, что, в первую очередь, когда говорят об интерфейсе, то речь идет именно об интеракции / совместимости, а не о сериализации / категоризации. Второе часто бывает следствием первого, но первое не обязательно приводит ко второму, возможен обратный вариант, когда инструмент задействованный для интеракции приводит к дивергенции а не унификации.В AS интерфейс выполняет дополнительно и функцию сериализации, потому что так реализован в языке, но это побочный эффект, более того, с некоторыми негативными последствиями, такими, как, например, два объекта, в принципе, предоставляющие одинаковый реальный интерфейс, предположим, у обоих наличиствует свойство graphics: Sprite и Shape, только потому что формально не реализуют один интерфейс, не могут быть переданы параметром в одну и ту же функцию. EDIT: Вот, кстати, сейчас подумал: заглушка для розетки будет очень хорошим примером использования интерфейса т.как она никоим образом не является электроприбором, но реализует интерфейс розетки-штекера. ![]()
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 06.06.2011 в 21:55. |
|
|||||
|
Регистрация: Dec 2001
Сообщений: 4,159
|
Цитата:
Если в интерфейсе Drawable есть метод draw, который в одном объекте рисует на экране, а в другом -- заставляет персонажа вынуть меч из ножен -- это не ООП, это шизофрения. Хотя интерфейс вызова соблюден, сигнатура правильная.
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Программируйте в соответствии с интерфейсом, а не с реализацией (с)
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Регистрация: Dec 2001
Сообщений: 4,159
|
Истинно так. Поскольку при использовании объекта нам важно, какой результат мы получим, а не как оно там внутри реализовано.
Если же рассматривать интерфейс тупо как набор сигнатур -- мы получаем бесполезную хрень. Так, один добрый, лично мне известный гражданин спаял клон ZX-Spectrum, за нехваткой комплектующих использовав идентичные разъемы и для видеовыхода, и для питания. Совместимость по сигнатурам была отличная. Но вот при подаче 220В на видеовход компьютер решил, что это нарушение его контракта и сдох нафиг. ![]() Добавлено через 1 минуту ...Liskov substitution principle
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
|
|||||
|
Регистрация: Dec 2008
Адрес: Новосибирск
Сообщений: 30
|
В теме отсутствуют слова полиморфизм, паттерн....
|
|
|||||
|
Modus ponens
|
Crazy: Вот именно что нет
![]() Интерфейс, задумывлася именно для того, что значит это слово, и вариант с омонимами как раз таки и есть демонстрация интерфейса. Это и есть прямая его функция - обеспечить совместимость, не зависимо от контекста, слово draw не вызовет ошибки. То, что в каком-то контексте данное слово будет бессмысленным - это уже вне полномочий и обязаностей интерфейса. Непосредственно для этого случая можно найти несколько применений, когда draw нужно не зависимо от значения, обработать одинаково, ну, хотябы спелчекер. Представте, что мы тестируем какое-то утверждение на истинность. К сожалению, я не знаю точных аналогов в русском языке, но для того, чтобы рассмотреть истино ли утверждение, нам нужно сначала удостоверится, что оно valid, потом, что оно sound, и только потом, мы можем судить о его истинности (это если мы говорим о дедукции). Так вот, по аналогии, интерфейс, это средство позволяющее судить о том, что утверждение valid + sound. Или, правильнее сказать, если мы описываем взаимоотношения между двумя объектами, то интерфейсу достаточна та же мера корректности, которая нужна для того, чтобы сделать вывод о применимости объекта к контексту. Интерфейс не гарантирует полной корректности. Т.е. если вы ожидали, что в электророзетку можно воткнуть исключительно электроприборы, то, очень хорошо, что у вас нет маленьких детей, или вам сильно повезло, и ваши дети не пытались воспользоваться интерфейсом розетки в не предвиденных вами целях. ЗЫ. Java не единственный православный вариант ООП, есть и другие. Мне, например, ближе CLOS, в котором нет специальных интерфейсов на уровне системы. Вместо этого, слово "интерфейс" используется по прямому назначению, например, интерфейс с базой данных, интерфейс с отладчиком и т.п. - это к реплике о том, что значат интерфейсы в ООП.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 06.06.2011 в 23:06. |
|
|||||
|
Регистрация: Dec 2001
Сообщений: 4,159
|
Цитата:
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
![]() Цитата:
__________________
Загружаем картинки, минуя ошибки безопасности |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:28. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|