2016-07-17 3 views
-1

Я нашел следующие определения из Интернета, и оба звука похожи на меня:В чем разница между абстракцией и интерфейсом?

Абстракция: абстракция - еще одна хорошая особенность OOPS. Абстракция означает отображение клиенту объекта только необходимых деталей. Вы знаете внутренние детали монитора вашего ПК? Что произойдет, если вы включите монитор? Имеет ли это значение для вас, что происходит внутри монитора? Нет. Правильно. Важной вещью для вас является погода. Монитор включен или нет. Когда вы меняете снаряжение своего автомобиля, вы действительно беспокоитесь о внутренних деталях вашего автомобиля? Нет, но что для вас важно, что Gear должен измениться, вот и все! Это абстракция; показать только те детали, которые важны для пользователя. Предположим, у вас есть метод «CalculateSalary» в вашем классе Employee, который принимает параметр EmployeeId как параметр и возвращает зарплату сотрудника за текущий месяц как целочисленное значение. Теперь, если кто-то хочет использовать этот метод. Ему не нужно заботиться о том, как объект Employee рассчитывает заработную плату? Единственное, что ему нужно беспокоиться, это имя метода, его входные параметры и формат результирующего члена, правильно? Таким образом, абстракция говорит только о деталях, которые касаются пользователя (клиента) вашего объекта. Таким образом, клиент, который использует ваш класс, не должен знать внутренние детали, например, как вы выполняете операции класса? Ему нужно знать немного деталей. Это, безусловно, помогает в повторном использовании кода.

Интерфейс: Интерфейс представляет собой описание действий, которые может выполнять объект ... например, когда вы переключаете переключатель света, свет продолжается, вам все равно, как это делается. В объектно-ориентированном программировании интерфейс представляет собой описание всех функций, которые должен иметь объект для того, чтобы быть «X». Опять же, в качестве примера, все, что «ACTS LIKE» светло, должно иметь метод turn_on() и метод turn_off(). Цель интерфейсов - позволить компьютеру обеспечивать соблюдение этих свойств и знать, что объект TYPE T (независимо от интерфейса) должен иметь функции, называемые X, Y, Z и т. Д.

Интерфейсы на объектно-ориентированных языках программирования

Интерфейс представляет собой структуру/синтаксис программирования, который позволяет компьютеру выполнять определенные свойства объекта (класса). Например, скажем, у нас есть класс автомобилей, класс скутеров и класс грузовиков. Каждый из этих трех классов должен иметь действие start_engine(). Как «двигатель запускается» для каждого транспортного средства остается для каждого конкретного класса, но тот факт, что они должны иметь действие start_engine, является доменом интерфейса.

Разве оба объяснения не говорят одно и то же? Так они же или разные?

+0

Я понимаю «абстракцию» более общее слово (более абстрактное кстати), 1. теоретический способ ООП думать о проблеме. 2 программного обеспечения canon/pattern. Слово «интерфейс» более специализировано, относится к написанию кода (программирование) –

ответ

2

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

В C++ - мир, в отличие от, например, Java, нет явного объявления интерфейса; вместо этого ваш класс автоматически предоставляет все интерфейсы, которые предоставляют базовые классы. Некоторые из нас склонны называть классы только чистыми виртуальными методами (и, возможно, не чистым виртуальным деструктором) и интерфейсом. Обратите внимание, что, строго говоря, это не единственный способ указать интерфейс, и новые/предстоящие функции C++ (например, Concepts), скорее всего, изменят эту сцену. Точно так же мы обычно говорим, что класс является абстрактным, когда у него есть хотя бы один чистый виртуальный метод, хотя могут быть разные определения, когда вы используете состав на основе шаблонов/признаков, а также выполняете и используете интерфейс вместо виртуальных и наследование для них.

2

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

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

0

В контексте, скажем, функция C++:

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

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

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