Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зачем нужны интерфейсы? Дискуссия 
:(
    Опции темы
CyClon
Дата 23.9.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 3
Всего: 4



Собственно, долго мучал этот вопрос. Сейчас, наконец-то приобрел в печатном варианте "PHP5: Power Programming". Прочитал про интерфейсы, я так понял что это полностью абстрактные классы, которые помимо названий методов могут включать себя предопределенные константы + класс может основываться сразу на нескольких интерфейсах, в отличие от классов.

Итак, я не понимаю, в чем плюсы использования интерфейсов:

Код и использованием интерфейсов:
Код
<?php

interface I0
{
    function sendInfo();
    function getInfo();
}

class C1 implements I0
{
    function sendInfo()
    {
        echo 'sendInfo' . PHP_EOL;
    }
    function getInfo()
    {
        echo 'getInfo' . PHP_EOL;
    }
}

class C2 implements I0
{
    function sendInfo()
    {
        echo 'sendInfo' . PHP_EOL;
    }
    function getInfo()
    {
        echo 'getInfo' . PHP_EOL;
    }
}

$obj1 = new C1;
$obj2 = new C2;

$obj1->sendInfo();
$obj2->getInfo();

?>


Код без использования интерфейсов:
Код
<?php

class C1
{
    function sendInfo()
    {
        echo 'sendInfo' . PHP_EOL;
    }
    function getInfo()
    {
        echo 'getInfo' . PHP_EOL;
    }
}

class C2
{
    function sendInfo()
    {
        echo 'sendInfo' . PHP_EOL;
    }
    function getInfo()
    {
        echo 'getInfo' . PHP_EOL;
    }
}

$obj1 = new C1;
$obj2 = new C2;

$obj1->sendInfo();
$obj2->getInfo();

?>


Может кто-нибудь привести пример, где интерфейсы действительно полезны?

Go discuss!

Добавлено через 2 минуты и 13 секунд
Вижу пользу в абстрактных классах, когда определен хотя бы один метод. А вот в интерфейсах не вижу, ибо они получается только тупо выступают шаблоном для написания класса :\ Или может это и нужно (при коллективной разработке), и так как я пишу один - мне этого не понять? smile


--------------------
user posted image
PM   Вверх
Daevaorn
Дата 23.9.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Цитата(CyClon @  23.9.2007,  19:23 Найти цитируемый пост)
А вот в интерфейсах не вижу, ибо они получается только тупо выступают шаблоном для написания класса

на то он и интерфейс. ещё польза, это полиморфизм. хоят конечно они больше для организации кода.
PM MAIL WWW   Вверх
CyClon
Дата 23.9.2007, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 3
Всего: 4



Ну, лично для меня (на данный момент) это ноль пользы, когда интерфейс задает жестко имена и кол-во определяемых методов. Пожалуй, ценность представляет только возможность определения констант, но это оч. не гибко, так как нужно задавать скалярные величины smile

ЗЫ: Хочется все-таки увидеть пример, где без интерфейсов было бы тяжко smile


--------------------
user posted image
PM   Вверх
Daevaorn
Дата 23.9.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Цитата(CyClon @  23.9.2007,  20:56 Найти цитируемый пост)
ЗЫ: Хочется все-таки увидеть пример, где без интерфейсов было бы тяжко smile 

ты такого не найдешь, кроме как имуляции множественного наследования. в некоторых широко используемых ОО языках вообще нет понятия интерфейс как языковой конструкции.
PM MAIL WWW   Вверх
CyClon
Дата 23.9.2007, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 3
Всего: 4



Ну, я читал об этом, что в других ООП языках интерфейсы выступают в виде множественного наследования smile

Но, с другой стороны, не может быть такого, чтобы интерфейсы были совсем не нужны smile


--------------------
user posted image
PM   Вверх
Daevaorn
Дата 23.9.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Цитата(CyClon @  23.9.2007,  21:05 Найти цитируемый пост)
Ну, я читал об этом, что в других ООП языках интерфейсы выступают в виде множественного наследования

да. в тех, где оно не реализовано на классах.
Цитата(CyClon @  23.9.2007,  21:05 Найти цитируемый пост)
Но, с другой стороны, не может быть такого, чтобы интерфейсы были совсем не нужны

ну ты самуже перечислишь use cases интерфейсов, то что они не нужны тебе лично, не говорит о том что они не нужны совсем.
PM MAIL WWW   Вверх
sTa1kEr
Дата 23.9.2007, 21:34 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



CyClon, в PHP очень тяжело оценить полезность интерфейсов, т.к. в PHP отсутствует строгая типизация, а без этого в интерфейсах преимущество над абстрактными классами только в множественной имплементации.
Цитата(CyClon @  23.9.2007,  19:56 Найти цитируемый пост)
ЗЫ: Хочется все-таки увидеть пример, где без интерфейсов было бы тяжко  

Имхо, хороший пример несомненной пользы интерфейсов - это полное абстрагирование некоего алгоритма (так и назовем его "алгоритмом") от реализации хранения и оперирования данными (назовем ее "системой"). Т.е. есть некая система, которая, неважно как она работает, но требуется некий алгоритм для расчета данных, но при этом нам крайне не желательно что бы алгоритм хоть как-то был завязан на способы оперирования этими данными, т.к. система может меняться (сегодня храним данные в массивах, а завтра в объектах, после завтра вообще бинарном виде). Абстрактные классы тут не подходят, т.к. они опять же будут завязаны с системой, а вот интерфейсы тут идеально подходят. Т.о создаем интерфейс(ы) (в идеале этот интерфейс(ы) никогда не будет меняться), алгоритм получает в качестве параметров объекты реализующие этот интерфейс и он может гарантированно с ним работать и при этом ему все равно как он реализован. В тоже время система знает что надо реализовать этот интерфейс и ей совершенно не важно как он будет использоваться.
И что мы имеем в итоге? И система и алгоритм абсолютно автономные друг от друга модули, каждые выполняют свою задачу и не боятся, что в случае изменения одного из них перестанет работать другой. И как вы правильно заметили в коллективной разработке это особенно полезно (когда систему и алгоритм разрабатывают разные люди), но и в одиночной разработке это может сильно упростить жизнь, достаточно будет изменить реализацию интерфейса не переписывая (и даже не затрагивая его вовсе) сам сколько-нибудь большой и сложный алгоритм.
PM MAIL   Вверх
ewolf
Дата 23.9.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 8
Всего: 18



sTa1kEr все очень хорошо рассписал на мой взгляд.

Фича интерфесов для языков со сторой типизации в полном отделении реализации класса от его описания. Интерфейс позволяет не беспокоиться о преобразовании типов перед вызовом методов классов, а также быть увереным, что вызываемый метод реализуется классом.

В PHP ввиду отсутствия строгой типизации надобность в интерфейсах практически отсуствует.


PM MAIL ICQ   Вверх
BuShaRt
Дата 23.9.2007, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



А разве интерфейсы это не "рычаги управления", которые могут представляться в любых формах, от физических слотов ПК, до пользовательских форм?

И ответ на то, нужны ли эти "рычаги" врядле можно строить основываясь на кол-ве кода. Зачастую лучше один раз написать лишние 100 строк, не ленясь, чем потом каждый раз возращаться к ним и дописывать по 20. 

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

Это сообщение отредактировал(а) BuShaRt - 23.9.2007, 23:58
PM MAIL   Вверх
ArNic
Дата 2.8.2012, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Правильно ли (в итоге) я понимаю, что интерфейсы это: 
  • инструкции по наличию методов и типов входящих переменных
  • скелет для упрощения разработки

???

PM MAIL ICQ   Вверх
baldina
Дата 2.8.2012, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



ArNic, да.
и еще абстрактные классы, интерфейсы и прочие абстрактные вещи в программировании это не только технические средства реализации, но и средства переноса идей этапа проектирования непосредственно в код; абстрактные вещи, как правило, улучшают декомпозицию проекта. что положительно сказывается на понятности проекта и его управляемости.
PM MAIL   Вверх
ArNic
Дата 2.8.2012, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Ну тогда, оказывается я правильно использую абстрактный класс smile когда проектирую класс, а вот после того как туда логику запихиваю он неожиданно превращается в обычный.
PM MAIL ICQ   Вверх
Sentox
Дата 2.8.2012, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Уже поднимался такой вопрос.

Интерфейсы это чистейшей воды парадигма безопасного программирования/проектирования, при которой производятся проверки объектов на соответствие к определённой группе типов (классов), имеющих в наличии определённые методы (интерфейсы).  Интерфейсы просто определяют требуемые методы в себе, а реализующие классы обязаны их реализовать, сори за тавталогию smile
Всё остальное в ссылке http://forum.vingrad.ru/forum/topic-265286...1912149/15.html.

По ссылке добавлю так же: не только type hinting, но и проверка возвращаемых значений-объектов на тип (name interface), если таковые были, гарантирует правильное функционирование потока сценария, так как соответствующие методы гарантировано существуют в объекте.  

Добавлено @ 23:22
Цитата(CyClon @ 23.9.2007,  20:05)
Ну, я читал об этом, что в других ООП языках интерфейсы выступают в виде множественного наследования smile

Но, с другой стороны, не может быть такого, чтобы интерфейсы были совсем не нужны smile

Никогда они не выступали наследованием. Задающими реализацию да, наследованием нет.

Добавлено через 12 минут и 21 секунду
Цитата(baldina @ 2.8.2012,  17:26)
ArNic, да.
и еще абстрактные классы, интерфейсы и прочие абстрактные вещи в программировании это не только технические средства реализации, но и средства переноса идей этапа проектирования непосредственно в код; абстрактные вещи, как правило, улучшают декомпозицию проекта. что положительно сказывается на понятности проекта и его управляемости.

Да, но это больше проектрование не жели свойства программирования.

Это сообщение отредактировал(а) Sentox - 2.8.2012, 23:27
PM MAIL   Вверх
baldina
Дата 3.8.2012, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Sentox, программирование включает в себя и проектирование и кодирование. одного без другого не бывает. даже если вы пишете что-то маленькое и процесс проектирования не формализован и не оформлен, проектирование все равно присутствует - в голове. и даже если вы в чистом виде кодер (я такого не встречал), все равно реализация требует некоторого осмысления, т.е. проектирования.

контроль типов в php (не вообще, а именно в php) довольно слабое утешение: в большинстве случаев ошибка типизации и так приведет к ошибкам исполнения, т.е. меняется только сообщение об ошибке и строка, где ошибка возникает. процент обнаружения ошибок (для чего, собственно, и нужна типизация) повышается, увы, незначительно.
это не значит что не нужно использовать средства типизации, в т.ч. интерфейсы, это значит что не стоит переоценивать их роль в техническом плане. а в плане проектирования они так же ценны, как и в других языках.

Это сообщение отредактировал(а) baldina - 3.8.2012, 12:01
PM MAIL   Вверх
Sentox
Дата 3.8.2012, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Цитата

программирование включает в себя и проектирование и кодирование

Я склонен отделять программирование от инженерии по, так как на фрилансе пошла тенденция заполучить программиста по зарплате веб разработчика.
Цитата


контроль типов в php (не вообще, а именно в php) довольно слабое утешение: в большинстве случаев ошибка типизации и так приведет к ошибкам исполнения, т.е. меняется только сообщение об ошибке и строка, где ошибка возникает. процент обнаружения ошибок (для чего, собственно, и нужна типизация) повышается, увы, незначительно.
это не значит что не нужно использовать средства типизации, в т.ч. интерфейсы, это значит что не стоит переоценивать их роль в техническом плане. а в плане проектирования они так же ценны, как и в других языках.

Именно в рнр этот механизм позволяет структурировать архитектуру жёстче и безопасней, в ЯП строго этот механизм реализован на уровне самой платформы языка. Так что это и есть основное применение типов, в том числе и интерфейсов. При проектировании само собой разумеется аспект абстрагирования интерфейсов более полезен, но я, опять же в узкоспециализированном понятии программирования, указал использование интерфейсов как свойство безопасного программирования и отнюдь это не только перехват ошибок интерпритатором, эта область обширнее и не следует её сужать до банальных ошибок выполнения.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.