¿De dónde viene Objective-C? C ++ o C?

8

Estoy muy confundido acerca de este lenguaje de programación, Objective-C, que escuché que se usa para desarrollar aplicaciones iOS.

Sé que usa los principios de OOP. ¿Sería más fácil aprender si ya conociera C ++? ¿Qué hay de su nombre? ¿Es una combinación entre el lenguaje de programación C y los principios OOP que uso en C ++?

aplastar
fuente

Respuestas:

12

Brad Cox y sus amigos agregaron una capa delgada de Smalltalk encima de C.

Objective-C tiene mucho más en común con el estilo de envío de mensajes altamente dinámico de Smalltalk que el de C ++.

Una diferencia importante es que en Objective-C no te preocupas demasiado por qué clase es algo: te importa qué mensajes entiende algo. Puede tener objetos que cambien el conjunto de mensajes que entienden, en tiempo de ejecución.

Habiendo dicho que los dos idiomas tienen ideas muy diferentes de lo que es OO, todavía se comparten muchas ideas / principios: herencia, delegación, polimorfismo, etc. Encontrará fácilmente muchos ejemplos de los diversos patrones de OO en el código escrito en cualquier idioma.

Frank Shearar
fuente
2

Otros han señalado que Objective-C es una capa OO de estilo SmallTalk agregada a C, agregaré que C ++ comenzó como una capa OO de estilo Simula agregada a C (y luego se agregaron plantillas para hacer una buena medida).

Un programador
fuente
1

De la boca del caballo :

Objective-C es un lenguaje de programación híbrido [...] formado al injertar el estilo Smalltalk-80 de programación orientada a objetos en un portainjerto en lenguaje C. Objective-C agrega precisamente un nuevo tipo de datos, el objeto, a los que C ya proporciona, y precisamente una nueva operación, la expresión del mensaje. Al igual que Smalltalk-80, Objective-C no hace distinción en tiempo de compilación entre diferentes tipos (clases) de objetos.

Para abordar "¿Sería más fácil aprender si ya conociera C ++?" No lo creo, pero tampoco creo que duela. Puede que se sienta más cómodo con conceptos como clases y objetos si ya conoce C ++, pero encontrará que Objective-C implementa las clases de una manera muy diferente a C ++. Para tomar prestada alguna terminología de Stroustrup, todos los mensajes de ObjC son "virtuales" y pueden ser redefinidos por subclases, o incluso pueden intercambiarse sus implementaciones en la clase de definición. Esta y otras sutilezas probablemente cancelen parte de la ventaja inicial que obtendrá al conocer C ++.


fuente
Los métodos de Objective-C son mucho más virtuales ("aparentemente existentes") que los de C ++ virtual: un objeto ni siquiera necesita entender un mensaje para manejarlo. Puede reenviar silenciosamente el mensaje a algún objeto interno que pueda entender el mensaje, lo que permite una representación transparente para admitir, por ejemplo, la carga diferida de una instancia desde una base de datos.
Frank Shearar
De hecho, estaba tomando prestada la terminología para familiarizar la idea. C ++ usa vtables para distribuir métodos virtuales, que ObjC agregó recientemente como una optimización del rendimiento.
0

Objective-C es C, con una capa de Smalltalk.

De acuerdo con Wikipedia :

Objective-C es un lenguaje de programación reflexivo y orientado a objetos que agrega mensajes de estilo Smalltalk al lenguaje de programación C.

Está orientado a objetos, pero no es de C ++ directamente.

Entonces sí, es C con algunas de las habilidades OO de Smalltalk .

Dinámica
fuente
55
ni tampoco es de C ++ en absoluto. C ++ toma prestado su modelo de clase de Simula, y los dos idiomas se estaban trabajando aproximadamente al mismo tiempo.