Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Языки, в которых используется термин Протокол, включают:

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

Протокол / интерфейс представляет собой описание:

  1. Сообщения, которые понимает объект.
  2. Аргументы, которыми могут быть предоставлены эти сообщения.
  3. Типы результатов, возвращаемых этими сообщениями.
  4. Эти инварианты , которые сохранились , несмотря на изменения в состоянии объекта.
  5. Исключительные ситуации, которые потребуются для обработки клиентами объекта.
  6. (Только для использования коммуникаций в стиле :) Последовательность вызова и точек принятия решений о методах, таких , как будут представлены в UML - диаграмм взаимодействия: диаграммы связи , диаграммы последовательности , Interaction общая схема / диаграмма активности , временная диаграмма .

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

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

Не объектно-ориентированные языки [ править ]

Хотя язык программирования Go обычно не считается объектно-ориентированным языком, он позволяет определять методы для определяемых пользователем типов. Go имеет "интерфейсные" типы, совместимые с любым типом, поддерживающим данный набор методов (тип не обязательно должен явно реализовывать интерфейс). Пустой интерфейс, interface{}совместим со всеми типами.

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

  1. Разрешенные последовательности сообщений,
  2. Ограничения, накладываемые на любого из участников общения,
  3. Ожидаемые эффекты, которые произойдут при обработке сообщения.

Классы типов в таких языках, как Haskell , используются для многих вещей, для которых используются протоколы.

См. Также [ править ]

  • Концепция (общее программирование)
  • Делегирование (программирование)
  • Протоколы в Objective-C
  • Класс (информатика)
  • Инкапсуляция (инкапсуляция)
  • Публичный интерфейс
  • Список основных тем по информатике
  • Интерфейс прикладного программирования

Ссылки [ править ]

  1. ^ "Язык программирования Objective-C: Протоколы" . Apple , Inc . Проверено 7 октября 2012 года .
  2. ^ Официальная документация Python 3, слой абстрактных объектов