www.alphatom.com

统计

留言簿(1)

阅读排行榜

评论排行榜

2005年4月9日 #

重构---Who are you?!

不要当你需要新的功能的时候,或者原来的程序出了Bug,你才想起重构。

《重构》那本书你看过了吗?它写的是什么?那本书的价值何在?介绍重构这门技术?告诉你为什么重构?错!那本书的价值就在于它把应该引起重构的Bad Smell一一列了出来,并给出了该如何重构解决这些Bad Smell的意见,不然那本书看一遍就可以扔了!

你知道什么是面向对象吗?接口! 你知道什么是TDD吗?重构!

详细内容

posted @ 2006-02-06 12:31 idior 阅读(625) | 评论 (1)编辑 收藏

Enterprise Test Driven Develop

       TDD这个概念出现至少也有两年多了, 在大家刚接触它时候, 几乎没人不拍手鼓掌, 测试驱动的概念确实可以为我们带来很多的好处. 泡泡在前不久写了一篇很不错的TDD的文章, 可是我还是忍不住在他的评论中说到这篇文章有点”. 确实,同样的概念在书中, 在大家的口中已经被说烂了. 但是TDD真正给我们带来什么呢? 有多少人在用TDD? 为什么这么好的技术到了应用中就被人们抛弃了呢?

(: Design Pattern面世都十几年了, 现在还是有不少好书在介绍它,所以不代表不好,泡泡的总结在园子里还是最好的一篇TDD文章, 特别建议刚接触TDD的参考之.)  

        TDD的应用是阻挠TDD发展的重要原因, 回想一下有关TDD书中举的那些例子. 再想想你学习了解TDD自己又做了哪些应用? --- 类库, 最基本的几个类之间协作, 不涉及数据库,不涉及UI,不涉及企业服务. 这样看来TDD最适用的场合就是不涉及复杂应用的类库. 比如一个保龄球游戏, 一个Money兑换系统. 如果是这样那TDD自然没有人用了, 真正的项目有几个不涉及负责应用呢, 有几个不和数据库,界面打交道? 可是一旦你想将TDD应用于此时, 你就会发现烦不胜烦, 无从下手.

       难道TDD真得这么不堪一击?...  详细内容

                
Something you should know

不要去测试类中的每个方法. 要测试这个类对外所能提供的功能, 这些功能可能是其中的几个重要方法,可能需要类中的几个方法协作. 记住一点, TDD中测试代码也是文档的一部分, 你应该通过你的测试代码告诉别人如何使用这个类.

posted @ 2005-08-09 14:00 idior 阅读(446) | 评论 (0)编辑 收藏

Generics to Eliminate Casting ?

详细内容

posted @ 2005-08-01 18:05 idior 阅读(411) | 评论 (0)编辑 收藏

Enterprise Persistence Design

在前不久发布的质疑国内.Net社区的随笔中, 我个人算是对社区的力量抱怨了一把. 下面该有些实际行动来推动社区的发展, 其实在写那篇随笔的时候正在总结一些心得, 现在我把它发表出来供大家讨论,也算是带个好头,希望能起到抛砖引玉的作用.

    在阅读此文之前推荐阅读O/R Mapping 基本概念,在基本概念上达成共识.

    Enterprise Persistence Design

 

posted @ 2005-07-18 16:46 idior 阅读(604) | 评论 (0)编辑 收藏

多态? 你的理解是什么?

在博客园我曾经发过这么一个随笔,得到不少的相应,同样希望能听到java朋友们的高见

wayfarer
他的随笔中谈到了面试别人时的一个问题. 你是如何理解多态的.

我想每个人的理解都不同,那么我们就来集思广义吧.
你可以从概念层 实现层,各个层面谈谈你对它的理解.角度越多,越能加深我们对它的理解.

不过有个小要求,就是用一两句话把你的意思表达出来.越是精练的语言,越能反应问题的实质.
我们不要求全面但是要有内容.比如sumtec的面向对象就是面向接口.

不过这里不要求一定是自己的见解,也可以是别的大家的看法.
毕竟我们的目的是理解多态!

我先抛砖引玉:
多态就是实现将接口(不特指关键字interface)与实现分离的技术.


评论:

# re: 多态? 你的理解是什么? 2005-03-06 23:38 | alittlefish

在实际操作中,多态可以让我不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,而这些方法通过一个抽象类或者接口来实现。
从下往上看的话,多态实际上是多个对象的抽象,对它们进行通用编码。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 08:41 | 一切从.NET开始

没有多态,工厂方法模式的效果就大打折扣,或者可以说不可能实现 :)
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 08:47 | 小诈

对于相同的事件(不指一般我们说的那些事件),不同的对象表现出不同的行为(特征)。

删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 09:22 | KingofSC

多态给我的感觉就是提供父类调用子类代码的一个手段而已
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 09:29 | idior

很好,继续,希望看到更多更新的观点。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 10:08 | age0

继承的目的是复用,继承复用包括两方面的复用:抽象(接口)复用,实现(过程)复用。

多态的目的就是要将抽象复用及实现复用剥离开来,子类虽然拥有和父类一样的抽象接口,但实现过程却未必一样,多态的引入就是要在继承的基础上实现变异的可能性。当然子类继承也不一定会产生实现差异,所以多态允许在产生差异的时候override父类接口,没有产生差异的时候直接继承。

interface
则是另一种复用方式,interface只允许抽象复用,而禁止实现复用,所以interface比继承显得更轻量,但实际上系统中的实现复用必须由其他机制来保证。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 10:15 | age0

To idior,想用一两句话来解释清楚一个深奥的概念是不是有点不切实际。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 10:53 | rIPPER

一时 找不到sun oo-226课程了,里面应该有比较简单明确的定义
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 10:59 | sysword

我的理解,一个问题一般会表现在多个层面上,各个层面上抽象程度不同,多态正是思考问题过程中跨越各层的桥梁。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 11:09 | dudu

我觉得多态是在对象的基础上更高级的抽象, 它描述了一组具有共性的对象。
Allen Lee
的《今天你多态了吗?》值得一读: http://www.cnblogs.com/allenlooplee/archive/2004/11/02/59519.html
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 12:38 | 生活、工作

运行时,才明确具体是指那个对象,这给client代码,带来了很大的灵活性。使依赖注入、针对抽象与接口编程、同一行代码操作不同类的对象(用接口)等等成为可能。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 12:50 | idior

我比较喜欢生活、工作的描述
◎age0
如果概念解释是很难用一两句话说清。
但是就像生活、工作这样的描述就能有意义。


删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 17:43 | 班门弄斧

多态是多个对象UpCast的过程
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 19:56 | 丁丁

用人来表示基对象,多态就是对于不同种类的人(情圣或者情盲),拍MM马屁虽然目的相同,但是效果很不相同,情圣说你好漂亮就抱得MM归,而情盲拍得话,可能就被锯
删除评论  

# re: 多态? 你的理解是什么? 2005-03-07 22:57 | Neter

我比较同意小诈的观点,多态就是具有相似功能的对象,有着不同的表现方法和行为。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-08 01:32 | NickLedson

我的观点是大大增强代码的复用性,使得项目架构更加清晰,松耦合.
比如在实际应用中我可以轻松继承一个System.Window.Forms.Control命名空间下的类比如Button打造属于自己的NixButton类而当一些原有系统的方法参数要求的传入的参数类型是Button,我不必修改原有代码而直接把NixButton的实例对象传进去依然可用.

从而达到代码复用和架构松耦合的效果

子类继承了父类的所有接口,包括invoke handler/object对应表然后按继承关系和invoke handler不同而调用不同的实现代码!

删除评论  

# re: 多态? 你的理解是什么? 2005-03-08 09:44 | idior

小诈的观点确实比较简明的说出了多态的表现.
希望看到更加深刻透彻的观点.
删除评论  修改评论

# re: 多态? 你的理解是什么? 2005-03-11 16:15 | myx

一位司机在公共汽车上,有可能是乘客,有可能是司机,就就是多态吧^_^
删除评论  

# re: 多态? 你的理解是什么? 2005-03-13 06:21 | MindScape

和小作的差不多,多态的本质根本是语义相同。

多态是指,不同对象对应于同一动作语义具有不同的实际行为。


删除评论  

# re: 多态? 你的理解是什么? 2005-03-13 18:10 | 龙蛰(NeoLee)

呵,我也常在面试中提到对多态的理解,我的理解是:

接口是面象对象的实现,多态是面象接口的应用!

BTW:
不太认同sumtec的面向对象就是面向接口. 面象对象更多的是一种开发思想,接口更多的是实现技术,用就是来表达不确切,但这么形容也道出接口是面象对象开发中实现抽象最主要的手段!
删除评论  

# re: 多态? 你的理解是什么? 2005-03-13 21:56 | idior

sumtec的那句话当然不对,关键是道出很本质的东西。

我觉得多态是面向接口的保证,支持。 而不是应用,关系反了吧。
由于多态的支持才能面向接口。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-14 00:32 | 龙蛰(NeoLee)

句中的应用有两重含义:
其一,多态是接口的特性。其二,就是对接口的应用,如在子类中override父类接口。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-26 23:09 | jsports

我认为多态,首先蕴含有decorator 的味道---------->一样的接口,但是功能上增强了。

另外一方面,多太表明实现多态的class是一族的,
对外部(外人)来讲,只要知道有这个方法(标签),
具体运行时你是这个系列(族)的谁,我不关心,我只关心你能给我进行这个服务就行。
删除评论  

# re: 多态? 你的理解是什么? 2005-03-27 08:30 | 生活、工作

通俗的说,先说明一项功能或动作,风马牛不相及的东西去实现它。

对服务器段代码而言:
订下这个功能的设计时间较长,但写时一下了就完成了,用1%的时间,但风马牛不相及的东西去实现它时,耗时就多了,用99%的时间。

对客户端代码而言:
从使用的角度说:好处还是我上面所说的。
从学院派的角度说:就是小诈的说法对于相同的事件(不指一般我们说的那些事件),不同的对象表现出不同的行为
删除评论  

# re: 多态? 你的理解是什么? 2005-03-27 11:41 | idior

jsports和生活、工作的观点都不错 :)
删除评论  修改评论

# re: 多态? 你的理解是什么? 2005-04-01 13:54 | ttyp

多态是和继承相反的概念
多态是父类调子类的实现,继承是子类调父类的实现,由于多态时不知道会被哪个子类继承,所以定义的东西都是虚函数,当你执行这个虚函数时,首先找到该虚函数代表的实体子类,并执行子类中的相关代码
删除评论  

# re: 多态? 你的理解是什么? 2005-04-01 14:08 | idior

@ttyp
多态是和继承相反的概念 interesting idea!
删除评论  修改评论

# re: 多态? 你的理解是什么? 2005-04-09 13:24 | huangyi

我从客户和服务的角度来理解 就是

服务可以由许多人来提供。
而客户只管使用服务,不需要知道服务的来源更不需要知道服务是如何实现的。另外,客户也许还会有小秘,专门帮客户选择服务的。

哎 多态让客户太舒服了啊 呵呵

 

posted @ 2005-04-09 16:13 idior 阅读(1251) | 评论 (6)编辑 收藏

测试驱动开发 --- Rss Reader Item Marker

1.         Refactory away External Loops        尽量将集合遍历的操作放在集合内

2.      Reduce Private Method                    尽量减少私有方法

3.     Open-Close Principle                        封闭开放原则

4.      Specification Pattern                        如何从一组对象中选出满足特定条件的对象

本文将围绕以上主题就最近很流行的RSS阅读器的一个功能(Mark)以测试驱动开发的方式展开. 最后给出一个通用的处理集合的框架.

详见文章
blogJava首贴

posted @ 2005-04-09 16:12 idior 阅读(381) | 评论 (0)编辑 收藏