〖面向对象技术〗
文章平均质量分 63
holy_phoenix
这个作者很懒,什么都没留下…
展开
-
《通过实验看 Java 中私有成员是否能被继承》续
我在蔽文《通过实验看 Java 中私有成员是否能被继承》中所举的例子有一个错误,使用了属性而不是方法来验证私有成员是否能够被子类所继承。在 Java Programming Language 中,有这么一段:“字段(field)只能被隐藏,而不能被覆盖。如果在子类中声明了一个和父类中相同名字的字段,那么父类中的字段仍然存在,但是不能再简单的使用其名字来访问父类中这个被隐藏的字段。”所以,在上文所涉原创 2005-09-24 19:22:00 · 5139 阅读 · 5 评论 -
Refactoring to Patterns 读书笔记(六)
前一阵公司的事情繁忙,导致这 Refactoring to Patterns 的书看完许久,却没有时间提笔来写这篇读书笔记。现在有点时间,总算是可以继续了。应用 Composite 模式替换隐式树结构在处理数据的程序(例如,生成 XML 文档)中,我们常常会隐式地实现一些树状结构的程序,就像下图左边所显示的那样子: 在这种情况下,构建隐式树的代码和展现隐式树的代码紧密地耦合在一起(不原创 2007-05-19 20:41:00 · 1303 阅读 · 0 评论 -
Refactoring to Patterns 读书笔记(五)
应用 Composed Method 模式 这大概是最简单的模式之一了,甚至可能有人会觉得如此简单的咚咚居然被成为“模式”是非常可笑的。不过,Kent Beck 曾说过:“some of his best patterns are those that he thought someone would laugh at him for writing.”Kent 就是在他的 Smalltal原创 2007-03-25 22:13:00 · 1200 阅读 · 0 评论 -
Refactoring to Patterns 读书笔记(四)
应用 Template Method 模式 在继承结构的各个子类的方法实现体中,可能会出现这样一种情况,即方法体中的代码按照相同的顺序执行类似的步骤,而它们的步骤之间略有不同,也 就是说在方法体中不变行为(invariant behavior)和可变行为(variant behavior)混合在一起。因此在子类中存在着重复代码用来表示其不变行为。(Number one in the stin原创 2007-03-25 00:00:00 · 1335 阅读 · 0 评论 -
Refactoring to Patterns 读书笔记(三)
应用 Strategy 模式替代条件逻辑结构Martin Fowler 在他的 Refactoring 一书中写道:“One of the most common areas of complexity in a program lies in complex conditional logic.”我们通常使用条件逻辑结构决定程序中的哪个算法代码会被执行,而业务相关的算法经常会发生变化,例原创 2007-03-18 23:39:00 · 1331 阅读 · 0 评论 -
Refactoring to Patterns 读书笔记(二)
用 Factory 模式封装具体类对于在一个包中实现了同一接口的具体类,不必让客户代码来直接地实例化这些实现类,应该创建一个 Factory 类来负担这样的责任。这样做的好处是: 1. 遵守了“面向接口编程,而非面向实现编程”的原则。 2. 减轻了代码中的“概念负担”(conceptual weight)。使用 Factory 类屏蔽有关包内实现类的细节,客户代码就只需要了解接口和 Facto原创 2007-03-17 14:02:00 · 1183 阅读 · 0 评论 -
Refactoring to Patterns 读书笔记(一)
应用 Create Methods 模式代替构造器(constructor)在面向对象的语言中,类的构造都是通过类的构造器完成的。但是OOP技术经过这么多年的发展,发现直接把构造器暴露给客户使用,在实践中并非一个很好的技术方式,故此各种 Factory 模式应运而生。就 Java 语言而言,构造器的缺点或者限制至少有如下三点:1.应为构造器的名字是不能随意选择的,只能和类名保持一致。因原创 2007-03-13 23:36:00 · 1507 阅读 · 0 评论 -
面向对象编程中的继承和组合的简单比较
继承(inheritance),是类 D 的对象可以使用仅对类C的对象有效的方法或者属性的特性,它使得这些方法和属性就好像是由类 D 定义的。这时,C 是 D 的父类,D 是 C 的子类。在继承结构中,父类的内部细节对于子类是可见的。所以我们通常也可以说通过继承的代码复用是一种“白盒式代码复用”。组合(composition),是通过对现有的对象进行拼装(组合)产生新的、更复杂的功能。因为原创 2005-09-29 19:39:00 · 7386 阅读 · 3 评论 -
关于继承的两个原则
1 类型一致原则:如果S是T的一个子类型,那么S必须与T保持一致。如果在任何需要类型T的对象出现、且在任何存取方法执行时都需要保持正确性的场合,都能够使用类型S的对象,那么就可以说S和T是同一类型的。例如,圆是椭圆的一个子类型,那么圆类型的对象同时也是椭圆类型的对象,任何可以将椭圆类型的对象作为参数的方法,都应该可以接受圆类型的对象作为参数。在一个良好的原创 2005-09-28 08:27:00 · 2241 阅读 · 0 评论 -
God Object
最近听到一个新的名词:god object,很有意思的一个词。如果一个对象/例程在系统中做了太多的事情,或者说是有太多不怎么相关的事情放在一个对象/例程里面来完成,这个时候就变成了弱内聚的状态。弱内聚的代码通常很长很长,“旁征博引”,就几乎像上帝一样处理所有的事情;或者很长很长,人们就很难看懂这样的代码,只有上帝才能理解这些神秘的东西背后的意义。时刻记住一个规则:强内聚、弱耦合原创 2005-09-28 08:43:00 · 2066 阅读 · 0 评论 -
有关函数返回值类型的问题
李卫公在他的 blog 中讨论了一个有关函数返回值的问题。其在文章中的初始问题,大致可以描述为:需要编写一个函数,从 HMLT 源代码中提取某个节点的文本,在提取失败的情况下,应当返回一个空字符串还是 null 值。李卫公在文中说明了,如果在失败的情况下返回一个空字符串的话,对于该函数的调用者而言,是无法区分出该函数是从目标节点中提取到一个空字符串,还是实际上什么也没有提取到。通常来说,一个函数所原创 2007-08-22 14:29:00 · 3423 阅读 · 0 评论