2010-09-06 3 views
7

Мне было интересно, как вы, ребята, решаете, когда использовать абстрактный или интерфейсный класс во время разработки приложения, так как оба они предоставляют аналогичные функции с незначительной разницей. Я ценю любую помощь. Благодарю.php: Когда использовать абстрактный и интерфейсный класс?

+0

Возможный дубликат [interface vs abstract class] (http://stackoverflow.com/questions/1814821/interface-vs-abstract-class) – VolkerK

+0

Возможный дубликат [PHP: В чем разница между интерфейсом и абстрактным классом ?] (http://stackoverflow.com/questions/1913098/php-what-is-the-difference-between-an-interface-and-abstract-class) – Gordon

ответ

3

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

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

+0

Не понятно, почему: если структура и реализация те же, я склонен использовать абстрактные классы, вы используете абстрактный класс, если нужна такая же структура и реализация? –

+0

@RNKushwaha, я имею в виду, что если я хочу поделиться идентичной реализацией метода/свойства между несколькими наследующими классами, я бы создал абстрактный класс, чтобы реализация могла жить в абстрактном классе. Интерфейсы не позволяют реализовать. Это имеет смысл? –

4

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

Следует помнить, что любой данный класс может «наследовать» (технически реализовать) множество интерфейсов, но только один подкласс (быть абстрактным или нет).

1

Языки, такие как PHP, поддерживают реализацию нескольких интерфейсов, но не наследуют несколько классов, и это часто является частью решения - будет ли ваш класс поддерживать множественные действия (интерфейсы) или будет действовать как один тип вещи (базовый класс)?

Существует также вопрос о том, как реализована базовая функциональность. Если вы используете такой подход, как template method pattern, где у вас есть общий код реализации для всех производных классов, вы захотите использовать абстрактный базовый класс.

6

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

0

Вот хорошая статья, объясняющая концепцию интерфейса и почему ее использовать и как объявить абстрактные классы в PHP. Хотя она не различает, когда использовать обе концепции.
Understanding and Applying (Interfaces) Polymorphism in PHP

0

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

Смежные вопросы