读TIJ -2 一切都是对象

《第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中很easy实现

对于方法调用栈上的数据,处理Integer i不如处理int j直截了当。

因为全部对象在堆上分配内存,方法调用栈上使用Java基本类型(如进行2+i这样的简单操作时),不应该被迫去创建各种对象。即使非常easy在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 keyword

2.7 我们的第一个Java 程序

这里介绍了怎样查看JDK文档

2.8 凝视和嵌入文档

整体上,这一章比較简单。

时间: 2024-10-12 22:05:08

读TIJ -2 一切都是对象的相关文章

读TIJ -1 对象入门

<Thinking In Java·第 1 章对象入门> 第 1 章约20页,是对面向对象的程序设计(OOP)的一个综述.按照其前言所述:"其中包括对"什么是对象"之类的基本问题的回答,并讲述了接口与实现.抽象与封装.消息与函数.继承与合成以及非常重要的多形性的概念.这一章会向大家提出一些对象创建的基本问题,比如构建器.对象存在于何处.创建好后把它们置于什么地方以及魔术般的垃圾收集器(能够清除不再需要的对象).要介绍的另一些问题还包括通过违例实现的错误控制机制.反

读TIJ -3 控制程序流程

<Think in java·第 3 章控制程序流程> 这一章应该不会涉及"思想",<编程导论(Java)·0.2.2 操作符和操作数>后,将相关内容压缩成一节<第3章功能抽象·3.2实现>. 3.1 使用Java 运算符 副作用(side effect):[p98:副作用一般是针对操作(表达式)而言的,一个操作/表达式有"副作用"是指在对该表达式求值时,会改变程序的一个或多个数据,以致再次对该表达式求值时,可能会得出不同的结果.

读TIJ -4 初始化和清除

<Think in java·第 4 章初始化和清除> 本章介绍对象的创建和消除. 4.1 用构建器自动初始化 [You can imagine creating a method called initialize( ) for every class you write.]一句话的正确解读是,你(男生)将自己想象成为女生.所以,我专门用一节 < 编程导论(Java)·2.3.6 构造器不是方法>强调这一点. 4.2 方法过载 这一段解释非常经典,按照人们的日常生活介绍重载.同时

读TIJ -7 多形性

<Think in java·第 7 章  多形性> [面向对象的程序设计语言三种最基本的特征:数据抽象.继承和多态] 在这个层面是没有什么"思想"好谈的!当你按照人们熟悉的.习惯的思维方式,去思考"构造和组织"程序时,你可能会觉得很自然--你具有面向对象的思想:或者,有人X按照人们熟悉的.习惯的(人的而非机器的)思维方式,给你介绍.解释数据抽象.继承和多态时,你觉得贴近生活和人的思考习惯.你觉得他讲的概念理所当然.自然(当然也浅显易懂),这是X在&qu

读TIJ -5 隐藏实施过程

<Think in java·第 5 章隐藏实施过程> 从第一句话,就感觉本章会令我不满意."将发生变化的东西与保持不变的东西分隔开"与封装一毛钱的关系都没有.封装变化又称OCP,与OOP的封装性无关. 关于库(中的类A)的设计,依赖库的程序B,要求库是向下兼容的.程序B依赖的是A的接口.库的创建者不管想怎样自由地进行修改与改进,前提是不修改A的接口. 这里,A的接口,表示A需要提供的服务,设计者不可能.也不会考虑该服务(的方法名.参数)未来是否保持不变或改变. 所以,JD

读TIJ -6 类再生

<Think in java·第 6 章类再生> 读TIJ -1 对象入门 中已经就代码复用性吐槽了.继承关系在结果上(不是为了代码复用而设计继承关系)为代码复用提供了新的途径. 本章看其目录就比较杂,程序员的内聚思想去哪儿了?合成复用优先--合成.继承,为什么实现继承是不好的-- 6.1 合成的语法 解释了一个例程,没有什么好说的.has_a关系. 6.2 继承的语法 [You can think of inheritance, then, as reusing the class.]Is_

java基础 第2章 一切都是对象

第2章 一切都是对象 "尽管以C++为基础,但Java是一种更纯粹的面向对象程序设计语言". 无论C++还是Java都属于杂合语言.但在Java中,设计者觉得这种杂合并不象在C++里那么重要.杂合语言允许采用多种编程风格:之所以说C++是一种杂合语言,是因为它支持与C语言的向后兼容能力.由于C++是C的一个超集,所以包含的许多特性都是后者不具备的,这些特性使C++在某些地方显得过于复杂. Java语言首先便假定了我们只希望进行面向对象的程序设计.也就是说,正式用它设计之前,必须先将自己

读javascript高级编程05-面向对象之创建对象

1.工厂模式 工厂模式是一种常用的创建对象的模式,可以使用以下函数封装创建对象的细节: function CreatePerson(name,age){ var p=new Object(); p.name=name; p.age=age; p.speak=function(){ console.log("my name is "+p.name); } return p; } var p1=CreatePerson('Wang',15); p1.speak(); var p2=Crea

深入理解javascript原型和闭包(1)——一切都是对象

“一切都是对象”这句话的重点在于如何去理解“对象”这个概念. ——当然,也不是所有的都是对象,值类型就不是对象. function show(x) { console.log(typeof(x));    // undefined            console.log(typeof(10));   // number            console.log(typeof('abc')); // string            console.log(typeof(true));