面向对象软件重构
面向对象软件重构
维普资讯 http://
华奇兵,:向对象软件重构等面
9 7
得到更好的复用性。时,以使用重构对已有的代这可
现该软件的一个类 C so r该类主要完成客户付 u tme。费的计算。下面是该类的主要代码:d ub e Cu t o l s ome: c a g F r Da e s a t Da e e d) r:h r e o ( t tr, t n
码与设计进行重构,取可复用单元。抽 ( )使软件得到更好的维护性。与软件复用紧 2密相连的是软件的可维护性,件的维护性是软件软工程中最棘手的一个方面,在软件生命周期中,大量的时间被用于软件的维护。研究表明,目前软件的维护费用大约占整个开发过程中的 6以上 L。在对 0/ 9 6 4]软件维护进行研究的过程中,人们提出了软件熵的 概念。所谓软件熵是一个程序从设计很好的状态开始,随着新的功能不断地加入,序逐渐地失去了原程有的结构,终变成了一团乱麻的过程的反映。了最为 使软件得到更好的维护,要对已有的代码与设计需进行重构。
{r t r ( n— t r ) r nt gPrc e u n e d s a t e i n ie:
)v d Cus o r: r a e il Da e d t ) oi t me: c e t B l ( t a e
{d u l h r e o b e c a g Amo nt c r e r 1 s Bi Da e, t ) u— ha g Fo (a t l t Da e; l a dBi ( a e, h r e mou t; d l d t c agA l n )
)Cu t m e so r——
r n n P i e d u l e f g rc: o b e i l sB l t: t a t i Da e Da e l
# c ag F r D t s r ae D t e d t) d u l h re o ( e t t t, e n D e lo b a aD a a ea d U( t ae. u l mo n ) d Bi D e d t d be a u t a o+ c e tBi D t ae r ae U( e d t ) a—
( )代码呈现一定的代码味道 (o es l ) 3 cd mel。 s K n e k和 Mat o lr出, et c B ri F w e指 n当你的代码呈现
: od v i: od v l
图 1 C so r图 utme类Fi.1 g
a r m o c so r ls ga f u t me cas
定的代码味道 (o es l ) c d mel的时候,常意味着 s通代码需要进行重构。代码味道是经验丰富的高级软一
这个类在开始的时候工作得很好。在某一天,但V/ CD DVD出租店的老板开展了新的业务,出了提
件设计与开发人员的一种直觉,面是一些常见的下代码味道 (o es l ) c d mel。 s
新的需求,求将客户分成 2种类型:要一种是会员客户,一种是一般客户。这样, C D V D/ VD出租店可以根据不同的类型的客户,实行不同的收费策略,对针会员客户打七折。这样,要对原有的 VC D 需 D/ VD出租管理软件程序进行更新以满足新的需求。下面是更新该程序的几种不同的方法。
重复代码 ( u l aec d )代码重复几乎是 d pi t o e。 c
最常见的代码味道,这是重构的最主要的原因。码代重复往往来自于 c p—n— at o ya dp se的编程风格。
长方法 ( n to ) 1 gmeh d。通常一个方法应该 o
具有很强的内聚性,当一个方法只完成一个任务,如 就具有很强的内聚性。方法的内聚性是指在一个方法中,各种操作之间相互联系的程序,常使方法具通有强内聚性的一个好处是可以提高程序的可靠性。
方法1直接修改。种方法是直接修改原代码。:这 这是一种最直接的方法,在实践当中,序员经常用程这种方法对程序进行修改。随着时间的推移及软件的进一步演化,种直接修改的方法会使程序的结这构变得越来越难以维护及扩展。 方法 2拷贝与粘贴。种方法首先将 C so r;这 u tme重命名为 g et u tme,着拷贝 g et u tme usC so r接 u sC so r的代码形成一个新的类me eC so r然后修改 mb r u tme,me eC so r中的 c ag F r方法以支持新 mb r u tme类 h re o
大类 ( r ec s ) 1 g l s。一个很大的类通常是把 a a
很多不太相关的职责交给了一个类而形成的,常通表明类具有很弱的内聚性。一个具有弱内集性的类通常存在难以
理解、以复用、以维护、易受到难难容
外界所发生的细微变化的影响等问题,常代表了通个“粒度”大的抽象,者承担了应该分配给别的或对象的职责。]一
的需求。这样的结果是 g e t u tm r与 u sC so e me eC so r两个类的绝大部分的代码是相同 mb r u tme的。这种方法也是在具体的实践中经常用到的一种方法,但是使用这种方法的直接结果是具有大量重复的代码,这将给维护人员带来极大的不便,往造往成“牵一发而动全身”的后果。
( )需求发生变化,发现原有的代码与设计 4而增加新的功能发生困难。需求总是会随着时间发生变化。在现实生活中,常会出现这样的情况,经当需求发生变化的时候,要求对原有的代码与设计进就行改变,而此时发现原有的代码与设计很难再加进新的功能或是在加进新的功能的时候,出现代码急剧变坏的现象,时我们就需要对原有的代码与设此计进行重构,以使其容易被扩展。
方法 3直接改变结构。这种方法直接对程序的:结构进行修改从而使程序随着不断的演化仍保持着比较好的结构。但是在实际中使用这种直接改变结构的方法通常比较困难,也容易出错。
3一个示例 设计一个 VC DVD出租管理软件, 1是实 D/图
方法4使用重构。:针对这个例子,我们在为了满足新的需求而增加新的功能之前使用重构对软件的结构做一些变化。下面是使用 WiinF Op y e la . d k博 l
面向对象软件重构
维普资讯 http://
9 8
重庆邮电学院学报(自然科学版 )
20 0 4年第 2期
士论文中提出的一些重构对这个例子进行重构的过程。
( )用 c a g— l s n me重构将 C so r 1使 h n e c s— a a u tme类名改为 g e t so r如图 2所示。 u sCu tme,Cu t me so r—
r n i g rc: o b e e t Pie d u l n ls Hl t: t a t l e Da e Da
g et so r us Cu t me
#c ag F r D t s r t, t e d ae:o be h re o ( e t t e D e n D t) d u l a aD a
a —
#c ag F r D t sat t, t e d ae:o N h re o ( e tr e D e n D t) d u e a a D a—
a d il D t a e d u l mo n ) d B 1 a e d t . o b e a u t (+ c e t B 1( t d t ) r a e il D e a e a
: od v i: od v i
a d i ( t a e d u l mo n ) d B 1 D e d t . o be a u t la
: od v i
+ c e tBi ( t a e ra e l Da e d t ) l
: od v i
图4使用mo e m mb rv r be t— uecas v_ e e— ai l o s prls和 a p l u _ e o重构之后的类图 ul p m t h d—
g e t so r us Cu t me——
r n i g rc: o b e e t P i e d u l n l sB l t D t a t i D e: e l a a
Fi. Cls da r m a tr g4 a ig a fe mo e v _me b r— r ra l— o m e— ai be— v t s p r ls a d p l u— to rf co i s u eca s n ul p— meh d e a t rng )——
—
Cu t me so r——
#c ag F r D t s r t, t e d ae。 o be h re o ( e t t e D e n D t) d u l a aD a a —
r n i g rc: o b e e t Pie d u l nls B 1 t: t at iD e D e 1 a a
a d i ( t a e d u l mo n ) d B l D e d t, o be a u t la+ c e t商 I D t a e rae la e d t) (
:od v i。 od v i
—
#c a gF r D t s r t, t e d ae:o b h re o ( e t t e D e n D t) d u l a aD a a e—
图2使用 ca g_ l s n m重构进行的修改过程 hnec s a e a_Fi.2 g Pr c s f o e s o mo iiai n sn dfc to u i g c n a e h g c …… 此处隐藏:10158字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [文秘资料]班长职务辞职报告
- [文秘资料]完美的辞职报告
- [文秘资料]经典的员工辞职报告
- [文秘资料]医院口腔医生辞职报告
- [文秘资料]总经理辞职报告范文四篇
- [文秘资料]超市职员个人辞职报告
- [文秘资料]村妇联主任的辞职报告
- [文秘资料]辞职报告书格式
- [文秘资料]酒店辞职报告简单范文
- [文秘资料]联通的辞职报告
- [文秘资料]2017最新私企员工辞职报告范文
- [文秘资料]2019年度医院基层党组织书记抓党建述职
- [文秘资料]工作时间长辞职报告
- [文秘资料]辞职报告怎么写出来
- [文秘资料]个人能力原因辞职报告
- [文秘资料]网络工程师辞职报告
- [文秘资料]项目部辞职报告
- [文秘资料]缝纫工辞职报告怎么写
- [文秘资料]XXX州委书记述职报告
- [文秘资料]抓基层党建工作述职报告
- (王虎应老师讲课记录)六爻理象思维
- 八个常见投影机故障排除法
- 质量专业综合知识(中级)第一章质量管理
- 煤矿班组建设实施意见
- 我国快餐业与肯德基经营模式的比较与分
- 汽车保险杠模具标准化模架技术工艺研究
- 汽车二级维护作业团体赛比赛规程
- 装卸搬运工安全操作规程
- 高效的工作方法-刘铁
- 依据《生产安全事故报告和调查处理条例
- 2015专业PS夜景亮化效果图制作教程
- 企业劳动定额定员浅析
- 中枢神经系统医学影像学本科五年制第五
- 长城汽车参观探营第三站:研发试验中心
- 小升初语文专项训练
- 建筑工程质量检测资质分类与等级标准
- 周燕珉-我国养老社区的发展现状与规划
- 《生命里最后的读书会》读后感
- 实验室管理评审报告
- CCNA思科网院教程精华之网络基础知识




