2012-01-11 12 views
5

Porque no es realmente posible * crear clases abstractas en Object-C Me preguntaba si alguien podría decirme por qué los creadores de Objective-C no lo hicieron t agrega esta característica al idioma.¿Por qué no es posible crear clases abstractas en Object-C

* Por supuesto, hay algunas soluciones para crear una especie de clases abstractas, pero eso no es lo que quiero decir.

Respuesta

9

Si quiere decir por qué no puede declarar un resumen de clase en lugar de solo implementarlo como una clase abstracta, supongo que es porque no interactúa tan bien con Objective-C extremadamente dinámico, tipos-opcional, Smalltalky estilo de paso de mensajes (Smalltalk no tiene soporte incorporado para declararlos tampoco). Por ejemplo:

  • Usted puede no saber qué clase va a enviar alloc o init a, por lo que sería una garantía bastante débil

  • subclases aún puede que tenga que pasar alloc y init hasta la clase jerarquía, por lo que necesitaría para permitir que, por lo que es una garantía aún más débil

  • Categorías modifican las clases en tiempo de ejecución, por lo que es el contrato más débil todavía abstracta

Al final, terminaría con una palabra clave que acaba de hacer más o menos lo mismo que hacemos ahora para implementar clases abstractas (es decir, quizás anule init para fianza si el receptor no es una subclase).

Los modificadores de tipo que solo especifican un contrato se vuelven más útiles cuanto más confíe en el sistema de tipo estático, pero Objective-C fue diseñado para no confiar tanto en el sistema de tipo, por lo que poner el contrato en el sistema de tipo es menos útil que en algunos otros idiomas.

Cuestiones relacionadas