2012-01-11 12 views
5

Ponieważ tak naprawdę nie jest * możliwe tworzenie klas abstrakcyjnych w celu-c zastanawiałem się, czy ktoś mógłby mi powiedzieć, dlaczego twórcy obiektywnego c nie zrobili t dodaj tę funkcję do języka.Dlaczego nie jest możliwe tworzenie klas abstrakcyjnych w celu-c

* Oczywiście istnieje kilka sposobów na utworzenie klas-abstrakcyjnych klas, ale nie o to mi chodzi.

Odpowiedz

9

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.

Powiązane problemy