论文部分内容阅读
摘要:随着现在的软件的复杂性日益提高,传统的开发过程和一般的面向对象思想对于软件的开发和维护方面逐渐暴露出它的不足,主要表现在过于僵硬——很难在软件系统里加入一个新性能。过于脆弱——在修改完成之前,无法确切预测到可能会波及到的地方。复用率低、黏度过高——复用系统的某个部分时,总是发现这些已有的代码依赖于很多其他东西。于是面对这些问题就需要可扩展性、灵活性、可插入性的思想,于是设计模式就应运而生。
关键词:统一建模语言;面向对象;设计模式;桥模式;策略模式
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)16-30889-01
Application Design Pattern in Library Manage System on UML
LI Cui-ling,SUN Wu-hua
(Faculty of Information Science and Technology,Jiujiang University,Jiujiang 332005,China)
Abstract:Because of the complication of the development about software,the tradition process and normal object-oriented can't satisfy Today's software development and maintain,follow as: Rigidity—It is difficult to addition a new property, Fragility—before modify, we can't expect the interact somewhere, Immobility、Viscosity—when we want use something, we will find that this codes act with some else. Suffer from this we need the thinking of Extensibility ,Flexibility, Pluggability,So the design pattern take the important roles.
Key words:UML Object-oriented;Design pattern;Bridge;Strategy
1 引言
以前我们大多采用非面向对象的技术进行软件设计,所以当我们转而使用面向对象的方法设计软件时感到非常困难,而设计可复用的面向对象软件就更加困难。因为软件设计既要针对现有的问题,同时又要对将来潜在的问题和需求有足够的通用性,尽可能减少重复设计和更改。设计模式为我们提供了有效的解决思路,使我们可以方便、高效地设计和复用成功的设计和已有的体系结构。
2 设计模式
2.1设计模式的基本概念
从程序设计的角度理解,一个设计模式提供了一个针对某一特定问题的解决方案。在面向对象的程序设计中,一个设计模式有一个特定的结构。使用这样的结构,程序的体系结构更加灵活、代码可以更加方便地被复用,程序具有更好的适应性。
2.2设计模式的基本要素
2.3桥模式
能够分别实现类的抽象和行为的实现,使其相互间没有影响,降低了程序的耦合度能够很方便地扩展类的功能,能够在扩展功能的同时隐藏内部机制,保证透明度。
参与者和协作者:
2.4策略模式
策略模式定义一系列的算法,把这些算法一个个封装起来,使它们可以相互替换,而对用户提供统一的接口。因而,这些算法可以独立于使用它的客户而变化。
参与者和协作者:
3 设计模式在图书管理系统中的应用
3.1问题的产生
首先,要对图书管理系统进行分析,即运用基于UML的面向对象方法,我们知道,系统核心功能必须满足面对各种角色,如老师、博士、研究生、本科生、专科生、其他,提供各种服务,如借书、还书、预定等等。
区分各种角色的目的是由于各种角色的接、还、预定、等功能的不同限制,如借书的期限不同,借书的本数不同等等。
而且,如果管理要提供新的服务功能,或者要加入一种新的角色,还有可能,要改变借书期限和借书本数,我们如果用传统的方法编写的代码那么我们势必会对代码的修改产生一些负面影响。
3.2解决方法
针对以上问题,我们发现各种角色和各种服务正好对应这样一个抽象和行为,于是桥模式就自然而然的浮现出来了。
UML图如下:
如果系统要面向新的借书者,要提供新的服务功能,只需在上图的“桥”的左右两边分别加上Actor 和 imp的继承类即可,这样对与系统的这个影响的波动就会相当的小,十分容易被开发者掌握范围和预测其影响。
同时我们还要清楚的认识到,“桥”模式是提供系统的一个最大范围的一个场景,即是系统领域方面的最大的骨架。
此外,我们还有这样的一个问题需要解决,即当要改变各种借阅者借书期限和借书本数,或者其他的限制条件时我们又该怎么办?
一个办法就是,将这些限制作为各个角色的成员变量,这样就能解决问题。的确可以,但是也许会涉及到可维护性。如果我们用设计模式里的策略模式效果就不同了,因为策略模式对用户提供统一的接口,算法可以独立于使用它的用户,所以改变借书天数和借书本数就不会对使用用户产生影响。
如下UML图:
其中的Strategy1、2、3分别代表不同的借书期限和本数的计算方式,并且还可以计算过期的各种算法。
由此,对于该图书管理系统的总的桥模式和策略模式的综合使用如下UML图:
通过以上的关于图书管理系统整体设计模式的研究我们的系统具有了如下性质:
(1)可扩展性
很容易向系统加入新性能。例如,我们可以十分轻松的添加新的角色—教授,添加新的服务等等(在桥两边加),根本不影响整体构架。
(2)灵活性
允许代码修改平稳地发生,不会波及很多其他模块。
(3)可插入性
可以很容易地将一个类抽出去,同时将另一个有同样接口的类加进来。如实现了上述策略。
4 设计模式对软件设计的指导
设计模式是对学习OO设计原则的具体指导。
优越性:
(1)通过扩展已有的软件系统,可以提供新的行为,满足新需求,使系统有一定适应性和灵活性。
(2)已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使系统有一定的稳定性和延续性。
(3)抽象化是关键。
可以给出一个或多个抽象类或接口,规定出所有具体类必须提供的方法的特征,作为系统设计的抽象层。这个抽象层预见了所有可能的扩展,因此在任何扩展情况下都不会改变,使得系统的抽象层不需修改。(对修改关闭)同时,从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的。
(4)对可变性的封装原则
找到一个系统的可变因素,将它封装起来。这意味着,一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里面;一种可变性不应当与另一种可变性混合在一起(设计模式中所有类图的继承结构一般不会超过两层,否则意味着将两种不同的可变性混合在一起了)。
5 结束语
当我们在进行软件设计的时候,我们要多考虑用一些经典的设计模式来指导自己,这样对于系统的总体稳定性十分有益,只要我们善于观察,总会发现模式和提高自己的设计分析能力,同时我们还要牢记以下三点面向对象的重要原则:
(1)遵从开—闭原则对扩展开放,对修改关闭。
(2)组合优于继承。
(3)面向接口编程。
通过这样,我们一定会使面向对象的设计和分析方法上一个新的台阶。
参考文献:
[1]ErichGamma RichardHelm RalphJohnson john Vlissides设计模式—可复用面向对象软件的基础[M].机械工业出版社,2000.
[2]Alan Shalloway, James R.Trott.设计模式精辟[M].北京:清华大学出版社,2004.
[3]Craig Larman.UML和模式应用——面向对象分析和设计导论[M].机械工业出版社,2002.
[4]王少锋.UML面向对象技术教程[M].北京:清华大学出版社,2004.
注:“本文中所涉及到的图表、公式注解等形式请以PDF格式阅读原文。”
关键词:统一建模语言;面向对象;设计模式;桥模式;策略模式
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)16-30889-01
Application Design Pattern in Library Manage System on UML
LI Cui-ling,SUN Wu-hua
(Faculty of Information Science and Technology,Jiujiang University,Jiujiang 332005,China)
Abstract:Because of the complication of the development about software,the tradition process and normal object-oriented can't satisfy Today's software development and maintain,follow as: Rigidity—It is difficult to addition a new property, Fragility—before modify, we can't expect the interact somewhere, Immobility、Viscosity—when we want use something, we will find that this codes act with some else. Suffer from this we need the thinking of Extensibility ,Flexibility, Pluggability,So the design pattern take the important roles.
Key words:UML Object-oriented;Design pattern;Bridge;Strategy
1 引言
以前我们大多采用非面向对象的技术进行软件设计,所以当我们转而使用面向对象的方法设计软件时感到非常困难,而设计可复用的面向对象软件就更加困难。因为软件设计既要针对现有的问题,同时又要对将来潜在的问题和需求有足够的通用性,尽可能减少重复设计和更改。设计模式为我们提供了有效的解决思路,使我们可以方便、高效地设计和复用成功的设计和已有的体系结构。
2 设计模式
2.1设计模式的基本概念
从程序设计的角度理解,一个设计模式提供了一个针对某一特定问题的解决方案。在面向对象的程序设计中,一个设计模式有一个特定的结构。使用这样的结构,程序的体系结构更加灵活、代码可以更加方便地被复用,程序具有更好的适应性。
2.2设计模式的基本要素
2.3桥模式
能够分别实现类的抽象和行为的实现,使其相互间没有影响,降低了程序的耦合度能够很方便地扩展类的功能,能够在扩展功能的同时隐藏内部机制,保证透明度。
参与者和协作者:
2.4策略模式
策略模式定义一系列的算法,把这些算法一个个封装起来,使它们可以相互替换,而对用户提供统一的接口。因而,这些算法可以独立于使用它的客户而变化。
参与者和协作者:
3 设计模式在图书管理系统中的应用
3.1问题的产生
首先,要对图书管理系统进行分析,即运用基于UML的面向对象方法,我们知道,系统核心功能必须满足面对各种角色,如老师、博士、研究生、本科生、专科生、其他,提供各种服务,如借书、还书、预定等等。
区分各种角色的目的是由于各种角色的接、还、预定、等功能的不同限制,如借书的期限不同,借书的本数不同等等。
而且,如果管理要提供新的服务功能,或者要加入一种新的角色,还有可能,要改变借书期限和借书本数,我们如果用传统的方法编写的代码那么我们势必会对代码的修改产生一些负面影响。
3.2解决方法
针对以上问题,我们发现各种角色和各种服务正好对应这样一个抽象和行为,于是桥模式就自然而然的浮现出来了。
UML图如下:
如果系统要面向新的借书者,要提供新的服务功能,只需在上图的“桥”的左右两边分别加上Actor 和 imp的继承类即可,这样对与系统的这个影响的波动就会相当的小,十分容易被开发者掌握范围和预测其影响。
同时我们还要清楚的认识到,“桥”模式是提供系统的一个最大范围的一个场景,即是系统领域方面的最大的骨架。
此外,我们还有这样的一个问题需要解决,即当要改变各种借阅者借书期限和借书本数,或者其他的限制条件时我们又该怎么办?
一个办法就是,将这些限制作为各个角色的成员变量,这样就能解决问题。的确可以,但是也许会涉及到可维护性。如果我们用设计模式里的策略模式效果就不同了,因为策略模式对用户提供统一的接口,算法可以独立于使用它的用户,所以改变借书天数和借书本数就不会对使用用户产生影响。
如下UML图:
其中的Strategy1、2、3分别代表不同的借书期限和本数的计算方式,并且还可以计算过期的各种算法。
由此,对于该图书管理系统的总的桥模式和策略模式的综合使用如下UML图:
通过以上的关于图书管理系统整体设计模式的研究我们的系统具有了如下性质:
(1)可扩展性
很容易向系统加入新性能。例如,我们可以十分轻松的添加新的角色—教授,添加新的服务等等(在桥两边加),根本不影响整体构架。
(2)灵活性
允许代码修改平稳地发生,不会波及很多其他模块。
(3)可插入性
可以很容易地将一个类抽出去,同时将另一个有同样接口的类加进来。如实现了上述策略。
4 设计模式对软件设计的指导
设计模式是对学习OO设计原则的具体指导。
优越性:
(1)通过扩展已有的软件系统,可以提供新的行为,满足新需求,使系统有一定适应性和灵活性。
(2)已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使系统有一定的稳定性和延续性。
(3)抽象化是关键。
可以给出一个或多个抽象类或接口,规定出所有具体类必须提供的方法的特征,作为系统设计的抽象层。这个抽象层预见了所有可能的扩展,因此在任何扩展情况下都不会改变,使得系统的抽象层不需修改。(对修改关闭)同时,从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的。
(4)对可变性的封装原则
找到一个系统的可变因素,将它封装起来。这意味着,一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里面;一种可变性不应当与另一种可变性混合在一起(设计模式中所有类图的继承结构一般不会超过两层,否则意味着将两种不同的可变性混合在一起了)。
5 结束语
当我们在进行软件设计的时候,我们要多考虑用一些经典的设计模式来指导自己,这样对于系统的总体稳定性十分有益,只要我们善于观察,总会发现模式和提高自己的设计分析能力,同时我们还要牢记以下三点面向对象的重要原则:
(1)遵从开—闭原则对扩展开放,对修改关闭。
(2)组合优于继承。
(3)面向接口编程。
通过这样,我们一定会使面向对象的设计和分析方法上一个新的台阶。
参考文献:
[1]ErichGamma RichardHelm RalphJohnson john Vlissides设计模式—可复用面向对象软件的基础[M].机械工业出版社,2000.
[2]Alan Shalloway, James R.Trott.设计模式精辟[M].北京:清华大学出版社,2004.
[3]Craig Larman.UML和模式应用——面向对象分析和设计导论[M].机械工业出版社,2002.
[4]王少锋.UML面向对象技术教程[M].北京:清华大学出版社,2004.
注:“本文中所涉及到的图表、公式注解等形式请以PDF格式阅读原文。”