2010-11-30 13 views
6

Objective-C es un lenguaje de programación orientado a objetos que agrega mensajes de estilo Smalltalk al lenguaje de programación C. Entiendo que aprender Smalltalk podría ser bueno de la misma manera que aprender Lisp es bueno para el propio conocimiento, pero quiero saber si el aprendizaje de conceptos específicos de Smalltalk me ayudará a comprender Objective-C más completamente, dado el papel de Smalltalk en su "origen". historia". Si es así, ¿qué es específicamente?Programación Objective-C: ¿Aprenderá C y/o Smalltalk Ayuda?

Suponiendo que uno ya conoce la programación en C, ¿qué podemos aprender de Smalltalk? Obviamente, hay muchos conceptos en Objective-C que simplemente no están en C (es decir, mensajes, interfaces, protocolos, tipado dinámico, delegación, reflexión, está orientado a objetos) pero se derivan de Smalltalk.

Editar: He añadido el lenguaje de programación C a la cuestión, ya que el consenso general es que el aprendizaje de C es un mejor uso de su tiempo de que el aprendizaje de Smalltalk (cuando se trata de la programación en Objective-C).

+0

No conozco Smalltalk, así que realmente no me siento capacitado para dar una respuesta que garantice cuánto podría o no podría ayudar a un desarrollador de Objective-C. Dicho esto, creo que vale la pena señalar que ** será * mucho * más útil sentirse cómodo con los conceptos de programación orientada a objetos en general en lugar de tratar de aprender dos idiomas diferentes al mismo tiempo. ** –

+1

Me pregunto cómo usar Obj-C sin aprender C antes ... Como es una parte de Obj-C. – Vovanium

Respuesta

6

Smalltalk es un lenguaje increíblemente compacto y sigue siendo uno de los lenguajes más puros orientados a objetos. Objective-C es un compromiso pragmático entre Smalltalk y C, lo que genera algunas diferencias muy sustanciales. Por ejemplo, en Smalltalk todo es un objeto, incluso números simples, y cada manipulación de un objeto se realiza mediante el envío de mensajes. Los mensajes se evalúan en el mismo orden, independientemente de su nombre. Por ejemplo, lo siguiente:

8 + 9/23 + 16 * 8 

se evalúa en estricto orden de izquierda a derecha debido a que los operadores '+', '/' y '*' no tienen un significado especial para el lenguaje de estar a sólo los mensajes que se transmiten al número objetos.

Objective-C agrega objetos de estilo Smalltalk a C pero también es un superconjunto estricto de C que conserva los tipos primitivos de C y los operadores incorporados. Entonces, en Objective-C, el orden matemático normal de operaciones se aplicaría a la expresión anterior: la división y la multiplicación se realizarían primero, las adiciones posteriores.

Aprender C es absolutamente esencial para una comprensión completa de Objective-C. Objective-C es un superconjunto estricto de C y explícitamente usa exactamente la misma sintaxis y semántica hasta donde llegan. Se injerta el concepto de objetos en C en virtud de la capacidad de C para retener un puntero a una cosa sin saber cómo aplicar ninguna operación a la cosa. A continuación, amplía la sintaxis C para proporcionar un medio para publicar mensajes en objetos y para declarar e implementar los mensajes que un objeto puede recibir.

Gran parte del diseño general del tiempo de ejecución de Objective-C, especialmente cuando se combina con Cocoa, proviene directamente de Smalltalk, incluido el concepto de selector, el uso de metaclases como fábricas para instancias de clases, la jerarquía y el sistema de herencia, la división de model-view-controller (un original de Smalltalk, aunque ahora casi omnipresente) y muchos de los mensajes definidos en las colecciones y los objetos estándar.

Por fuera de mi cabeza, Smalltalk también difiere mucho en su sistema de control de flujo y tiene una idea similar pero sutilmente diferente de un "bloque" (aunque las implementaciones más nuevas han puesto a los dos en línea). Apple ha implementado bloques como una extensión en el nivel C que es utilizado por muchos de los métodos más nuevos en objetos Objective-C.

Dicho todo esto, el libro Goldberg Smalltalk-80 está extremadamente bien escrito, es fácil de leer y el lenguaje es tan simple que puedes aprender todo el idioma en solo dos o tres capítulos. La mayor parte de la complejidad es absorbida por los objetos disponibles en el tiempo de ejecución, y obviamente eso no se transfiere. El beneficio para usted es que el material ideológico sobre objetos y tiempos de ejecución termina muy separado de los detalles impresos. Por el contrario, C hace cosas como el control de flujo y la aritmética, una característica del lenguaje, lo que significa más sintaxis y más para leer antes de que realmente sientas que sabes lo que está pasando.

Por lo tanto, en conclusión: el libro Smalltalk-80 (el violeta) definitivamente vale la pena leerlo y es extremadamente útil, pero no necesariamente del todo relevante. Aprender C es esencial en cualquier caso; mis referencias a K & R son para comparar.

+0

Parece que el el consenso es: C es crítico; Smalltalk es interesante pero innecesario. –

+2

Eso es absolutamente incorrecto. Para escribir bien Objective C necesitas un buen Smalltalk y un poco de c –

+2

Para escribir bien Objective-C solo necesitas aprender Objective-C. Creo que todo lo que estamos diciendo es que de los dos precursores, el único que es necesario es C. Si puedes escribir bien Objective-C puedes escribir C, no necesariamente puedes escribir Smalltalk. – Tommy

0

creo que el mejor fondo para aprender Objetivo - C es C. Si sabes C, se convertirá fácilmente familiarizado con la programación orientada a objetos y escribir en Objective - C

En lo personal, no me' Creo que aprender Smalltalk nos da una buena idea.

+1

No. Aprender programación orientada a objetos no es fácil. Hacerlo compilar no es lo mismo que hacerlo orientado a objetos –

+1

Se trata simplemente de cambiar su estilo de programación y comprender los principios. Tal vez para alguien que tiene una experiencia enorme en C, es realmente difícil, pero para mí no fue una gran cosa – Knodel

+0

... cuando eché un vistazo al código que he visto en los últimos diez años en C#, java y Delphi , Diría que aproximadamente veinte por ciento de esos programas en esos idiomas han aprendido programación orientada a objetos, para ser precisos: * apply * it –

2

Descargo de responsabilidad: No lo sé Smalltalk.

Estoy seguro de que sus habilidades Obj-C se beneficiarían de aprender Smalltalk, pero en mi opinión, su tiempo sería mucho mejor pasado aprendiendo C. Como alguien que aprendió Obj-C antes de profundizar en C, los conceptos tomados de Smalltalk es fácil de aprender, los conceptos tomados de C son mucho más difíciles.

0

Acostumbrarse a pasar mensajes a objetos en lugar de llamar a métodos es bastante fácil sin un fondo SmallTalk. Sin embargo, SmallTalk no se parece en nada a C (a excepción de la variante SuperCollider) y el lenguaje incluso trata los bloques de código y otras cosas locas como objetos de primera clase: p. en SuperCollider {i < 5}.while({ // do stuff }) Este comportamiento no llegó a Objective-C y es probable que te confunda como a mí.

+1

Ahora tenemos bloques en Objective C (y muy feos, en eso) –

3

puedo estar de acuerdo con Knodel sólo un ejemplo ver este [mensaje someObject]

y ver

mensaje someObject.

Verá Objective-C usa el mismo "posicionamiento" y sí, viene de Smalltalk. Aprender Smalltalk es siempre una buena inversión de tiempo. Y el significado en esta área es 100% smalltalk enviar un mensaje a un objeto o una clase que tiene un MetaClass.

Y sí, aprender C es bueno saber cómo usar parte de Objective-C, pero acostumbrarse a OO no lo enseña C. Entonces conocer C y Smalltalk hace que sea más fácil usar Objective-C. PERO Objective-C no es solo el lenguaje del "poder" que proviene de las bibliotecas de clase. Así que pasar tiempo en eso seguramente es un buen momento para pasarlo.

Y sí, es mejor que conozcas a C y Smalltalk para sacar el máximo provecho de Objective-C.

2

Sí, las partes Objetivo de Objective-C son muy similares a Smalltalk. Si primero aprendes Smalltalk, algunos de los conceptos de Objective-C serán más fáciles y la sintaxis del envío de mensajes será menos impactante.Sin embargo, no creo que Smalltalk sea necesariamente más fácil de aprender que Objective-C, ciertamente no si ya conoces a C, así que también podrías aprender Objective-C directamente.

Habiendo dicho eso, Smalltalk es un buen lenguaje IMO y vale la pena aprender por sí mismo.

5

De Smalltalk puede learn programación real orientada a objetos. Híbridos como java, C# y Delphi no parecen funcionar tan bien. Después de diez años de híbridos, mi estilo de codificación mejoró significativamente después de unos meses de Smalltalk.

Como desarrollador de iPhone, probablemente esté más interesado en el diseño de las bibliotecas y en los conceptos utilizados que en la sintaxis. c no va a ser de ayuda allí (aunque debe comprender algunos conceptos básicos). La programación en Objective C se parece mucho más a la programación en Smalltalk. Los IDEs de Smalltalk son muy superiores a los Objective C y ayudan a comprender mejor cómo funciona el código orientado a objetos y cómo construirlo. Es mucho más fácil mantener su código limpio y bien refactorizado en Smalltalk (IDE) que en cualquier otro lenguaje orientado a objetos. Las bibliotecas de cacao están muy bien diseñadas, al menos en comparación con las de Java o .net. Parecen estar en una forma algo mejor que, p. Ej. los Squeak Smalltalk.