读TIJ -2 一切都是对象

《TIJ -·第2 章一切都是对象》

1.一切都是对象,不是Bruce Eckel说的,而是Alan Kay 总结的Smalltalk 五大基本特征的第一条。

从程序设计者或源代码的角度,我认为:“一切皆对象,X” 。类型type是计算机科学重要概念(类型理论type theory),从对象技术角度看,Java源代码中没有任何对象,一切皆类型、引用变量或引用,唯独没有对象。为了模拟自然(不管唯心或唯物),我杜撰了

柏拉图法则:类的世界独立存在,对象世界由类创建而来

2.杂合语言或多范式编程,是一种暂时没有定论的炒作.因为按照托马斯•库恩的范式(paradigm)论,新旧范式是不可通约的、不可比较的。个人倾向认为:命令范式和函数范式如同原子级别看待世界,而对象范式在以米为单位(的宏观视角)看待世界。

2.1 用句柄操纵对象 You manipulate objects with references

拜托,英文版3rd中都不用Handle了,怎么4版的翻译中还有“句柄”。

虽然我在《编程导论·2.4.2 引用变量、引用和对象》中容忍三个术语的混用,但是,
【So if you want to hold a word or sentence, you create a String reference: 
String s;
But here you’ve created only the reference, not an object.  】
在一本书刚开始介绍时,不加说明,就把 (引用)变量s和它的值混为一谈, 尴尬我非常反感,这是一种 严重的错误。而且,【p89 在大多数情况下, 变量名与值的差别,都是不容混淆的。但由于引用变量和引用一样参与所有的对象运算,正如i和2一样参与所有整数运算一样,偶尔会遇到某些人将“引用变量s”叫做“引用s”的情况。】——而TIJ不是偶尔,而是全文的混淆。
是的,我再三强调,String s和int i, s和i都是一个变量而已!!!
可想而知,TIJ无法介绍什么是真正的引用(值)。
如果用遥控板和电视机的例子,TV tv= new TV(); tv即使硬说成遥控板 也不行。tv是你的手!tv握住的东西(tv保存的值)才是“遥控板”,你的手随时可以更换保存的值(遥控板)以控制不同的TV对象。

2.2 所有对象都必须创建

TV tv= new TV(); 不管如何生活化的介绍,基本的概念还是应该准确。由于他把(引用)变量s和它的值混为一谈,这段文字(对我而言)必然地显得别扭和错误。

2.2.1 保存到什么地方
六个地方有些乱。要讨论存储管理策略最好不要把寄存器和持久对象牵扯进来。

2.2.2 特殊情况:基本类型
1.【不是用new 创建变量,而是创建一个并非引用的“自动”变量。 这个变量容纳了具体的值,并置于堆栈中,能够更高效地存取】。
这句话与我说“喜欢梁博”一样,充满风险。知道的说我欣赏梁博,不知道的不定联想些什么。 抓狂

一直奇怪“ 对象在堆中,基本类型在栈中”是那个师傅的发明,这里有点嫌疑。因而,我个人会这样写:
int i的i是一个基本变量,将基本变量保存的简单值5直接置于堆栈中,显然要比使用一个引用变量找到对象再从对象中提取简单值5更高效。

《2.2.2 Java数据类型· 4. 100%面向对象?》中
【p69单就Java语言的类型系统而言,Java中存在基本类型,它们不是引用类型,因而有人说Java不是100%面向对象。Java也不能够号称“所有东西都是对象”。

事实上,通过API封装的特殊引用类型——包装类(指Boolean、Byte、Character、Short、Integer、Long、Float和Double),程序员完全可以使源代码中不出现任何基本类型(通过自动装箱将任何文字转换成包装类对象),这在Java语言和JVM中非常容易实现

对于 方法调用栈上的数据,处理Integer i不如处理int j直截了当。由于所有对象在堆上分配内存,方法调用栈上使用Java基本类型(如进行2+i这种简单操作时), 不应该被迫去创建各种对象。 即使很容易在JVM上进行底层转换而使源代码表现得100%面向对象,也没有太大的必要。】
这里说明了方法调用栈上使用Java基本类型的好处,但是 不意味Java基本类型必须在栈上

2.【boolean 1 位 - - Boolean】???我不知道他的依据在哪里。

2.2.3 Java 的数组  在 讲述Java时比较C或C++,利弊兼半。我个人不认为这是好主意。

2.3 绝对不要清除对象

2.3.1 作用域 
2.3.2 对象的作用域 【 “memory leak,” in which a programmer forgets to release memory. 】这是Java的内存泄露,不是C++的内存泄露。

2.4 创建新的数据类型:类

有一些翻译我直接改了,如各种标题——看起来烦人。
2.4.1 字段和方法 他的fields应该不包括static fields。

2.5 方法、自变量和返回值

function Vs. method,《3.1.2 方法· 4. 副作用》中,按照Pascal,把子程序/方法被分成两种:函数和过程。【Methods in Java determine the messages an object can receive.】不太严谨。方法仅仅是一个代码块,如果它“是”类的接口,才决定其对象能够接收该消息,而Help method即private method显然不是接口。
【象这样调用一个方法的行动通常叫作“向对象发送一条消息”】。嗯
2.5.1 形参列表 

2.6 构建Java 程序

2.6.1 名字的可见性Name visibility  标题很操蛋。文不对题,标题应该叫“命名空间”或package。名字的可见性令人想起变量的 可见性与变量隐藏
2.6.2 使用其他组件 原来讲import
2.6.3 static 关键字 

2.7 我们的第一个Java 程序

这里介绍了 如何查看JDK文档

2.8 注释和嵌入文档


总体上,这一章比较简单。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值