Klasa abstrakcyjna a interfejs
Klasa abstrakcyjna (lub typ) jest rodzajem nominalnego systemu typów zadeklarowanego przez program. Chociaż nazwa wskazuje na to, klasa abstrakcyjna może, ale nie musi, zawierać abstrakcyjne metody lub właściwości. Klasa rozróżnienia odnosi się do różnych konstrukcji językowych, które można wykorzystać do implementacji typów abstrakcyjnych. Klasy abstrakcyjne mogą charakteryzować się problemem projektowym, który utrzymuje się przy najlepszym programowaniu obiektowym i ich niedokończoną naturą.
Interfejs to abstrakcyjny typ, który klasy muszą zaimplementować, aby określić interfejs (ogólnie rzecz biorąc). Interfejsy mogą zawierać tylko sygnatury metod i stałe deklaracje (zarówno statyczne, jak i końcowe), nigdy definicje metod. Interfejsy symulują wielokrotne dziedziczenie i służą do kodowania podobieństw między różnymi typami klas.
Typy abstrakcyjne można tworzyć, oznaczać lub symulować na kilka różnych sposobów. Programista może oznaczać typy abstrakcyjne, używając jawnie słowa kluczowego streszczenie, włączając jedną lub więcej metod do definicji klasy, dziedzicząc z innego typu abstrakcyjnego bez zastępowania brakujących funkcji niezbędnych do uzupełnienia definicji klasy lub wysyłając określoną metodę do obiektu język programowania znany jako ten, który nie implementuje metody bezpośrednio.
Interfejsy można definiować przy użyciu metod abstrakcyjnych. Klasy mogą być również implementowane w interfejsach. Jeśli klasa implementuje interfejs i nie implementuje wszystkich swoich metod, należy zastosować streszczenie znacznika, w przeciwnym razie znacznik nie jest konieczny (ponieważ wszystkie interfejsy są z natury abstrakcyjne). Klasy mogą również implementować wiele interfejsów.
Podczas gdy interfejsy są używane do określania ogólnych interfejsów, typy abstrakcyjne mogą być używane do definiowania i egzekwowania protokołu (który jest zbiorem operacji, które muszą obsługiwać wszystkie obiekty, które implementują pożądany protokół). Typy abstrakcyjne nie występują w językach bez podtytułu. Ponieważ takie podtypy są zmuszone do implementacji wszystkich potrzebnych funkcji, zapewniających poprawność wykonania programu. Istnieje kilka sposobów tworzenia typów abstrakcyjnych: pełne abstrakcyjne klasy podstawowe są klasami, które są jawnie zadeklarowane jako abstrakcyjne lub zawierają abstrakcyjne (niewdrożone) metody; Wspólne systemy obiektowe Lisp obejmują mixiny oparte na systemie Flavours; Java oczywiście; i cechy, które działają jako rozszerzenie Smalltalk.
Streszczenie:
1. Klasy abstrakcyjne (lub typy) deklarują programy; interfejsy to typy abstrakcyjne, które wszystkie klasy muszą wdrożyć, aby określić swój interfejs.
2. Typy abstrakcyjne można oznaczać za pomocą słowa kluczowego; interfejsy są z natury abstrakcyjne, dlatego nie trzeba ich wcale oznaczać słowem kluczowym (chyba że konkretna klasa implementuje interfejs, ale nie implementuje wszystkich swoich metod).