2012-01-11 18 views
5

Perché non è davvero * possibile creare classi astratte in obiettivo-c Mi chiedevo se qualcuno potesse dirmi perché i creatori di ogg-c didn ' t aggiungere questa funzione alla lingua.Perché non è possibile creare classi astratte nell'obiettivo-

* naturalmente ci sono alcune soluzioni alternative per creare un -kind di- classi astratte ma questo non è ciò che intendo.

risposta

9

Se vuoi dire perché non è possibile dichiarare una classe astratta e non solo la sua attuazione come una classe astratta, suppongo che sia perché non interagisce così bene con di Objective-C estremamente dinamiche, tipi-optional, Smalltalky stile di passaggio dei messaggi (Smalltalk non ha il supporto integrato per dichiararli). Per esempio:

  • Si potrebbe non sapere quale classe si invia alloc o init per, quindi sarebbe una garanzia piuttosto debole

  • sottoclassi potrebbe ancora bisogno di passare alloc e init la classe gerarchia, quindi dovremmo accettarlo, rendendolo una garanzia ancora più debole

  • Le categorie modificano le classi in fase di runtime, rendendo il contratto astratto ancora più debole

Alla fine, devi finire con una parola chiave che ha appena fatto o meno la stessa cosa che facciamo ora per implementare le classi astratte (vale a dire forse sovrascrivere lo init su cauzione se il destinatario non è una sottoclasse).

I modificatori di tipo che specificano solo un contratto diventano più utili più ci si affida al sistema di tipi statici, ma Objective-C è stato progettato per non fare affidamento sul sistema di tipi tutto questo, quindi inserire il contratto nel sistema di tipi è meno utile che in altre lingue.

Problemi correlati