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). Сэмс: научите себя Swift за 24 часа . Индианаполис, Индиана. стр. 263. ISBN 978-0-672-33724-6. Любой тип может принять протокол, который поможет ему получить дополнительную функциональность для выполнения определенного набора задач.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  3. ^ "Глоссарий — Документация Python 3.11.0". docs.python.org . Получено 16 ноября 2022 г. .
  4. ^ «Характеристики — Справочник по ржавчине». Январь 2024 г.