Зачем нужна сущность интерфейс?

Статус
В этой теме нельзя размещать новые ответы.

Knayz

Новичок
Объясните, пожалуйста, нубасу, почему придумали сущность интерфейс? Почему нельзя было сделать в php вместо интерфейсов абстрактные классы плюс сделать множественное наследование. И объясните если можно чисто логическое отличие интерфейсов от абстрактных классов.
 

Absinthe

жожо
Ради интереса прогуглил - первые пять результатов содержат некорректный ответ.
 

Knayz

Новичок
Подсобите, народ, уже 3 сутки гуглю не могу понять, обзвонил всех коллег никто толком не сказал.
 

Активист

Активист
Команда форума
Интерфейсы не содержат реализаций и служат лишь средством типизации кода, что особенно актуально при коллективной разработке. А также используются в ряде случаев при проектировании приложения для определения принадлежности объекта к тому или иному интерфесу. Впилили это убожество из-за отсутствия множественного наследования. Абстрактные классы не могут полностью заменить интерфейсы лишь потому что нет поддержки множественного наследования. В C++ никаких интерфейсов (как отдельных управляющих структур) нет, поскольку есть множественное наследование и абстрактные классы. В С++ понятие интерфейса воспринимается как алгоритмическая сущность (например "интерфейс доступа к сущности" или аналогичное понятие , как и API, где I - есть морда, в которую надо кричать )
 
Последнее редактирование:

Вурдалак

Продвинутый новичок
Absinthe, AR — не интересуюсь. AR — это полное говно. Да, Doctrine — это не идеальный вариант DM для PHP, но, пожалуй, лучший из существующих.

А что за warning'и?

P.S. А свой энтрырпрайз-проект с best practices ты тоже на AR пишешь? :)))
 

Absinthe

жожо
P.S. А свой энтрырпрайз-проект с best practices ты тоже на AR пишешь? :)))
У меня нет своего проекта сейчас. На работе использую Doctrine.

А что за warning'и?
В случае некорректного использования доктрины она сыпет ворнингами из своих внутренностей, а не исключениями. Отладка превращается в сказку, приходится лезть внутрь, чтобы узнать причину ошибки.

но, пожалуй, лучший из существующих.
Худший, за неимением аналогов :D

Absinthe, AR — не интересуюсь. AR — это полное говно.
Ну конечно, а еще седаны - полное говно, ведь на них даже тонну картошки перевезти нельзя :D
 

Knayz

Новичок
Интерфейсы не содержат реализаций и служат лишь средством типизации кода, что особенно актуально при коллективной разработке. А также используются в ряде случаев при проектировании приложения для определения принадлежности объекта к тому или иному интерфесу. Впилили это убожество из-за отсутствия множественного наследования. Абстрактные классы не могут полностью заменить интерфейсы лишь потому что нет поддержки множественного наследования. В C++ никаких интерфейсов (как отдельных управляющих структур) нет, поскольку есть множественное наследование и абстрактные классы. В С++ понятие интерфейса воспринимается как алгоритмическая сущность (например "интерфейс доступа к сущности" или аналогичное понятие , как и API, где I - есть морда, в которую надо кричать )
Я тоже сказал на собеседовании про множественное наследование. Мне парень сказал, ну сделали бы тогда множественное наследование и абстрактные классы бы юзали вместо интерфейсов - зачем новую сущность интерфейс городить?
 

AmdY

Пью пиво
Команда форума
Я тоже сказал на собеседовании про множественное наследование. Мне парень сказал, ну сделали бы тогда множественное наследование и абстрактные классы бы юзали вместо интерфейсов - зачем новую сущность интерфейс городить?
Собственно так и случилось в java, когда им понадобились итераторы в существующие интерфейсы.
 

Активист

Активист
Команда форума
В педивикии написано хрени, чуть более, чем 9000%, потому не соглашусь. Трейты это имхо именно эмуляция много-наследования.
Какая еще эмуляция много-наследования?? Какое еще имхо. Не вводите в заблуждение людей. В ООП нет понятия эмуляции. Да с такими утверждениями я сомневаюсь в вашем адекватном понимании базовых понятий. Трейт это копи/паста на уровне интерпретатора и костыль в виде резолвера конфликтов, который не стоит использовать. Переопределение метода в ООП - это не только "замена метода", но и возможность обратиться к методу родительских классов.

Признаков наследования у трейтов нет по следующим причинам.
1. В трейтах нет возможности обратиться к родительским методам "родительских трейтов" (в случае с PHP - суперклассу);
2. Трейт != класс, и существовать отельный объект на основе трейта не может;
3. Наличие двух методов с идентичными прототипами в двух трейтах вызовут конфликт;
(..можно продолжать..)

Трейт - это расширение возможностей PHP, позволяющий добавлять типичные методы / свойства в класс без признаков наследования, компонуя объект типичными для системы методами и свойствами.

PS: много где использую трейты в своих проектах, очень удобно компоновать объект из набора типичных для объектов задач. С ними код стал очень компактным и типизированным.
 

HraKK

Мудак
Команда форума
100% у меня на собеседовании был. Даже — 200%.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Активист, свою точку зрения не надо возводить только в ранг абсолютной истины, ок?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху