Сомневаетесь в использовании интерфейса? - PullRequest
2 голосов
/ 15 февраля 2010

Всякий раз, когда я слышу об интерфейсах, у меня возникают следующие сомнения.

У меня есть следующий интерфейс

interface Imammals
          {
           walk();
           eat();
           run();
          }

и у меня есть два класса Человек и Кошка , которые реализуют этот интерфейс.

В любом случае, функциональность методов будет отличаться в обоих классах.

Например: walk (), функциональность отличается, так как кошка использует четыре ноги, а человек использует две ноги

Тогда, зачем мне нужен общий интерфейс, который ТОЛЬКО объявляет эти методы? Мой дизайн здесь неисправен?

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

Но здесь интерфейсы помогают нам просто объединить объявления методов или есть что-то еще внутри?

РЕДАКТИРОВАТЬ: ходьба (), еда (), бег () был изменен на ходьба (), есть (), бегать () и млекопитающие были изменения для имаммалов.

Ответы [ 14 ]

0 голосов
/ 15 февраля 2010

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

Это не всегда возможно, но решает многие проблемы.

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

0 голосов
/ 15 февраля 2010

Цель интерфейсов - рассказать вам , что делает класс, а не как он это делает.

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

0 голосов
/ 15 февраля 2010

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

Чтобы продолжить ваш пример, вы можете представить себе тип Alien, который, вероятно, будет иметь те же методы, но не будет соответствовать вашей иерархии наследования.

0 голосов
/ 15 февраля 2010

Конечно, walking(), eating() будут иметь различную реализацию у разных животных. Но все они walk, run и т. Д. Это все, что говорит интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...