处理教材:Access Control of "Thinking in Java"

来源:互联网 发布:学c语言还是学java 编辑:程序博客网 时间:2024/05/16 11:18

——关于以TIJ为课本的Java教与学的方法

前面的章节,都是JAVA作为单人开发小程序可以用到的,但是,本章却涉及规模软件开发的原则,就是团队开发和更新。所谓团队,就是指有分工地开发,有的人写一些类出来,有的人则使用别人写的类完成更复杂的功能,使用的方式如组合或继承。而更新,就是完善过去已经写好的代码,有时是增减一些功能,有时不增减功能,只是提升结构(比如把两个类合并成一个类等)。其实,本章提供的特性,如同注释一样,都是为了“人”而提供的,没有这些特性,机器也能运行,但是有了这些特性,人们才能够合作写出复杂的程序。

本章所介绍的特性有两个:

第一,是如何把类分门别类地存放,以便需要的时候能找到。比如我写了一些用于学生的类,你写了一些用于教师的类,可能我们两人都是先写一个Person类,然后,从Person类继承出来了学生或教师。这样的话,如果有个人想写教学系统,想用到我们两人的类,他就把我们俩写的程序(一般,我们只会给别人编译过的字节码,即.class文件,而不给源码,使得他不能阅读或改写我们的代码。)拿去用,结果发现了两个Person类重名了,怎么办呢?他又不能改我俩的代码……于是,我们的java语言需要一种新的机制,可以让别人同时用两个Person类,呵呵,这个新的机制就是包(Package)

第二,如何保留一部分作者可以未来更改的地方,使他的更改不影响用户的使用。当然,如果作者在更新的时候,不改变字段的定义和各个方法的名称、参数、返回类型,只是改方法体,或者增加新方法的话,是不存在这个问题的,然而,一般的作者想要做的更新都会包含一些字段定义的更改和方法名称的更改等等。怎么办呢?作者和使用者只好线下协商好,计划一下谁的类完成什么功能,提供什么方法,用他写的类时只用那些方法和字段,那么,作者就可以轻松地更新了,只需要绕过那些商量好人家会用到的元素就可以了。这种协商,就是publicprivate

本章的主要内容就是围绕这两个主题展开。关于包的机制,作者提出了一个广泛采用的模式,即做一个自己的“工具箱”,这是一个包,包中所有的类都提供静态的方法,使用import static可以把它们当做全局函数一样使用。另外,也可以通过把用于调试过程和开发过程的类分别放在两个包中,这样它们虽然同名但是不会冲突,我们也可以灵活地切换,因为这种方法不常用,所以,同学们自己看一看就可以了。

关于private的用法,作者精彩地演示了工厂(factory)设计模式的使用,这种模式的意义在于限制了用户以怎样的方式创建一个对象,同时,也给了用户程序员明确的设计思路,即以一种统一的方式创建各种各样的对象。除此以外,类似的还有单例模式(singeleton)用来完全确保具体的对象。当然,如果真的只允许有一个对象存在的话,就可以被静态成员替代了,一般都是仅允许某些具体的对象,目的是为了控制具体的资源。

实际上,javaSE6目前还有一些欠完善之处,比如,一个有名字的包中的类,无法访问默认(没有名字)的包中的类,会发生“找不到类”的编译错误,所以,一般还是建议读者确立一个自己的包名,然后把自己写的类都放在包里。

    有趣的是,TIJ提出的javaSE5中的一个“漏洞”已经被javaSE6给补上了,就是161页提到,当一个具有包访问权限的类处于其他包中时,还可以访问那个类的公开静态方法,现在已经不可以了。

原创粉丝点击