• 读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 凝视和嵌入文档


    整体上,这一章比較简单。
  • 相关阅读:
    javascript模拟枚举
    javascript实现命名空间效果
    js数组去重
    文件上传插件
    script标签的defer属性
    js数组复制
    更改visual studio2010的主题
    关于json格式在.net前后台传值的详细示例
    where T : class泛型类型约束
    JavaScript模仿鼠标拖动选择功能
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5165640.html
Copyright © 2020-2023  润新知