Protokół (programowanie obiektowe)
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[edytuj | edytuj kod]
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ż[edytuj | edytuj kod]
- Protokoły w Objective-C
- Klasa (programowanie obiektowe)
- Interfejs (programowanie obiektowe)
- Interfejs programowania aplikacji
Przypisy[edytuj | edytuj kod]
- ↑ Objective-C Language - Protokoły i delegaci | objective-c Tutorial [online], riptutorial.com [dostęp 2020-10-19] .
- ↑ Abstract Objects Layer — Python 3.9.0 documentation [online], docs.python.org [dostęp 2020-10-19] .