Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Зачем нужны интерфейсы?
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Зачем нужны интерфейсы?

Страниц (2): [1] 2 »
 

1. Opposite - 09 Марта, 2012 - 18:56:12 - перейти к сообщению
Сколько уже пишу на php, да и на Java, не совсем понимаю смысл интерфейсов.
Они кроме, как для описания методов класса, еще для чего-нибудь нужны?
2. Okula - 09 Марта, 2012 - 19:18:36 - перейти к сообщению
Opposite, восновном для описания методов класса. Что бы в дальнейшем облегчить разработку приложения.
Так же даёт возможность определить дополнительные соглашения которым должен следовать класс. Любой класс который "заявляет" о поддержке того или иного интерфейса должен реализовывать все константы интерфейса, и обязан содержать реализацию всех функций данного интерфейса.
3. Opposite - 09 Марта, 2012 - 19:33:12 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  дополнительные соглашения

В PHP это как реализуется?
(Добавление)
Я так понимаю, никак, ибо не сталкивался ни разу.
Я писал интерфейсы, понял, что класс должен реализовать все его методы, вплоть до аргументов. Данные интерфейс хранить не может. Что за соглашения? Я вот этого не понимаю. Хочешь сказать, можно наложить условия на аргументы методов так, чтобы php генерировал предупреждение о несоответствии? Или как понимать фразу "соглашения" ?
4. alexiy - 09 Марта, 2012 - 19:53:54 - перейти к сообщению
насколько я знаю, в некоторых языках исключено множественное наследование, в связи с чем используются интерфейсы
5. Okula - 09 Марта, 2012 - 19:55:26 - перейти к сообщению
Под словом "соглашение" как раз и понимается полное соответсвие аргументов и имён в классе реализующем данный интерфейс.
К тому же в дальнейшем можно проверять реализует данный класс какой-либо интерфейс. Делается это с помощью оператора instanceof
(Добавление)
alexiy пишет:
насколько я знаю, в некоторых языках исключено множественное наследование, в связи с чем используются интерфейсы

Да, интерфейсы в PHP применяются как аналог множественному наследованию.
6. LIME - 09 Марта, 2012 - 19:57:57 - перейти к сообщению
уже обсуждалось
может разъяснит http://forum.php.su/topic.php?fo...2&topic=1400
7. Opposite - 09 Марта, 2012 - 20:03:25 - перейти к сообщению
Okula пишет:
Да, интерфейсы в PHP применяются как аналог множественному наследованию.
Но интерфейсы же не позволяют реализовывать в своем теле методы? Какое может быть наследование?
(Добавление)
Наследуют методы и поля, а интерфейс не позволяет в себе реализовать ни того, ни другого
8. Okula - 09 Марта, 2012 - 20:09:26 - перейти к сообщению
Я и не говорю что они позволяют реализовать множественно наследование. Они являются аналогом, что не одно и то же.
Интерфейсы поддерживают множественное наследование, что позволяет более точно указать какие методы должны быть реализованы в данном классе.
9. Opposite - 09 Марта, 2012 - 20:11:52 - перейти к сообщению
Okay. Вроде понял. Хм
Скажем так, они нужны другим прогерам для того, чтобы все работало корректно после того, как они засунут туда свои шаловливые ручонки
(Добавление)
Абстрактные классы в этом плане мощнее будут, хотя и назначение у них разное ... абстрактные классы - это почти те же интерфейсы ( необходимо соблюдать соглашения ), которые предоставляют плюс ко всему общие методы и поля, которые можно перегружать. Правильно?
10. LIME - 09 Марта, 2012 - 20:15:39 - перейти к сообщению
хороший способ раздавать задания в команде
старший пишет интерфейсы и мальчики/девочки их реализуют
а пока суть да дело можно писать на их основе код зная какие методы будут
11. caballero - 09 Марта, 2012 - 20:23:36 - перейти к сообщению
Цитата:
Интерфейсы поддерживают множественное наследование

никакое наследование они не поддерживвают.
классы имплементируют интерфейсы а не наследуют
12. Opposite - 09 Марта, 2012 - 20:24:44 - перейти к сообщению
Цитата:
Интерфейсы поддерживают множественное наследование

Да я понял, что они хотели сказать. Это не суть.
13. Okula - 09 Марта, 2012 - 21:08:56 - перейти к сообщению
caballero, имеется ввиду:
PHP:
скопировать код в буфер обмена
  1. interface oneInterface {
  2.     function getOne();
  3. }
  4.  
  5. interface twoInterface {
  6.     function setTwo($name, $val);
  7. }
  8.  
  9. class Numb implements oneInterface, twoInterface {
  10.     function getOne() {
  11.         // put you php code
  12.     }
  13.     function setTwo($name, $val) {
  14.         // put you php code
  15.     }
  16. }
14. caballero - 09 Марта, 2012 - 21:17:07 - перейти к сообщению
Цитата:
caballero, имеется ввиду:

я понял что имеется ввиду но это не наследование - просто реализация нескольких интерфейсов.
в интерфейсе нечего наследовать.

хотя в некоторых языках интерфейсы есть типа наследование интерфейсов друго от друга - но это уже от лукавого
15. Мелкий - 09 Марта, 2012 - 21:54:04 - перейти к сообщению
Да нет и у интерфейсов множественного наследования. Так, фикция.
Попробуйте сделать 2 интерфейса с одинаковым именем метода.

 

Powered by ExBB FM 1.0 RC1