论文部分内容阅读
摘要:文章通过对结构化方法和面向对象两种软件开发方法的论述,在进行比较分析其优缺点基础上,讨论了它们不同的适合场合。通过一个实例提出在开发过程中应根据开发实际,采用结构化和面向对象相结合的方法。
关键词:软件开发;结构化方法;面向对象方法;问题域
中图分类号:TP311.11文献标识码:A 文章编号:1009-3044(2007)04-11057-01
1 引言
在软件业,有关结构化方法和面向对象方法的优劣之争,自面向对象方法出现后没有平息过。其实,通过分析比较这两种软件开发方法,和联系当前实际,就能发现两者各自的优缺点。我们可以根据开发实际出发,采用结构化方法和面向对象方法适当相结合的方法,能够得到最佳的开发效益。
2 结构化方法的概述
结构化方法产生于上世纪70年代中后期,它是一种强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法。结构是指系统要素之间的相互联系、相互作用的框架。结构化开发方法提出了一组提高软件结构合理性的准则,如分解与抽象、模块独立性、信息隐蔽等。针对软件生存周期各个不同的阶段,它有结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)等方法。
结构化方法强调过程抽象和功能模块化。 将世界问题域映射为数据流和加工,加工之间通过数据流来通信,数据流作为被动的实体被主动的操作所加工,以过程(操作)抽象为中心来构造系统和设计程序。结构化分析产生功能规约。它一般利用图形表达用户需求,使用的手段主要有数据流图、数据字典、结构化语言、判定表以及判定树等。
结构化设计阶段用结构化程序设计语言实现分析阶段标示出来用户需求。结构化分析与设计的本质是功能分解,围绕实现处理功能的过程来构造系统。
结构化方法的基本思想是:基于功能分解设计系统结构,从内部功能上模拟客观世界结构化方法基于功能分解设计系统结构,它从内部功能上模拟客观世界所采用的工具,主要是数据流图DFD,通过不断将DFD中复杂的处理分解成子数据流图来简化问题。
3 面向对象方法的概述
面向对象方法兴起于上世纪80年,是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。对象是由数据和允许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统,它主要分为三个阶段:
面向对象分析阶段。这个阶段从陈述问题开始,再分析和构造的世界问题域的模型,并用相应的符号系统表示。
面向对象设计阶段。这个阶段对的系统分析的结果进行深入和改进;设计交互过程和用户接口,设计任务管理,设计全局资源,设计对象。
面向对象实现阶段。使用面向对象语言,运用抽象、继承、封装等编程技术实现对象。
面向对象方法首先强调来自域的对象,然后围绕对象设置属性和操作。它尽可能模拟人类习惯的思维方式。把问题域的概念直接映射到对象和对象之间的接口,符合人们的常用的思维方式,减少结构化方法的从问题域到分析阶段的映射误差。面向对象方法鼓励开发者使用“对象”的观念去看待问题。
面向对象的方法基本思想是:对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的,可重用的,维护性好的软件,同时限定软件的复杂性和降低开发维护费用。
4 面向对象方法与结构化方法的比较
面向对象方法与结构化方法的比较如表1
从上表可以看到,结构化方法和面向对象方法各有自己的优缺点,主要表现在如下几个方面:
(1)从执行效率来说。结构化方法比面向对象方法,产生的可执行代码更直接,更高。所以对于一些嵌入式的系统,结构化方法产生的系统更小,运行效率更高;
(2)从重用性方面来说。采用结构化方法的系统难以修改和扩充。结构化分析与设计清楚定义了系统的接口,当系统对外界接口发生变动时,往往造成系统结构较大变动,难以扩充新的功能接口。采用结构化方法的系统可复用性较差。结构化方法将数据和操作分离,导致一些可重用的软件构件在特定具体应用环境才能应用,降低了软件的可重用性。面向对象方法具有很好的重用性。在遇到类似的问题,通过应用了抽象 继承等技术,来重用代码;
(3)从程序语言编译器来说。面向对象方法,通过编译器实现代码的面向对象性。也就使说经过编译器后,代码会被翻译为相对应的结构化代码。所以要熟练开发,还要懂一定的结构化方法做为基础;
(4)从掌握难度来说,面向对象方法比结构化对象方法复杂,难于理解。面象对象方法的内容广,概念多,而且很多都是难于理解,做到精通更加不易。应用面向对象方法,常常需要一种支持的分析,设计方法,如RUP方法,敏捷方法等。这些知识抽象枯燥,难于掌握。面象对象方法要经过长期的开发实践才能很好的理解,掌握。相比之下,结构化方法知识内容少,容易上手;
(5)从应用的范围看,结构化方法适用于数据少而操作多的问题。实践证明对于象操作系统这样的以功能为主的系统,结构化方法比较适应它。面向对象方法正好相反,对于数据库,信息管理等以数据为主的而操作较少的系统,用面向对象方法描述要好于结构化方法。
5 二者的可结合性
从上面的论述可以看到,面向过程的结构化方法更接近于计算机世界的物理实现;而面向对象更符合人类的认识习惯。相对传统的结构化方法来说,面向对象的方法具有更多的优势,但任何语言设计方法都不是十全十美的,结构化程序设计方法经过了30多年的发展和积累,已经有了一整套的工具和成熟的方法学,在发展其他软件方法的同时绝对不能全盘抛弃它。
在应用程序开发过程中,应将二者结合,采用一种综合的程序设计方法,即在分析和设计阶段采用结构化(SA)分析和结构化设计(SD),生成软件的结构图,然后通过转换获得面向对象(OOD)编码所需要的控件,再使用面向对象编码完成程序的设计,使用SA、SD节省分析的时间,减少错误,使用OOD又使程序设计交互性强,适应性好,取得了双赢的效果。
下面用一个简单的实例来进行论述上述方法:
项目:加法器
为简单起见,该应用程序只完成输入任何两个数字实现求和的功能,用结构化的SA,SD得出软件的结构图形,如图1。
(1)在结构图中,输入模块输入两个数据,就对应2个文本框,输入得数据作为文本框得TEXT属性值;
(2)加法和等号的模块对应2个命令按钮,各模块的算法就是对应命令按钮的CLICK事件的算法;
(3)输出模块输出一个数据,就对应1个标签,输出的数据作为标签的CAPTION属性值;
(4)结构图中最上层控制模块对应一个窗体,该窗体将上面2个文本框,2个命令按钮,1个标签容纳在其中。
图1 软件的结构图
经过上述分析后,已获得编码时所需的全部控件,余下的工作只是把算法该为程序。在VB.NET里很容易实现上述功能的编码:
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
TextBox3.Text = Str(Val(TextBox1.Text) + Val(TextBox2.Text))
End Sub
End Class
6 结束语
综上所述,开发者在开发实践中,从实际出发,考虑执行效率,开发者的技术水平,系统规模,是否为易需求变化的系统等因素,尽量利用它们各自的优点,避免他们的缺点。如对于开发一些小型嵌入式实时监控系统或同等稳定小系统,可用结构化方法,对于开发入门者,使用用结构化方法和面向对象方法相结合。对与大型系统或者需求易变系统,使用面向对象方法。总之,根据实际出发,选取合适的软件开发方法,达到最佳的开发效益。
参考文献:
[1]李光志,等.对象分析与设计方法比较[M]. 北京:电子工业出版社,1996.
[2]柴跃廷,等.应用软件系统开发[M].北京:清华大学出版社,1999.
[3]张海藩.软件工程[M].北京: 清华大学出版社,1999.
[4]刘作伟,宁洪.现代软件开发方法中的use case技术[J].计算机科学,1999,26(4):70-74.
[5]赵池龙.实用软件工程[M]. 北京:电子工业出版社,2003.
[6]孙晋文,李明树.软件开发:从面向对象到Agent技术[J].计算机与现代化,2000,(3):30-32.
[7]王建仁.计算机软件与开发技术[M].西安: 西安交通大学出版社,1996.
[8]邵维忠,杨芙清.面向对象的系统设计[M].北京: 清华大学出版社,2003.
[9]邵维忠,杨芙清.面向对象的系统分析[M].北京: 清华大学出版社,2003.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:软件开发;结构化方法;面向对象方法;问题域
中图分类号:TP311.11文献标识码:A 文章编号:1009-3044(2007)04-11057-01
1 引言
在软件业,有关结构化方法和面向对象方法的优劣之争,自面向对象方法出现后没有平息过。其实,通过分析比较这两种软件开发方法,和联系当前实际,就能发现两者各自的优缺点。我们可以根据开发实际出发,采用结构化方法和面向对象方法适当相结合的方法,能够得到最佳的开发效益。
2 结构化方法的概述
结构化方法产生于上世纪70年代中后期,它是一种强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法。结构是指系统要素之间的相互联系、相互作用的框架。结构化开发方法提出了一组提高软件结构合理性的准则,如分解与抽象、模块独立性、信息隐蔽等。针对软件生存周期各个不同的阶段,它有结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)等方法。
结构化方法强调过程抽象和功能模块化。 将世界问题域映射为数据流和加工,加工之间通过数据流来通信,数据流作为被动的实体被主动的操作所加工,以过程(操作)抽象为中心来构造系统和设计程序。结构化分析产生功能规约。它一般利用图形表达用户需求,使用的手段主要有数据流图、数据字典、结构化语言、判定表以及判定树等。
结构化设计阶段用结构化程序设计语言实现分析阶段标示出来用户需求。结构化分析与设计的本质是功能分解,围绕实现处理功能的过程来构造系统。
结构化方法的基本思想是:基于功能分解设计系统结构,从内部功能上模拟客观世界结构化方法基于功能分解设计系统结构,它从内部功能上模拟客观世界所采用的工具,主要是数据流图DFD,通过不断将DFD中复杂的处理分解成子数据流图来简化问题。
3 面向对象方法的概述
面向对象方法兴起于上世纪80年,是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。对象是由数据和允许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统,它主要分为三个阶段:
面向对象分析阶段。这个阶段从陈述问题开始,再分析和构造的世界问题域的模型,并用相应的符号系统表示。
面向对象设计阶段。这个阶段对的系统分析的结果进行深入和改进;设计交互过程和用户接口,设计任务管理,设计全局资源,设计对象。
面向对象实现阶段。使用面向对象语言,运用抽象、继承、封装等编程技术实现对象。
面向对象方法首先强调来自域的对象,然后围绕对象设置属性和操作。它尽可能模拟人类习惯的思维方式。把问题域的概念直接映射到对象和对象之间的接口,符合人们的常用的思维方式,减少结构化方法的从问题域到分析阶段的映射误差。面向对象方法鼓励开发者使用“对象”的观念去看待问题。
面向对象的方法基本思想是:对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的,可重用的,维护性好的软件,同时限定软件的复杂性和降低开发维护费用。
4 面向对象方法与结构化方法的比较
面向对象方法与结构化方法的比较如表1
从上表可以看到,结构化方法和面向对象方法各有自己的优缺点,主要表现在如下几个方面:
(1)从执行效率来说。结构化方法比面向对象方法,产生的可执行代码更直接,更高。所以对于一些嵌入式的系统,结构化方法产生的系统更小,运行效率更高;
(2)从重用性方面来说。采用结构化方法的系统难以修改和扩充。结构化分析与设计清楚定义了系统的接口,当系统对外界接口发生变动时,往往造成系统结构较大变动,难以扩充新的功能接口。采用结构化方法的系统可复用性较差。结构化方法将数据和操作分离,导致一些可重用的软件构件在特定具体应用环境才能应用,降低了软件的可重用性。面向对象方法具有很好的重用性。在遇到类似的问题,通过应用了抽象 继承等技术,来重用代码;
(3)从程序语言编译器来说。面向对象方法,通过编译器实现代码的面向对象性。也就使说经过编译器后,代码会被翻译为相对应的结构化代码。所以要熟练开发,还要懂一定的结构化方法做为基础;
(4)从掌握难度来说,面向对象方法比结构化对象方法复杂,难于理解。面象对象方法的内容广,概念多,而且很多都是难于理解,做到精通更加不易。应用面向对象方法,常常需要一种支持的分析,设计方法,如RUP方法,敏捷方法等。这些知识抽象枯燥,难于掌握。面象对象方法要经过长期的开发实践才能很好的理解,掌握。相比之下,结构化方法知识内容少,容易上手;
(5)从应用的范围看,结构化方法适用于数据少而操作多的问题。实践证明对于象操作系统这样的以功能为主的系统,结构化方法比较适应它。面向对象方法正好相反,对于数据库,信息管理等以数据为主的而操作较少的系统,用面向对象方法描述要好于结构化方法。
5 二者的可结合性
从上面的论述可以看到,面向过程的结构化方法更接近于计算机世界的物理实现;而面向对象更符合人类的认识习惯。相对传统的结构化方法来说,面向对象的方法具有更多的优势,但任何语言设计方法都不是十全十美的,结构化程序设计方法经过了30多年的发展和积累,已经有了一整套的工具和成熟的方法学,在发展其他软件方法的同时绝对不能全盘抛弃它。
在应用程序开发过程中,应将二者结合,采用一种综合的程序设计方法,即在分析和设计阶段采用结构化(SA)分析和结构化设计(SD),生成软件的结构图,然后通过转换获得面向对象(OOD)编码所需要的控件,再使用面向对象编码完成程序的设计,使用SA、SD节省分析的时间,减少错误,使用OOD又使程序设计交互性强,适应性好,取得了双赢的效果。
下面用一个简单的实例来进行论述上述方法:
项目:加法器
为简单起见,该应用程序只完成输入任何两个数字实现求和的功能,用结构化的SA,SD得出软件的结构图形,如图1。
(1)在结构图中,输入模块输入两个数据,就对应2个文本框,输入得数据作为文本框得TEXT属性值;
(2)加法和等号的模块对应2个命令按钮,各模块的算法就是对应命令按钮的CLICK事件的算法;
(3)输出模块输出一个数据,就对应1个标签,输出的数据作为标签的CAPTION属性值;
(4)结构图中最上层控制模块对应一个窗体,该窗体将上面2个文本框,2个命令按钮,1个标签容纳在其中。
图1 软件的结构图
经过上述分析后,已获得编码时所需的全部控件,余下的工作只是把算法该为程序。在VB.NET里很容易实现上述功能的编码:
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
TextBox3.Text = Str(Val(TextBox1.Text) + Val(TextBox2.Text))
End Sub
End Class
6 结束语
综上所述,开发者在开发实践中,从实际出发,考虑执行效率,开发者的技术水平,系统规模,是否为易需求变化的系统等因素,尽量利用它们各自的优点,避免他们的缺点。如对于开发一些小型嵌入式实时监控系统或同等稳定小系统,可用结构化方法,对于开发入门者,使用用结构化方法和面向对象方法相结合。对与大型系统或者需求易变系统,使用面向对象方法。总之,根据实际出发,选取合适的软件开发方法,达到最佳的开发效益。
参考文献:
[1]李光志,等.对象分析与设计方法比较[M]. 北京:电子工业出版社,1996.
[2]柴跃廷,等.应用软件系统开发[M].北京:清华大学出版社,1999.
[3]张海藩.软件工程[M].北京: 清华大学出版社,1999.
[4]刘作伟,宁洪.现代软件开发方法中的use case技术[J].计算机科学,1999,26(4):70-74.
[5]赵池龙.实用软件工程[M]. 北京:电子工业出版社,2003.
[6]孙晋文,李明树.软件开发:从面向对象到Agent技术[J].计算机与现代化,2000,(3):30-32.
[7]王建仁.计算机软件与开发技术[M].西安: 西安交通大学出版社,1996.
[8]邵维忠,杨芙清.面向对象的系统设计[M].北京: 清华大学出版社,2003.
[9]邵维忠,杨芙清.面向对象的系统分析[M].北京: 清华大学出版社,2003.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。