第一章 面向对象及软件建模概述

n 1. 软件与软件工程
n 2. 生存周期和开发模型的演变
n 3. 软件开发方法概述
n 4. 模型
n 5. 面向对象的软件建模
n 6. 统一建模语言 UML

1 软件与软件工程

  软件: 程序+文档+数据

  特点:

 1)软件规模大。

 2)软件开发规范并趋于标准化。

 3)软件开发方法多,有大量的软件工具支持。

 4)注重软件开发的管理。

 5)软件维护相对过去容易得多。

§软件工程的指导性原则:

   变动的软件需求。

  稳妥的设计方法。

  高效的软件开发支持技术。

  有效的过程管理。

§软件工程具有里程碑意义的进展:

  结构化软件开发方法的工具。

  计算机辅助软件工程(CASE)。

  面向对象语言和方法成为主流的软件开发技术。

2 生存周期和开发模型的演变

一、软件生命周期

第一章 面向对象及软件建模概述_第1张图片

二、开发模型:

软件开发模型是软件开发全部过程、活动和任务的结构框架。

     软件开发模型能清晰、直观的表达开发全部过程,明确规定了要完成的主要活动、任务和开发策略,可以作为软件项目开发工作的基础。

   (1)瀑布模型 (2)原型模型 (3)OO模型

(1)瀑布模型

第一章 面向对象及软件建模概述_第2张图片

1)瀑布模型——特点

§ 1. 顺序性和依赖性

1)前结束,后开始;

2)前输出,为后输入。

§ 2. 推迟实现的观点

  前阶段的工作必须做扎实,方可以开展后续工作。

§ 3. 质量保证的观点

  1)必须完成规定文档;

  2)必须对完成的文档进行评审,以便尽早发现问题。

1)瀑布模型——使用条件

1)慎重使用瀑布模型的情况:

§ 不能充分理解客户需求或客户需求有可能迅速发生化;
§ 系统太大太复杂,不能一次做完所有的事;
§ 事先拟采用的技术迅速发生变化;
§ 提供的资源有限;
§ 无法利用各开发阶段的某一中间产品。

2)使用瀑布模型的情况:

§ 系统所有的功能、性能要求客户可以一次性准确交付时;
§ 必须是首次开发的新系统并且淘汰全部老系统时。

(2)增量模型

     先完成一个系统子集的开发,再按同样的开发步骤增加功能(系统子集),如此递增下去直至满足全部系统需求。

   系统的总体设计在初始子集设计阶段就应作出设想。

第一章 面向对象及软件建模概述_第3张图片

2)增量模型——使用条件

1)使用渐增模型的情况:

§ 需要在尽短时间内得到系统基本功能的演示或使用
§ 各版本都有中间阶段产品可提供使用;
§ 系统可以被自然地分割成渐增的模式;
§ 开发人员与资金可以逐步增加。

2)慎重考虑使用渐增模型的情况:

§ 不能充分理解客户需求或客户需求有可能迅速发生变化;
§ 事先拟采用的技术迅速发生变化;
§ 客户突然提出一些新的功能需求;
§ 长时期内仅有有限的资源保证(人员和资金)

3)原型模型

      一般用于最终系统的早期用户评价,开发工期短,质量有保证。

第一章 面向对象及软件建模概述_第4张图片

3)原型模型——使用条件

§ 原型模型也是通过系统各个可执行的中间版本以渐增的形式来开发系统的,但是客户需求可以分步逐渐了解,不用在初始时就确定。
§ 在模型中,可以预先定义一部分客户需求,然后在每个后继的中间版本中再逐步增加需求,一点点完善。
§ 在开发每个中间版本时,开发过程中的活动和任务可以顺序地或部分重叠平行地被加入到这些中间版本中。

(4)螺旋模型

第一章 面向对象及软件建模概述_第5张图片

(5)喷泉模型

第一章 面向对象及软件建模概述_第6张图片

3 软件开发方法概述

一、程序设计方法

1.结构化程序设计方法

  其控制结构仅由顺序、选择与重复等有限的基本控制结构表示。

2.模块化程序设计方法

  模块之间的接口应尽可能简明清晰:

    单独模块的修改不影响其它模块的功能;

   模块化应具有可修改性、易读性和可验证性。

3.面向对象程序设计方法

面向过程Vs.面向对象

第一章 面向对象及软件建模概述_第7张图片

二、 结构化软件开发方法

1)结构化分析(SA)的步骤

    构造数据流模型。

   构建控制流模型。

   生成数据字典(DD)。

   生成可选方案,建立需求规约。

2)结构化设计(SD)步骤

首先研究、分析和审查数据流图。从软件的需求

规格说明中弄清数据流加工的过程。

然后根据数据流图决定问题的类型。

由数据流图推导出系统的初始结构图。

优化软件结构。

描述模块接口。

修改和补充数据词典。

制定测试计划。

传统方法学的缺点

       传统的生命周期方法学的本质,是通过需求分析预定义软件需求,然后一个阶段接着一个阶段有条不紊的开发用户所要求的软件,实现预定义的软件需求

        虽然生命周期方法较之传统的软件开发方法更为规范化,对实现软件开发工程化起到了重要的促进作用,部分缓解了软件危机,引起了软件开发原理的一次重大变革。

  但是,对于那些大的复杂的软件系统而言,这种方法仍然显得力不从心

1)瀑布模型的缺点:僵化

      生命周期各阶段间存在严格的顺序性与依赖性,因此其特别强调预先定义需求的重要性。要求预先定义并冻结软件需求。

   实践表明:在系统建立起来很难仅仅依靠分析就能确定一套完整、准确、一致、有效的应用需求,而且该方法不适用与用户需求不断变化的情况:

  (1)某些类型的系统需求是模糊的。

  (2)项目参与者之间存在通讯鸿沟。

  (3)预先定义的需求可能是过时的。

2SA - SD - SP 技术的缺点

     本质上是功能分解,以实现功能的过程为中心,而用户的需求变化主要是针对功能的。这就使基于过程的设计不易被理解;且功能变化往往引起结构变化较大,稳定性不好

          系统有明确的边界定义,且系统结构依赖   

   于系统边界的定义,系统不易扩充和修改

          数据与操作分开处理,可造成软构件对具   

   体应用环境的依赖,可重用性(reusability)较差.

三、 面向对象软件开发方法

1) 面向对象思想的由来

第一章 面向对象及软件建模概述_第8张图片

1) 面向对象思想的由来(续)

  对象    表示现实世界中某个具体的事物。  事物可分为两大部分 :
v 物质 表达具体的事物
v 意识 描述抽象的概念

解决问题方法:(OO--Object-Oriented)

现实问题空间       面向对象解空间

  物质                      对象(客观存在的)

  意识                      类    (抽象的概念)           

2) 对象、实体与类关系图

第一章 面向对象及软件建模概述_第9张图片

3)面向对象方法(OOM)特点

   尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,OOM以数据或信息为主线,把数据和处理结合构成统一体—— 对象。这时程序不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的集合。

第一章 面向对象及软件建模概述_第10张图片

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模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。

第一章 面向对象及软件建模概述_第11张图片

OOM可重用性好

传统方法:通过建立标准函数库来重用软构件。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要。

 OOM:一个class所有的 instances都可重用它的代码;由inheritance派生出的新的class可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。

④ 可维护性好

传统方法:可维护性是最令人头痛的问题。

     OOM:从以下几方面改善了可维护性—

§ 稳定性好:软件功能需求的变化不牵动全局,只需局部修改;
§ 面向对象的软件比较容易修改:只要修改不涉及 class 的对外接口,则内部修改完全不影响外部调用; Inheritance 和多态性( polymorphism) 使其很容易被修改和扩充;
§ 易于测试和调试
§ 面向对象的软件比较容易理解 ;

⑤较易开发大型软件产品

    采用00M,便于一个大型软件产品分解成一系列本质上相互独立的小产品来处理,这就不仅降低了开发的技术难度,而且也使得对开发工作的管理变得容易多了。

    OOM并不一定减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量OOM快速原型法结合使用效果好。

4 模型

(1)建模的意义


第一章 面向对象及软件建模概述_第12张图片

      建模是对现实系统进行适当的过滤,用适当的表现规则描绘出简洁的模型

2)基本概念

n 模型是现实系统的简化,它是抓住现实系统的主要方面而忽略次要方面的一种抽象
n 模型既反映现实系统,又不等同于该现实系统
n 模型是理解、分析、开发或改造现实系统的一种常用手段

作用

n 模型可以促进项目有关人员对系统的理解和交流
n 模型有助于挑选出代价较小的解决方案
n 模型可以缩短系统的开发周期 

3) 建模的原则

1)选择建立什么样的模型对如何发现和解决问题具有重要的影响。

       正确的模型有助于提高开发者的洞察力。

2)每个模型可以有多种表达方式。

    使用者的身份和使用的原因是评判模型好坏的关键。

3)最好的模型总是能够切合实际。

    模型是现实的简化,必须保证简化过程不会掩盖任何重要的细节。

4)孤立的模型是不完整的。

4) 建模三要素

第一章 面向对象及软件建模概述_第13张图片

      首先抽象出系统的不同视图,并用精确的表示法来建立模型,最后在模型转换为实现的过程中逐渐添加进相关细节

5 )通用建模语言

1)自然语言、图形语言、数学语言   

2)结构化建模与面向对象建模

              A、基于功能的分解与基于概念的建模

              B、面向对象的建模语言(50种之多)

                       Rumbaugh :OMT

                       Jacobson   :OOSE

                       Booch         :Booch93

                       Code/Yourdon:OOA/OOD

3)统一建模语言UML

5 面向对象的软件建模

     所谓模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。

     通常,模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。

     更进一步讲,模型是一种思考工具,利用这种工具可以把知识规范地表示出来。

§ OMT(Object Modeling Technique) 方法

      OMT方法是1991年由JamesRumbaugh等5人提出的,经典著作为面向对象的建模与设计

      特点是开发工作起始于对真实世界的对象建模上,然后围绕这这些对象使用这个模型来构造独立于语言的设计。建立三种模型:

   ① 描述系统数据结构的对象模型(object model).

   描述系统控制结构的动态模型(dynamicmodel).

   描述系统功能的功能模型(functionmodel).

§ OOSE 方法

       Jacobson于1994年提出了OOSE方法,其最大特点是面向用例(Use-Case),并在用例的描述中引入了外部角色的概念。用例的概念是精确描述需求的重要武器,但用例贯穿于整个开发过程,包括对系统的测试和验证OOSE比较适合支持商业工程和需求分析

§ Booch 方法

     Booch最先描述了面向对象的软件开发的基础问题,指出了面向对象开发方法是一种完全不同于传统的功能分解的设计方法。面向对象的软件分解方法更接近人对客观事物的理解,而功能分解只能通过问题空间的转换获得。

    Booch方法包括各种模型,涉及软件系统的对象、动态及功能各方面,对类及继承方面的描述特别值得借鉴。

§ OOA/OOD 方法

     1989年CoadYourdon提出的面向对象方法,经典著作(OOA、OOD).该方法比较完整而系统介绍了面向对象的分析和设计

    主要优点是在对象、结构、属性和服务的认定方面,提出了一套系统的原则。该方法完成了从需求角度出发的对象和分类结构的认定工作,面向对象的设计可以在此基础上,从设计的角度进一步类和类层次结构的认定。

存在的危机

 1)面对众多的建模语言,用户由于没有能力区别不同语言之间的差别,因此很难找到一种比较适合其应用特点的语言;

 2)众多的建模语言实际上各有千秋;

 3)虽然不同的建模语言大多类同,但仍存在某些细微差别,极大地妨碍了用户间的交流。

    因此在客观上,极有必要在精心比较不同的建模语言优缺点及总结面向对象技术应用实践的基础上,组织联合设计小组,根据应用需求,取其精华,去其糟粕,统一建模语言。

6 统一建模语言(UML)

UMLUnifiedModeling Language

Unified

n 组合了当前最好的面向对象软件建模方法
n Grady Booch James Rumbaugh IvarJacobson UML 三位主要贡献者。

      1.OMTJamesRumbaugh

      2.TheBoochMethodGradyBooch

  3.OOSEIvarJacobson

UMLUnifiedModeling Language

Modeling

  用于表达现实的简化视图,以便于面向对象软件系统的设计与实现。

Language

  UML主要是遵循精确语法的图形语言。

第一章 面向对象及软件建模概述_第14张图片

小知识:对象管理组织 OMG

OMG(对象管理组织,Object Management Group)成立于1989年,作为一个非营利性组织,集中致力于开发在技术上具有先进性、在商业上具有可行性并且独立于厂商的软件互联规范,推广面向对象模型技术,增强软件的可移植性可重用性和互操作性

            该组织成立之初,成员包括Unisys、Sun、Cannon、Hewlett-Packard、Philips等在业界享有声誉的软硬件厂商,该组织拥有800多家成员。

            CORBA(Common Object Request Broker Architecture, 公共对象请求代理体系结构)是由OMG提出的应用软件体系结构和对象技术规范,其支持异构分布应用程序间的互操作性及独立于平台和编程语言的对象重用。

特点

n 统一了各种方法对不同类型的系统、不同的开发阶段以及不同内部概念的不同观点,消除了各建模语言之间的差异
n 不仅适合于一般系统的开发,对并行、分布式系统的建模尤为适宜
n 一种建模语言,而不是一个开发过程

UML定义了用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、部署图等九种图 

目标

      UML是用于描绘软件蓝图的标准语言,不是可视化的程序设计语言,而是一种可视化的建模语言,其提出的目标是:

 1、易用性:可进行可视化建模,编制说明和建立软件文档。

 2、无关性:UML与具体的实现无关,与具体的过程无关, 可以用于任何语言任何开发过程。

  3、复用性:UML强调在开发中对架构,框架,模式和组件的重用。

  4、可扩展性:UML本身具有扩展机制。

应用领域

   UML的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域。其中最常用的是建立软件系统的模型,但它同样可以用于描述非软件领域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、具有实时要求的工业系统或工业过程等。

    总之,UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模标准建模语言UML适用于以面向对象技术来描述任何类型的系统,而且适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。

第一章 面向对象及软件建模概述_第15张图片
第一章 面向对象及软件建模概述_第16张图片 第一章 面向对象及软件建模概述_第17张图片

小结

n UML 是一种良好定义的、易于表达的且功能强的建模语言
n 吸收了软件工程领域内的新思想、新方法和新技术
n 消除了面向对象技术早期狂热年代中所面临的符号、术语以及语义上的混乱
n 已被对象管理组织采纳为面向对象建模语言的标准
n UML 很适合于以体系结构中心的、用例驱动的、迭代式和渐增式的软件开发过程





你可能感兴趣的:(uml)