Objective-C是苹果Mac OS X 上开发的首选语言,主要是因为Mac OS X 技术源自NextStep的OpenStep操作系统,因为OPENSTEP的软件架构(framework) 都是用Objetive-C写成,所以MacOS X上的开发最佳语言自然也就是Objective-C了。
Object-C是由Brad Cox在80年代初在第一个纯面向对象语言Smalltalk基础上写成。后来他创立了StepStone公司从事Objective-C的推广。 1988年,Steve Jobs的NextStep采用Objective-C作为开发语言,1992年GNU gcc编译器中包含了对Objective-C的支持(gnu-objc runtime),Dennis Glating写了第一个run-time。Richard Stallman第二个,最近的是Kresten Krab Thorup在丹麦读大学时写的,他后来到NextStep工作。
目前,Objective-C是MacOS X的首要开发语言,也是GNUstep在Linux和其它平台上的开发语言。
Objective-C 是ANSI C的超集,扩展了C语言使它具备面向对象设计的能力,如类,消息和继承。Objective-C程序中可以利用现有的C语言代码,使其利用现有的软件架构。这也是为什么Objective-C过去多年间能够成为一种流行的用户界面开发语言而且至今没有消亡,因为一方面用它可以实现底层系统编程,另一方面可以支持利用动态架构进行开发。
Objective-C 和C++的比较
单一继承:
Objective-C不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承。
动态:
Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。
C++ 跟面向对象编程里的Simula67(一种早期OO语言)属于同一学派,而Objecive-C属于Smalltalk学派。
在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objecive-C来说,由动态类型来决定。Simula67学派更安全,因为大部分错误可以在编译时查出。而Smalltalk学派更灵活,比如一些Smalltalk看来无误的程序拿到Simula67那里就无法通过。
从很多方面来看,C++和Objective-C的差别,与其说时技术上的,不如说是思维方式上的。你是否想更安全而舍弃灵活性? Simular67学派的支持者声称既然程序设计出色何必再要灵活性(谎话!),而 Smalltalk学派则辩称为了灵活可以容忍运行时多出错(也是谎话!)
Objective-C 和 GObject
GObject 是GLib库的一个子集,它利用C语言来模拟面向对象技术,支持动态类型技术(dynamicaly typed)。因为是模拟,它在语法上就比标准的OO语言复杂的多。如果要定义一个新对象,要同时定义一对 Class 和 Instance。譬如要定义Student对象,就要定义一个StudentClass,还有一个Student。前者为类,后者为实例(instance)。这个特点对初学者而言,非常难于理解。
GObject 仍然属于C语言,编译器还是C编译器。 Object-C就不是传统上的C语言了,它采用了全新的编译器。
GObject 也是单一继承。它的出现,对执着于C的人来说,架起了C和OO技术的桥梁。在Gnome系统中,GObject是基石。GTK, GStreamer, Clutter 等等都依赖于GObject。