stringtranslate.com

Интерфейс (объектно-ориентированное программирование)

В объектно - ориентированном программировании тип интерфейса или протокола [a] — это тип данных , который действует как абстракция класса . Он описывает набор сигнатур методов , реализации которых могут предоставляться несколькими классами , которые в остальном не обязательно связаны друг с другом. [1] Говорят, что класс, предоставляющий методы, перечисленные в протоколе, принимает протокол, [2] или реализует интерфейс. [1]

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

Некоторые языки программирования обеспечивают явную языковую поддержку протоколов ( Ada , C# , D , Dart , Delphi , Go , Java , Logtalk , Object Pascal , Objective-C , OCaml , PHP , Racket , Seed7 , Swift , Python 3.8). В языках, поддерживающих множественное наследование , таких как C++ , интерфейсы реализованы как абстрактные классы .

В языках без явной поддержки протоколы часто все еще присутствуют в виде соглашений. Это известно как утиная типизация . Например, в Python любой класс может реализовать __iter__метод и использоваться как коллекция . [3]

Классы типов в таких языках, как Haskell , или сигнатуры модулей в ML и OCaml используются для многих целей, для которых используются протоколы. [ нужны разъяснения ]

В Rust интерфейсы называются типажами . [4]

Смотрите также

Примечания

  1. ^ Использование этих терминов зависит от языка программирования. Java и языки, производные от него, обычно используют «интерфейс», тогда как «протокол» обычно более популярен в других местах.

Рекомендации

  1. ^ ab «Интерфейсы — определяют поведение для нескольких типов». Learn.microsoft.com . Проверено 16 ноября 2022 г.
  2. ^ Миллер, Би Джей (2015). Сэмс: Научитесь быстроте за 24 часа . Индианаполис, Индиана. п. 263. ИСБН 978-0-672-33724-6. Любой тип может использовать протокол, который обеспечит ему дополнительную функциональность для выполнения определенного набора задач.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  3. ^ «Глоссарий — документация Python 3.11.0» . docs.python.org . Проверено 16 ноября 2022 г.
  4. ^ "Черты - Ссылка на ржавчину" . Январь 2024 года.