风语流年

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

 

解读:语言描述自然世界,是通过将自然界分层,分类和语言组织的各种规则,概念一一对应起来。使人在脑海中建立起一个模拟的自然界,而他人脑海中建立的模拟世界必须也是规则,概念为同一种(如都是java语言的规则),否则将无法交流。

 

对象的形成过程

抽象过程:问题通过计算机来解决。那两者的对应过程即为抽象过程,因为实际上的对应是不可能存在的,故我们要提取核心,去除外表。

Java语言,像人类的其他表达方式(文字,电影,音乐)一样。

怎样运用好这门语言,熟悉面向对象的设计方式。

抽象过程,

基于计算机(解空间)的抽象。以计算机运行原理作为建模的基础,发展成一个个对运行命令抽象的模型语言。程序员将实际问题与其对应困难很多。其模型有(问题是列表的,问题是算法形式的,问题是决策链,约束条件,图形的)

机器语言,将01组合成一条条供计算机执行的某种功能性命令,和参量等。如实现1+1的功能,我们需要代表它们的01组合,它们可能是多条命令(存储1,在存储1,执行加),或者直接就一条命令(执行1+1)。毫无疑问,两种方式在计算机的执行过程没有区别(都是同样的步骤),但前者是对机器的高度模仿,后者有了一定的抽象。但两者都只能执行1+1不够灵活,这也是机器语言的缺陷。

汇编语言,对机器语言的抽象。用变量代替1这个实际参量,用英文代替+,控制语句的执行顺序等操作,更为方便灵活操作简单的加命令,和控制何时加的问题。不过缺陷在于命令过于单一,难于扩展。

基于问题和机器

面向过程,进一步抽象,用方法扩展命令或者功能(实质就是命令的集合,有一定的结构)。但不够灵活的解决同类问题,如自行车的制造方法和汽车的是类似的命令结构,但对于方法不能通用,是造那个的方法就造那个。

基于问题(问题空间),用对象贯穿问题空间及解空间,以问题建立模型重新创建类型与之对应。而新的类型将不基于机器的内存结构,而拥有自己的属性和方法(虽然其基础也是基于机器的,不过此时进行了包装)

面向对象,将车归为一类,通过车这个类建立汽车对象,自行车对象。那么类的方法就是一个通用的造车方法了。

对象特点,可以将所有问题抽象成对象。程序是对象的集合,通过消息来通知对象做什么。对象之间可以相互包含。每个对象都有其类型。结构特点,具有状态,行为,标识(每个对象都有唯一的所在内存地址)

类特点,所有对象都是唯一的,但根据特性都可归为某一类。类,描述某类对象的结构,设置这类对象的通知消息。讨论,类是面向对象的基本概念,因为对象的管理就是通过类来进行的。对象太多,如何创建?对象太杂,如何归类?同类对象共同接口的创建?(这是有必要的,因为可以更好的管理对对象所发出的请求及使请求和对象的组合具有某些特定规则(如多态规则)的建立非常有必要)

讨论,对象,一种根据问题的需要新定义的抽象的数据类型,定义的抽象数据的类型(用于表示问题结构的数据类型),如内建类型(用于表示机器的存储单元的数据类型)一样int,char等。具有数据(可以由其他对象或基本类型组成),方法(可以通过引用调用的对象接口,其一般是运用自己的数据完成某类服务或改变自己的数据),由一个对象概念就能对应一些数据及功能的集合(如实现一到一百的连加,一个对象中就有一个一到一百的数组作为变量,存储数据。又有一个方法运用这些数据实现连加。而这个对象概念就相当于连加功能的代名词)

有了类就可以创建此类数据类型的任意个对象(代表具体数据)。作为解空间中的元素(特点,应该与问题元素对应以便模拟问题集合)

接口,对象的方法。

请求,引用调用对象的方法

实现,对象对请求能够接收并做出相应的服务过程中涉及到的方法与隐藏的数据。

对象接口,可以接收程序对对象发出的请求。

方法就是对象的接口。

对象服务的提供者,分析一个程序要有哪些对象或者一个程序中各对象的作用。可以通过服务为分析节点。因为对象就是服务的提供者,在了解大致的问题结构模型后就是设计对象来与之对应的。现有的代码库中有许多对象的定义,功能的实现其实就是这些对象的调用组合而成的,而具体的实现代码可以慢慢来实现优化。这样也可以使程序高内聚。

被隐藏的具体实现,程序员应该分为类的创建者和客户端程序员(类的使用者)。类库的创建很大程度依赖以隐藏。即使用者不能随意更改类库中的实现,而类库实现的更改又不影响使用者的使用,因为访问接口不变。

可复用的具体实现,一个类的可复用语言丰富的经验才能做到很好,但复用的方式有组合(一个引用作为成员变量,其具体的实现在运行时绑定),继承。

对于使用者来说,对象就是一个引用加上请求的接口组合,就能实现我想要的功能。至于内部的实现(方法代码及运用到的数据)不能够知道。可能对象的某些接口只供对象内部使用,对象的数据一般只能对象内部使用。这是通过访问控制做到的(private)

继承,类不仅仅是一个对象的抽象结构描述,还存在与其他类的联系。继承就是一种联系,表示两类的包含关系。

基类,一个普通的类就可以为基类

导出类,拥有基类所有的接口,当接口方法运用到基类的私有数据时最好不要复写此类方法,那么他实际就会调用基类的方法。

多态,我们希望在对象具有继承的层次结构关系时,将导出类对象作为基类对象来看待,发出请求,而做出服务的任然为导出类对象。在面向对象的语言是可以实现上述功能的,定义类型为基类的引用变量,将导出类对象赋值给他,那么就已经完成上述功能了。

原理,后期绑定技术,编译时期只是保证引用绑定的对象具有引用类型的所有接口,但不会去关心该对象的具体实现是什么。运行时期,对象才真正的被创建,引用变量才真正的拥有对象的地址,至于地址怎么计算而来?

单根继承结构,所有对象的基类object,使得所有类都有一些公共的接口,极大的方便了对对象统一操作的规则制定,如对象的回收和参数的传递,对象在堆中的创建,系统的操作,异常的处理等。即我虽然不知道你具体什么类型,但我知道你一定有哪些接口。

容器,存放对象引用的对象类型。

参数化类型,容器中应该存放同一类型的对象,但实际是可能不同类型的对象。那么如何去整体操作它们呢?作为object看待。不方便,涉及到向上转型和向下转型。参数化类型可以很好的解决上述问题,一开始就能够规定容器存放的类型,在编译时就进行检查。

对象的创建和生命周期,对象的存放位置有两种方式(在编译时确定对象生命周期,将对象放入栈中或静态区。更为高效。在运行时期确定对象的生命周期,堆中。需要大量时间分配和查询内存空间。)

异常处理,对于运行期异常我们无法捉摸,可能发生可能不发生。但我们应该在代码中提现出异常发生后应该做些什么才能保证程序的健壮性,捕获异常即是一种方式。

并发机制,同时运行多条代码的机制。

网络,实现网络连接,Java中有类库已经封装好了,只要使用它即可。如何很好的实现网页的动态生成问题。这需要有程序去解析和生成动态的内容。

 

posted on 2018-05-05 10:37  风语流年  阅读(96)  评论(0编辑  收藏  举报