知识卡片

一切皆对象让继承体系彻底统一但让基础运算多绕一层

普通读书笔记卡 · 1816

内容

把一切都当作对象——包括数字、类本身——而不像多数主流语言那样给整数、布尔值这类基础类型开后门,代价是普通算术运算也要走一遍消息查找的完整机制(先确定接收者的类,再沿继承链查找方法,最后拿到实现去执行),换来的好处是继承体系彻底统一:所有类型共享同一套复制、比较、打印、出错处理机制,因为它们的根源都来自同一个基类,理解这个基类提供了什么,就理解了整个语言体系的大半行为。

参考来源

- 位置:《架构之美》第14章《重读经典》14.1节《所有东西都是对象》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0277.xhtml) - 结论依据:原文明确"不超过31位长的整数是SmallInteger类的实例……当消息接收者……收到……消息时,Smalltalk解释器会做……确定消息接收者的类、在该类及其祖先类中查找消息选择器、取得与找到的类的消息选择器相关联的方法",且"大多数选择器继承自Object"。 - 原始内容:在Smalltalk中,不超过31位长的整数是SmallInteger类的实例……1.确定消息接收者的类。2.在该类及其祖先类中查找消息选择器。3.取得与找到的类的消息选择器相关联的方法……大多数选择器继承自Object,理解Object提供了什么功能就可以解释Smalltalk架构的许多方面。