在Smalltalk里,万物皆对象;也是基于类的系统,意味着每个对象有与之对应的类——定义对象的结构和向对象发送消息。这意味着,在Smalltack
中Class
是一个对象;一个类需要成为一个类(即元类 metaclass)的对象。
Smalltalk
较早的版本,只有一个metaclass
称为"Class"
。所有类的方法是相同的,特别是创建新对象的方法,都是new
。为了让类有自己的方法和实例变量(类实例变量不应该和类变量混淆),Smalltalk-80
开始,每个 Class C
,属于它的 metaclass C class
。意味着每个元类分享一个单例类Metaclass
。
Smalltalk 有两个主要的研究范畴:
- 编程语言是在人类思维和电脑硬件之间传递信息的一道桥梁(通常用 API 来呈现)
- 一门语言的交互(用户界面),使得人类通讯系统和电脑通讯系统匹配。
Objective-C
类似于 Smalltalk,想了几天,浅薄理解如下,欢迎评论交流:
- 职责分离,不用所有的类方法都加到同一个类里
-
objc_msgSend(void /* id self, SEL op, ... */ )
复用消息通道,类方法也可以放在Class
里,但发送消息时,需要增加一个参数 - 类方法不仅实现实现专门的实例化器(与其他一些面向对象语言的“构造函数”大致对应),且有利于类之间共享的行为
- smalltalk-76,类的类都是
'Class'
,该类实现了任何类都需要的方法-eg.new
方法。我们想添加一个类方法,必须添加到'Class'
。 -
metaclass
是 smalltack 中为数不多丑陋设计之一,好处是不需要了解工厂模式,类本身就能充当工厂。 - 对象的共享行为放在类里,类的共享行为放在元类里,只有一个元类就会像“第4条”一样,元类爆炸。
网友评论