Jeśli masz na myśli, dlaczego nie możesz zadeklarować abstrakcji klasy, a nie po prostu zaimplementować ją jako klasę abstrakcyjną, przypuszczam, że dzieje się tak dlatego, że nie współdziała ona tak dobrze z ekstremalnie dynamicznymi obiektami Objective-C, typami opcjonalnymi, Smalltalky styl przekazywania komunikatów (Smalltalk nie ma wbudowanej obsługi deklaracji). Na przykład:
Możesz nie wiedzieć, co klasa wysyłasz alloc
lub init
się, więc byłoby to dość słaby gwarancja
podklasy może wciąż muszą przechodzić alloc
i init
się klasą hierarchia, tak że musimy pozwolić, co czyni go jeszcze słabszą gwarancję
Kategorie modyfikowania klas w czasie wykonywania, co czyni go jeszcze słabszy abstrakcyjne kontrakt
W końcu skończyłoby się słowu kluczowemu, które z grubsza zrobiło to samo, co teraz, aby zaimplementować klasy abstrakcyjne (tj. może przesłonić init
, aby zwolnić za kaucją, jeśli odbiorca nie jest podklasą).
Modyfikatory rodzaju, które właśnie określają umowę, stają się bardziej użyteczne, im bardziej polegają na systemie typu statycznego - ale Objective-C nie został tak bardzo oparty na systemie typów, więc umieszczenie umowy w systemie typu jest mniej przydatne niż w niektórych innych językach.