Интерфейсы должны делать абстракцию (архетип) абстракции (классов) реальности (объектов).
Интерфейсы должны определять условия контракта без предоставления реализации, предоставляемой классами.
Интерфейсы имеют характеристики:
Интерфейсы - это артефакты времени разработки, указывающие на неподвижное поведение концепции, поскольку она единственная и статичная.
Классы - это артефакты времени реализации, определяющие мобильную структуру реальности при ее взаимодействии и перемещении.
Что такое интерфейс?
Наблюдая за кошкой, вы можете сказать, что это животное с четырьмя лапами, головой, хоботом, хвостом и шерстью. Вы видите, что он может ходить, бегать, есть и мяукать. И так далее.
Вы только что определили интерфейс с его свойствами и операциями. Таким образом, вы не определили никаких методов работы, а только функции и возможности, не зная, как все работает: вы определили способности и различия.
По сути, это еще не класс, хотя в UML мы называем его классом на диаграмме классов, потому что мы можем определить частные и защищенные члены, чтобы начать глубокое представление об артефакте. Не путайте здесь, потому что в UML интерфейс немного отличается от интерфейса в C #: он похож на частичную точку доступа к атому абстракции. Таким образом, мы сказали, что класс может реализовывать несколько интерфейсов. По сути, это одно и то же, но не потому, что интерфейсы в C # используются для абстрагирования абстракции и для ограничения этой абстракции как точки доступа. Это два разных использования. Таким образом, класс в UML представляет собой интерфейс полной связи с классом программирования, тогда как интерфейс UML представляет интерфейс разделения раздела класса программирования. На самом деле, диаграмма классов в UML не заботится о реализации, и все ее артефакты находятся на уровне интерфейса программирования. Хотя мы сопоставляем классы UML с классами программирования, это преобразование абстрактной абстракции в конкретную абстракцию. Есть тонкость, объясняющая дихотомию между областью дизайна и областью программирования. Итак, класс в UML - это класс программирования с точки зрения интерфейса программирования с учетом внутренних скрытых вещей.
Интерфейсы также позволяют имитировать множественное наследование, когда оно недоступно неудобным образом. Например, класс cat будет реализовывать интерфейс cat, производный от интерфейса животного. Этот класс cat также будет реализовывать эти интерфейсы: ходить, бегать, есть и издавать звук. Это компенсирует отсутствие множественного наследования на уровне класса, но каждый раз, когда вам нужно все заново реализовать, вы не можете учитывать реальность в лучшем случае, как это делает сама реальность.
Чтобы понять это, мы можем обратиться к объектному кодированию Pascal, где вы определяете в модуле интерфейс и разделы реализации. В интерфейсе вы определяете типы, а в реализации вы реализуете тип:
unit UnitName;
interface
type
TheClass = class
public
procedure TheMethod;
end;
implementation
class procedure TheClass.TheMethod;
begin
end;
Здесь раздел интерфейса соответствует дизайну класса UML, в то время как типы интерфейсов, таким образом, другие.
Итак, в нашем бизнесе у нас есть одно слово, интерфейс , для обозначения двух разных, но похожих вещей, и это источник путаницы.
Также в C #, например, программные интерфейсы позволяют компенсировать отсутствие истинного универсального полиморфизма в открытых типах без реального достижения цели, потому что вы потеряли возможность использования строго типизированного кода.
В конце концов, интерфейсы необходимы для того, чтобы несовместимые системы могли обмениваться данными, не беспокоясь о реализации и управлении объектами в памяти, как это было в (распределенной) общей объектной модели.
Что такое класс?
После определения редукции реальности с внешней точки зрения вы можете затем описать ее с внутренней точки зрения: это класс, в котором вы определяете обработку данных и управление сообщениями, чтобы позволить реальности, которую вы инкапсулировали, ожить и взаимодействовать благодаря к объектам, использующим экземпляры.
Итак, в UML вы реализуете фрактальное погружение в колеса механизма и описываете состояния, взаимодействия и так далее, чтобы иметь возможность реализовать абстракцию фрагмента реальности, с которым вы хотите работать.
Таким образом, абстрактный класс в некотором смысле эквивалентен интерфейсу с точки зрения компилятора.
Больше информации
Протокол (объектно-ориентированное программирование)
C # - Интерфейсы
C # - Классы