1 软件与软件工程
软件: 程序+文档+数据
特点:
(1)软件规模大。
(2)软件开发规范并趋于标准化。
(3)软件开发方法多,有大量的软件工具支持。
(4)注重软件开发的管理。
(5)软件维护相对过去容易得多。
变动的软件需求。
稳妥的设计方法。
高效的软件开发支持技术。
有效的过程管理。
结构化软件开发方法的工具。
计算机辅助软件工程(CASE)。
面向对象语言和方法成为主流的软件开发技术。
一、软件生命周期
二、开发模型:
软件开发模型是软件开发全部过程、活动和任务的结构框架。
软件开发模型能清晰、直观的表达开发全部过程,明确规定了要完成的主要活动、任务和开发策略,可以作为软件项目开发工作的基础。
(1)瀑布模型 (2)原型模型 (3)OO模型
(1)瀑布模型
(1)瀑布模型——特点
1)前结束,后开始;
2)前输出,为后输入。
前阶段的工作必须做扎实,方可以开展后续工作。
1)必须完成规定文档;
2)必须对完成的文档进行评审,以便尽早发现问题。
(1)瀑布模型——使用条件
1)慎重使用瀑布模型的情况:
2)使用瀑布模型的情况:
(2)增量模型
先完成一个系统子集的开发,再按同样的开发步骤增加功能(系统子集),如此递增下去直至满足全部系统需求。
系统的总体设计在初始子集设计阶段就应作出设想。
(2)增量模型——使用条件
1)使用渐增模型的情况:
2)慎重考虑使用渐增模型的情况:
(3)原型模型
一般用于最终系统的早期用户评价,开发工期短,质量有保证。
(3)原型模型——使用条件
(4)螺旋模型
(5)喷泉模型
一、程序设计方法
1.结构化程序设计方法
其控制结构仅由顺序、选择与重复等有限的基本控制结构表示。
2.模块化程序设计方法
模块之间的接口应尽可能简明清晰:
单独模块的修改不影响其它模块的功能;
模块化应具有可修改性、易读性和可验证性。
3.面向对象程序设计方法
面向过程Vs.面向对象
二、 结构化软件开发方法
1)结构化分析(SA)的步骤
构造数据流模型。
构建控制流模型。
生成数据字典(DD)。
生成可选方案,建立需求规约。
2)结构化设计(SD)步骤
首先研究、分析和审查数据流图。从软件的需求
规格说明中弄清数据流加工的过程。
然后根据数据流图决定问题的类型。
由数据流图推导出系统的初始结构图。
优化软件结构。
描述模块接口。
修改和补充数据词典。
制定测试计划。
传统的生命周期方法学的本质,是通过需求分析预定义软件需求,然后一个阶段接着一个阶段有条不紊的开发用户所要求的软件,实现预定义的软件需求。
虽然生命周期方法较之传统的软件开发方法更为规范化,对实现软件开发工程化起到了重要的促进作用,部分缓解了软件危机,引起了软件开发原理的一次重大变革。
但是,对于那些大的复杂的软件系统而言,这种方法仍然显得力不从心。
1)瀑布模型的缺点:僵化
生命周期各阶段间存在严格的顺序性与依赖性,因此其特别强调预先定义需求的重要性。要求预先定义并“冻结”软件需求。
实践表明:在系统建立起来很难仅仅依靠分析就能确定一套完整、准确、一致、有效的应用需求,而且该方法不适用与用户需求不断变化的情况:
(1)某些类型的系统需求是模糊的。
(2)项目参与者之间存在通讯鸿沟。
(3)预先定义的需求可能是过时的。
2)SA - SD - SP 技术的缺点
本质上是功能分解,以实现功能的过程为中心,而用户的需求变化主要是针对功能的。这就使基于过程的设计不易被理解;且功能变化往往引起结构变化较大,稳定性不好。
系统有明确的边界定义,且系统结构依赖
于系统边界的定义,系统不易扩充和修改。
数据与操作分开处理,可造成软构件对具
体应用环境的依赖,可重用性(reusability)较差.
三、 面向对象软件开发方法
1) 面向对象思想的由来
1) 面向对象思想的由来(续)
解决问题方法:(OO--Object-Oriented)
现实问题空间 面向对象解空间
物质 对象(客观存在的)
意识 类 (抽象的概念)
2) 对象、实体与类关系图
3)面向对象方法(OOM)特点
尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,OOM以数据或信息为主线,把数据和处理结合构成统一体—— 对象。这时程序不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的集合。
4)面向对象的定义
面向对象=对象+类+继承+通信
如果一个软件系统是使用这样 4个概念设计和实现的,则我们认为这个软件系统是面向对象的。
一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。
面向对象四要素:
(1)对象(2)类 (3)继承(4)消息
5 )面向对象四要素——对象对象(Object)是面向对象的基本成份。
每个对象可用它本身的一组属性和它可以执行的一组操作来定义。
属性一般只能通过执行对象的操作来改变。
操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。
面向对象四要素——类类(Class)是一组具有相同数据结构和相同操作的对象的集合。
类的定义包括一组数据属性和在数据上的一组合法操作。
类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。
在一个类中,每个对象都是类的实例(Instance),它们都可使用类中提供的函数。
对象的状态则包含在它的实例变量,即实例的属性中。
面向对象四要素——消息消息(Message)是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。
一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。
OOM举例:邮局业务管理
class Post_office //定义类
{ private :
loc_type location ;
emp_type employee ;
……
public :
void send (req_type request, money_type payment);
void sell (int goods, money_type payment) ;
……
} ;
main ( )
{ Post_office My_PO ; //声明类的示例:对象
req_type My_request ;
money_type My_payment ;
……
My_PO.Send ( My_request, My_payment) ; //通讯
……
}
面向对象四要素——继承
继承(Inheritance)是使用已存在的定义做为基础建立新定义的技术。
新类的定义可以是既存类所声明的数据和新类所增加的声明的组合。新类复用既存的定义,而不要求修改既存类。
既存类可当做基类来引用,则新类相应地可当做派生类来引用。
例如,从一个既存的车辆类派生的四轮驱动车类可能不仅是车辆类子集合定义的特殊化,而且还可能在新类的界面中引入新的能力。
面向对象与传统方法比较①OOM与人类习惯的思维方法一致
传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解。
OOM:以object为核心,强调对现实概念的模拟而不强调算法。“面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统”。
¨Class:由特殊到一般的归纳(induction)
¨Inheritance:由一般到特殊的演绎(deduction)
②OOM稳定性好
传统方法:结构依赖于功能,不稳定。
OOM:以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。
③OOM可重用性好
传统方法:通过建立标准函数库来重用软构件。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要。
OOM:一个class所有的 instances都可重用它的代码;由inheritance派生出的新的class可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。
④ 可维护性好
传统方法:可维护性是最令人头痛的问题。
OOM:从以下几方面改善了可维护性—
⑤较易开发大型软件产品
采用00M,便于一个大型软件产品分解成一系列本质上相互独立的小产品来处理,这就不仅降低了开发的技术难度,而且也使得对开发工作的管理变得容易多了。
OOM并不一定减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。OOM与快速原型法结合使用效果好。
建模是对现实系统进行适当的过滤,用适当的表现规则描绘出简洁的模型
(2)基本概念
作用
(3) 建模的原则
1)选择建立什么样的模型对如何发现和解决问题具有重要的影响。
正确的模型有助于提高开发者的洞察力。
2)每个模型可以有多种表达方式。
使用者的身份和使用的原因是评判模型好坏的关键。
3)最好的模型总是能够切合实际。
模型是现实的简化,必须保证简化过程不会掩盖任何重要的细节。
4)孤立的模型是不完整的。
(4) 建模三要素
首先抽象出系统的不同视图,并用精确的表示法来建立模型,最后在模型转换为实现的过程中逐渐添加进相关细节
( 5 )通用建模语言
(1)自然语言、图形语言、数学语言
(2)结构化建模与面向对象建模
A、基于功能的分解与基于概念的建模
B、面向对象的建模语言(50种之多)
Rumbaugh :OMT
Jacobson :OOSE
Booch :Booch93
Code/Yourdon:OOA/OOD
(3)统一建模语言UML
5 面向对象的软件建模
所谓模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。
通常,模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。
更进一步讲,模型是一种思考工具,利用这种工具可以把知识规范地表示出来。
OMT方法是1991年由JamesRumbaugh等5人提出的,经典著作为“面向对象的建模与设计”。
特点是开发工作起始于对真实世界的对象建模上,然后围绕这这些对象使用这个模型来构造独立于语言的设计。建立三种模型:
① 描述系统数据结构的对象模型(object model).
② 描述系统控制结构的动态模型(dynamicmodel).
③ 描述系统功能的功能模型(functionmodel).
Jacobson于1994年提出了OOSE方法,其最大特点是面向用例(Use-Case),并在用例的描述中引入了外部角色的概念。用例的概念是精确描述需求的重要武器,但用例贯穿于整个开发过程,包括对系统的测试和验证。OOSE比较适合支持商业工程和需求分析
Booch最先描述了面向对象的软件开发的基础问题,指出了面向对象开发方法是一种完全不同于传统的功能分解的设计方法。面向对象的软件分解方法更接近人对客观事物的理解,而功能分解只能通过问题空间的转换获得。
Booch方法包括各种模型,涉及软件系统的对象、动态及功能各方面,对类及继承方面的描述特别值得借鉴。
1989年Coad与Yourdon提出的面向对象方法,经典著作(OOA、OOD).该方法比较完整而系统介绍了面向对象的分析和设计。
主要优点是在对象、结构、属性和服务的认定方面,提出了一套系统的原则。该方法完成了从需求角度出发的对象和分类结构的认定工作,面向对象的设计可以在此基础上,从设计的角度进一步类和类层次结构的认定。
【存在的危机】:
1)面对众多的建模语言,用户由于没有能力区别不同语言之间的差别,因此很难找到一种比较适合其应用特点的语言;
2)众多的建模语言实际上各有千秋;
3)虽然不同的建模语言大多类同,但仍存在某些细微差别,极大地妨碍了用户间的交流。
因此在客观上,极有必要在精心比较不同的建模语言优缺点及总结面向对象技术应用实践的基础上,组织联合设计小组,根据应用需求,取其精华,去其糟粕,统一建模语言。
6 统一建模语言(UML)
UML-UnifiedModeling Language
Unified:
1.OMT(JamesRumbaugh)
2.TheBoochMethod(GradyBooch)
3.OOSE(IvarJacobson )
UML-UnifiedModeling Language
Modeling:
用于表达现实的简化视图,以便于面向对象软件系统的设计与实现。
Language:
UML主要是遵循精确语法的图形语言。
小知识:对象管理组织 OMG
OMG(对象管理组织,Object Management Group)成立于1989年,作为一个非营利性组织,集中致力于开发在技术上具有先进性、在商业上具有可行性并且独立于厂商的软件互联规范,推广面向对象模型技术,增强软件的可移植性、可重用性和互操作性。
该组织成立之初,成员包括Unisys、Sun、Cannon、Hewlett-Packard、Philips等在业界享有声誉的软硬件厂商,该组织拥有800多家成员。
CORBA(Common Object Request Broker Architecture, 公共对象请求代理体系结构)是由OMG提出的应用软件体系结构和对象技术规范,其支持异构分布应用程序间的互操作性及独立于平台和编程语言的对象重用。
特点
UML定义了用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、部署图等九种图
目标
UML是用于描绘软件蓝图的标准语言,不是可视化的程序设计语言,而是一种可视化的建模语言,其提出的目标是:
1、易用性:可进行可视化建模,编制说明和建立软件文档。
2、无关性:UML与具体的实现无关,与具体的过程无关, 可以用于任何语言任何开发过程。
3、复用性:UML强调在开发中对架构,框架,模式和组件的重用。
4、可扩展性:UML本身具有扩展机制。
应用领域
UML的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域。其中最常用的是建立软件系统的模型,但它同样可以用于描述非软件领域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、具有实时要求的工业系统或工业过程等。
总之,UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模。标准建模语言UML适用于以面向对象技术来描述任何类型的系统,而且适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。