Protokół to termin używany przez zorientowane obiektowo języki programowania o różnych specyficznych znaczeniach, które w innych językach nazywane są interfejsem lub cechą.
Protokół używany w inny sposób jest podobny do protokołu komunikacyjnego, wskazując łańcuch interakcji między wywołującym a obiektem.
Języki, w których używa się terminu protokół, obejmują:
W tych językach protokół jest powszechnym środkiem komunikacji między dyskretnymi obiektami. Są to definicje metod i wartości, które obiekty uzgadniają w celu współpracy w ramach API.
Protokół/interfejs to opis poniższych cech:
- Komunikaty zrozumiałe dla obiektu.
- Argumenty, z którymi te wiadomości mogą być dostarczane.
- Typy wyników zwracanych przez te komunikaty.
- Niezmienniki, które są zachowywane pomimo modyfikacji stanu obiektu.
- Wyjątkowe sytuacje, które będą musiały być obserwowane przez klientów do obiektu.
- (Tylko do użytku w stylu komunikacji:) Sekwencja wywołania i punkty decyzyjne metod, takie jak byłyby reprezentowane na diagramach interakcji UML: Diagram komunikacji, Diagram sekwencji, Diagram przeglądu interakcji/Diagram aktywności, Diagram czasowy.
Jeśli obiekty są w pełni hermetyzowane, protokół będzie opisywać jedyny sposób, w jaki inne obiekty mogą uzyskać dostęp do obiektów. Na przykład w interfejsach Java interfejs Comparable
określa metodę compareTo()
, którą klasy implementujące muszą implementować. Oznacza to, że na przykład oddzielna metoda sortowania może sortować dowolny obiekt, który implementuje interfejs Comparable
, bez konieczności posiadania jakiejkolwiek wiedzy o wewnętrznej naturze klasy (poza tym, że dwa z tych obiektów można porównać za pomocą funkcji compareTo()
) .
Niektóre języki programowania zapewniają wyraźną obsługę języków dla protokołów/interfejsów (Ada, C#, D, Dart, Delphi, Go, Java, Logtalk, Object Pascal, Objective-C, PHP, Swift). W C++ interfejsy są znane jako abstrakcyjne klasy bazowe i są implementowane przy użyciu czystych funkcji wirtualnych. Zorientowane obiektowo funkcje Perla obsługują również interfejsy.
Niezorientowane obiektowo języki programowania
Chociaż język programowania Go nie jest ogólnie uważany za język zorientowany obiektowo, umożliwia definiowanie metod na typach zdefiniowanych przez użytkownika. Go ma typy „interfejsów”, które są zgodne z każdym typem obsługującym dany zestaw metod (typ nie musi jawnie implementować interfejsu). Pusty interfejs, interface{}
, jest kompatybilny ze wszystkimi typami.
Należy zauważyć, że programowanie funkcjonalne i rozproszone języki programowania używają terminu protokół pokrewny używaniu komunikacji (tj. Specyfikacja dozwolonej wymiany wiadomości, nacisk na wymianę, a nie na wiadomości)[potrzebny przypis]. W szczególności następujące elementy są również uważane za część protokołu w tych językach:
- Dozwolone sekwencje wiadomości,
- Ograniczenia nałożone na któregokolwiek z uczestników komunikacji,
- Oczekiwane efekty, które pojawią się podczas obsługi wiadomości.
Klasy typów w językach takich jak Haskell są używane do wielu rzeczy, do których używane są protokoły.
Zobacz też
Przypisy