Фактическая точность этой статьи оспаривается . ( Март 2008 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Протокол - это термин, используемый конкретными объектно-ориентированными языками программирования с множеством конкретных значений, которые в других языках могут быть обозначены как интерфейс или свойство .
В противном случае протокол сродни протоколу связи , указывая на цепочку взаимодействий между вызывающим абонентом и объектом.
Языки, в которых используется термин Протокол, включают:
В этих языках протокол - это обычное средство взаимодействия дискретных объектов друг с другом. Это определения методов и значений, которые объекты согласовывают, чтобы сотрудничать как часть API .
Протокол / интерфейс представляет собой описание:
- Сообщения, которые понимает объект.
- Аргументы, которыми могут быть предоставлены эти сообщения.
- Типы результатов, возвращаемых этими сообщениями.
- Эти инварианты , которые сохранились , несмотря на изменения в состоянии объекта.
- Исключительные ситуации, которые потребуются для обработки клиентами объекта.
- (Только для использования коммуникаций в стиле :) Последовательность вызова и точек принятия решений о методах, таких , как будут представлены в 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{}
совместим со всеми типами.
Обратите внимание, что языки функционального программирования и распределенного программирования используют термин протокол, родственный использованию связи (т.е. спецификация разрешенных обменов сообщениями, акцент на обменах , а не на сообщениях) [ необходима цитата ] . В частности, следующие элементы также считаются частью протокола на этих языках:
- Разрешенные последовательности сообщений,
- Ограничения, накладываемые на любого из участников общения,
- Ожидаемые эффекты, которые произойдут при обработке сообщения.
Классы типов в таких языках, как Haskell , используются для многих вещей, для которых используются протоколы.
См. Также [ править ]
- Концепция (общее программирование)
- Делегирование (программирование)
- Протоколы в Objective-C
- Класс (информатика)
- Инкапсуляция (инкапсуляция)
- Публичный интерфейс
- Список основных тем по информатике
- Интерфейс прикладного программирования
Ссылки [ править ]
- ^ "Язык программирования Objective-C: Протоколы" . Apple , Inc . Проверено 7 октября 2012 года .
- ^ Официальная документация Python 3, слой абстрактных объектов