![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| CyClon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 3 Всего: 4 |
Собственно, долго мучал этот вопрос. Сейчас, наконец-то приобрел в печатном варианте "PHP5: Power Programming". Прочитал про интерфейсы, я так понял что это полностью абстрактные классы, которые помимо названий методов могут включать себя предопределенные константы + класс может основываться сразу на нескольких интерфейсах, в отличие от классов.
Итак, я не понимаю, в чем плюсы использования интерфейсов: Код и использованием интерфейсов:
Код без использования интерфейсов:
Может кто-нибудь привести пример, где интерфейсы действительно полезны? Go discuss! Добавлено через 2 минуты и 13 секунд Вижу пользу в абстрактных классах, когда определен хотя бы один метод. А вот в интерфейсах не вижу, ибо они получается только тупо выступают шаблоном для написания класса :\ Или может это и нужно (при коллективной разработке), и так как я пишу один - мне этого не понять? |
||||
|
|||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: нет Всего: 70 |
||||
|
||||
| CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 3 Всего: 4 |
Ну, лично для меня (на данный момент) это ноль пользы, когда интерфейс задает жестко имена и кол-во определяемых методов. Пожалуй, ценность представляет только возможность определения констант, но это оч. не гибко, так как нужно задавать скалярные величины
ЗЫ: Хочется все-таки увидеть пример, где без интерфейсов было бы тяжко |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: нет Всего: 70 |
||||
|
||||
| CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 3 Всего: 4 |
Ну, я читал об этом, что в других ООП языках интерфейсы выступают в виде множественного наследования
Но, с другой стороны, не может быть такого, чтобы интерфейсы были совсем не нужны |
|||
|
||||
| Daevaorn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: нет Всего: 70 |
да. в тех, где оно не реализовано на классах.
ну ты самуже перечислишь use cases интерфейсов, то что они не нужны тебе лично, не говорит о том что они не нужны совсем. |
||||
|
|||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
CyClon, в PHP очень тяжело оценить полезность интерфейсов, т.к. в PHP отсутствует строгая типизация, а без этого в интерфейсах преимущество над абстрактными классами только в множественной имплементации.
Имхо, хороший пример несомненной пользы интерфейсов - это полное абстрагирование некоего алгоритма (так и назовем его "алгоритмом") от реализации хранения и оперирования данными (назовем ее "системой"). Т.е. есть некая система, которая, неважно как она работает, но требуется некий алгоритм для расчета данных, но при этом нам крайне не желательно что бы алгоритм хоть как-то был завязан на способы оперирования этими данными, т.к. система может меняться (сегодня храним данные в массивах, а завтра в объектах, после завтра вообще бинарном виде). Абстрактные классы тут не подходят, т.к. они опять же будут завязаны с системой, а вот интерфейсы тут идеально подходят. Т.о создаем интерфейс(ы) (в идеале этот интерфейс(ы) никогда не будет меняться), алгоритм получает в качестве параметров объекты реализующие этот интерфейс и он может гарантированно с ним работать и при этом ему все равно как он реализован. В тоже время система знает что надо реализовать этот интерфейс и ей совершенно не важно как он будет использоваться. И что мы имеем в итоге? И система и алгоритм абсолютно автономные друг от друга модули, каждые выполняют свою задачу и не боятся, что в случае изменения одного из них перестанет работать другой. И как вы правильно заметили в коллективной разработке это особенно полезно (когда систему и алгоритм разрабатывают разные люди), но и в одиночной разработке это может сильно упростить жизнь, достаточно будет изменить реализацию интерфейса не переписывая (и даже не затрагивая его вовсе) сам сколько-нибудь большой и сложный алгоритм. |
|||
|
||||
| ewolf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 15.8.2006 Где: г. Москва Репутация: 8 Всего: 18 |
sTa1kEr все очень хорошо рассписал на мой взгляд.
Фича интерфесов для языков со сторой типизации в полном отделении реализации класса от его описания. Интерфейс позволяет не беспокоиться о преобразовании типов перед вызовом методов классов, а также быть увереным, что вызываемый метод реализуется классом. В PHP ввиду отсутствия строгой типизации надобность в интерфейсах практически отсуствует. |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
А разве интерфейсы это не "рычаги управления", которые могут представляться в любых формах, от физических слотов ПК, до пользовательских форм?
И ответ на то, нужны ли эти "рычаги" врядле можно строить основываясь на кол-ве кода. Зачастую лучше один раз написать лишние 100 строк, не ленясь, чем потом каждый раз возращаться к ним и дописывать по 20. Когда нужны четкие рамки кода и легко удерживамая в голове логика, тогда начинаешься задумываться о таких вещах, пока задумываешься о том, как бы не надорваться из-за лишних движений пальцами - можно не заморачиваться. Это сообщение отредактировал(а) BuShaRt - 23.9.2007, 23:58 |
|||
|
||||
| ArNic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
Правильно ли (в итоге) я понимаю, что интерфейсы это:
??? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
ArNic, да.
и еще абстрактные классы, интерфейсы и прочие абстрактные вещи в программировании это не только технические средства реализации, но и средства переноса идей этапа проектирования непосредственно в код; абстрактные вещи, как правило, улучшают декомпозицию проекта. что положительно сказывается на понятности проекта и его управляемости. |
|||
|
||||
| ArNic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
Ну тогда, оказывается я правильно использую абстрактный класс
|
|||
|
||||
| Sentox |
|
||||
|
как то так ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: 7 Всего: 7 |
Уже поднимался такой вопрос.
Интерфейсы это чистейшей воды парадигма безопасного программирования/проектирования, при которой производятся проверки объектов на соответствие к определённой группе типов (классов), имеющих в наличии определённые методы (интерфейсы). Интерфейсы просто определяют требуемые методы в себе, а реализующие классы обязаны их реализовать, сори за тавталогию Всё остальное в ссылке http://forum.vingrad.ru/forum/topic-265286...1912149/15.html. По ссылке добавлю так же: не только type hinting, но и проверка возвращаемых значений-объектов на тип (name interface), если таковые были, гарантирует правильное функционирование потока сценария, так как соответствующие методы гарантировано существуют в объекте. Добавлено @ 23:22
Никогда они не выступали наследованием. Задающими реализацию да, наследованием нет. Добавлено через 12 минут и 21 секунду
Да, но это больше проектрование не жели свойства программирования. Это сообщение отредактировал(а) Sentox - 2.8.2012, 23:27 |
||||
|
|||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
Sentox, программирование включает в себя и проектирование и кодирование. одного без другого не бывает. даже если вы пишете что-то маленькое и процесс проектирования не формализован и не оформлен, проектирование все равно присутствует - в голове. и даже если вы в чистом виде кодер (я такого не встречал), все равно реализация требует некоторого осмысления, т.е. проектирования.
контроль типов в php (не вообще, а именно в php) довольно слабое утешение: в большинстве случаев ошибка типизации и так приведет к ошибкам исполнения, т.е. меняется только сообщение об ошибке и строка, где ошибка возникает. процент обнаружения ошибок (для чего, собственно, и нужна типизация) повышается, увы, незначительно. это не значит что не нужно использовать средства типизации, в т.ч. интерфейсы, это значит что не стоит переоценивать их роль в техническом плане. а в плане проектирования они так же ценны, как и в других языках. Это сообщение отредактировал(а) baldina - 3.8.2012, 12:01 |
|||
|
||||
| Sentox |
|
||||
|
как то так ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: 7 Всего: 7 |
Я склонен отделять программирование от инженерии по, так как на фрилансе пошла тенденция заполучить программиста по зарплате веб разработчика.
Именно в рнр этот механизм позволяет структурировать архитектуру жёстче и безопасней, в ЯП строго этот механизм реализован на уровне самой платформы языка. Так что это и есть основное применение типов, в том числе и интерфейсов. При проектировании само собой разумеется аспект абстрагирования интерфейсов более полезен, но я, опять же в узкоспециализированном понятии программирования, указал использование интерфейсов как свойство безопасного программирования и отнюдь это не только перехват ошибок интерпритатором, эта область обширнее и не следует её сужать до банальных ошибок выполнения. |
||||
|
|||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |