Java编程思想之每天两小时(一)

之前也学过Java,但是因为很少用,所以一直没有当回事,现在想想,那时真是太年轻啊。后来朋友推荐这本Java编程思想给我,刚拿到这本书,被这厚厚的一本惊呆了,里面的很多内容也是似懂非懂。不知道从何看起。然后这本书一直被搁置在书架上。现在开始做项目时才发现有个扎实的Java基础是非常有必要的。所以翻开这本书,每天两小时边调试边学习。顺便一做个笔记,以后可以时常温习。如果有道友对这方面比较熟悉,求指教。感激不尽!

****第一章  对象导论****

之前学习Java时老师也没说过什么对象导论,这个对象导论也是我第一次接触。

“我们之所以将自然界分解,组织成各种概念,并按其含有分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来。。。除非赞成这个协定中的有关语言信息的组织和分类,否则我们根本无法交谈”---Benjamin Lee Whorf

我对这段话的理解差不多就这个世界里的万物之所以叫那些,只是因为我们这些口语交流的参与者制定的,我们称火为火,但是在动物看来,火可能是被他们称为一种可怕的红色的花。所以在Java语言的世界里,我们就要遵守它们的语言规则。不同于人类语言的一种新的协定。

计算机革命起源于机器,因此,编程语言的产生也是始于对机器的模仿。计算机是头脑延伸的工具。就像是头脑的自行车。同时还是一种不同类型的表达媒体。更像是我们头脑的一部分。面向对象程序设计(Object-oriented Programming,oop)便是这种以计算机作为表达媒体的大趋势中的组成部分。##1.1 抽象过程##所有编程语言都提供抽象机制。人们所能解决的问题的复杂性直接取决于抽象的类型和质量。所谓的类型--所抽象的是什么?汇编语言是对底层机器的轻微抽象。这个阶段出现了很多“命令式”语言---FORTRAN,BASIC,C等,都是对汇编语言的抽象。虽然他们在汇编语言的基础上有了大幅度的改进,但是它们所作的主要抽象仍要求在解决问题时要基于计算机的结构,而不是基于所要解决的问题的结构来考虑。(个人理解为这些语言是为了计算机而存在,并不是为了解决问题而存在。当你需要使用这些语言解决问题时,得先考虑是否基于计算机的结构。)程序媛必须建立起在机器模型(位于“解空间”内,这是你对问题建模的地方,比如计算机)和实际待解问题的模型(位于“问题空间”,这是问题存在的地方,例如一项业务)之间的关联。建立这种映射是很费力的,而且这不属于编程语言所固有的功能。另一种对机器建模的方式就是只针对待解决问题建模。早期的编程语言比如LISP和APL,都是选择考虑世界的某些特定视图(分别对应于“所有问题最终都是列表”或者“所有问题都是算法形式的”)PROLOG则是将所有问题都转化成决策链。此外还产生了基于约束条件编程的语言和专门通过对图形符号操作的来实现编程的语言(后者被证明限制性过强)但是这些方式一旦超出起特定领域就力不从心了。

(所谓抽象类是用来表征我们在对问题领域进行分析、设计中得出的抽象念,是对一系列看上去不同,但是本质上相同的具体概念的抽象;所谓接口,相当于电源插座,可插入构件相当于电器。可插入构件的关键在于存在一个公用的接口,以及每个构件都实现了这个接口。接口是实现构件的可插入性的关键。

Demo抽象类的定义方式如下:

abstract class Demo {

abstract void method1();

abstract void method2();

… })

面向对象方式的实质:程序可以通过添加新类型的对象使自身适用于某个特定问题,OOP允许根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题。

OOP和计算机的联系体现在:每个对象看起来都有点像一台微型计算机,他有状态,还具有操作,用户可以要求对象执行这些操作。

下面是Alan Kay总结的Smalltalk(Java所基于的语言之一)的五个基本特性:

1) 万物皆为对象。

2) 程序是对象的集合,它们通过发送消息来告知彼此需要做的。可以把消息想象成某个特定对象的方法的调用请求。

3) 每个对象都有自己的由其他对象所构成的存储。就是可以通过创建包含现有对象的包的方式来创建新类型的对象,因此,可以在程序中构建复杂的体系,同时将其复杂性隐藏在对象的简单性背后。

4) 每个对象都拥有其类型。每个对象都是某个类(class)的一个实例(instance)。这里的类相当于类型

5)某一特定类型的所有对象都可以接收同样的消息。这种**可替代性**是OOP中最强有力的概念之一。

Booch 对对象提出了一个更加简洁的描述:**对象具有状态,行为,标识。**每个对象在内存中都有唯一的地址。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

P1531 I Hate It

题目背景 很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。 题目描述 不管你喜不喜欢,现在需要你做的是,就...

36760
来自专栏韩伟的专栏

面向对象的代码风格(下)

面向对象代码的结构 在结构化编程中,代码的结构以分解流程,实现处理方案为核心,代码的分解原色是以实现步骤为主。理解这种结构的代码,我们需要先理解问题的解决方案,...

36040
来自专栏武军超python专栏

2018年8月26日python常识和各大语言发展史

今天遇到的新单词: precision  n精确度 generator n发电机,生产者,生成器

14140
来自专栏技术博客

设计模式原则(单一、开放封闭、里氏代换、依赖倒转、迪米特法则五大原则)

        如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,当变化发生时,设计会遭受到意想不...

13020
来自专栏编程

英语不好,能看懂编程吗?

学会编程不需要多高深的英语水平,想要学会编程,简单的英语水平足够了,现在的程序开发环境又很友好,基本上打开之后不需要怎么配置,直接写代码就行,程序语言无外乎顺序...

23500
来自专栏老九学堂

技术大咖分享:如何评价一段代码?

经常有人微信问老九君,什么样的代码才算是好代码。这个问题其实见仁见智,业内也没有统一的标准可以使用。我仔细梳理了一下自己评价代码的方法,总结了五个评价指标。 规...

37560
来自专栏Python小屋

几段小代码解释Python命令式编程和函数式编程

所谓命令式编程,是指How to do,要通过指令告诉计算机如何一步一步地完成预定任务;而所谓函数式编程,可理解为What to do,只需要通过简单的指令告诉...

24230
来自专栏一个会写诗的程序员的博客

附录B 编程的本质附录B 编程的本质编程的本质N小结编程简史名词纪要参考资料

尼古拉斯·沃斯(Niklaus Wirth,1934年2月15日—),生於于瑞士温特图尔,是瑞士计算机科学家。Pascal语言之父。

10530
来自专栏领域驱动设计DDD实战进阶

关于领域对象业务逻辑中条件判断的最佳实践

16640
来自专栏深度学习那些事儿

学习C语言的必备书籍-从入门到精通

不同学校教材不通,大部分书都把C语言的基本内容讲出来了,不推荐谭浩强的C语言书,如果仅仅是当第一本C语言书是可以的。

52140

扫码关注云+社区

领取腾讯云代金券