2011年(21)
分类: Java
2011-03-25 16:53:53
第5章 类设计指导
面向对象的目标:用近似于人们实际思考的方式来对现实世界建模。反过来,在我们理解他人的程序时,以实际中的例子来还原他人的思维,是不是就更容易明白了呢。
标识公共接口
设计类时最重要的问题:提供最少的接口。(低耦合)
设计健壮的构造函数(或析构函数)
内存泄漏问题:当一个对象的生命周期已经结束,但在生存期内分配的内存未释放,而且创建该对象的应用程序还在运行,那么这些内存对于操作系统来说就是丢失的。严重时可能会导致消耗了很多内存而系统将没有内存可以分配的情况。
在类中设计错误处理
在编程时一定要编写说明文档,没有好的说明文档就不会有好的设计。
当设计一个类时,应明确该类与其它类之间如何交互。
在设计时考虑重用
设计时考虑扩展
当对一个类进行扩展(向类中添加新的功能或者修改已有的某个特性)时,要保证相对容易, 不用重写无关代码。
在此,文中以继承为例,对类进行扩展。可是看过好多文章,已经不赞成用继承了,组合比较好一点。(看第七章中关于组合与继承的讨论吧)
确定什么样的方法和属性是静态的。
提取不可移植的代码
将不可移植的代码抽取出来,建立一个包装类来处理它。
提供复制和比较对象的方法,前面已经说过一次了。
尽可能使作用域最小
将属性与行为的作用域限制到最小,以减少不同对象对其调用的影响。从这个意义上说,全局属性与行为的应用应该可能少。
类应该对自己负责,print()方法应该由各种不同的图形类来提供。
在设计时考虑可维护性
高内聚,低耦合的概念。
哪些是耦合?
1.元素B是元素A的属性,或者元素A引用了元素B的实例(这包括元素A调用的某方法,其参数中包含元素B)。
2.元素A调用了元素B的方法。
3.元素A直接或间接成为元素B的子类。
4.元素A是接口B的实现。
使用struts我们可以应用MVC模型,使页面展现与业务逻辑分离,做到了页面展现与业务逻辑的低耦合。使用spring我们运用IoC(反向控制),降低了业务逻辑中各个类的相互依赖。使用hibernate则是使我们的业务逻辑与数据持久化分离,也就是与将数据存储到数据库的操作分离。
Struts,spring,hibernate,没用过,但一直不停的出现在耳边。只知道是些框架类的东西,但未做深入研究。无论哪种技术或者框架的产生都会宣扬自己的功能及优势,在我们一头扎进去学习它们,做它们来为我们服务时,是不是也该想想其背后的思想依据呢?
在类中提供测试接口,存根(stubs)的概念。
使用对象的持久性
持久化的概念:维持对对象的状态
将对象保存到一些存储设备上:文件系统,关系数据库,OO数据库。
串行化的概念:将对象存储到介质(如文件,内存缓冲区)中或是以二进制的形式通过网络传输。之后反串行化从这些连续的字节(byte)数据重构原来的对象。在特定情况下,可以得到原对象的一个副本,但情况并不都这样。也就是说,有时可能得不到原对象的副本。那么什么时候得不到呢?是什么原因造成的呢?我觉得在文件上传/下载组件和tcp/ip协议的实现中可能有串行化的代码。