面向对象的软件工程.PPT

上传人:天*** 文档编号:370634 上传时间:2018-09-28 格式:PPT 页数:65 大小:414KB
下载 相关 举报
面向对象的软件工程.PPT_第1页
第1页 / 共65页
面向对象的软件工程.PPT_第2页
第2页 / 共65页
面向对象的软件工程.PPT_第3页
第3页 / 共65页
面向对象的软件工程.PPT_第4页
第4页 / 共65页
面向对象的软件工程.PPT_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、第二部分面向对象的软件工程,第七章 面向对象方法学引论 第八章 面向对象分析 第九章 面向对象设计第十章 面向对象的实现,71 传统方法学的缺点72 快速原型法简介73 面向对象方法学概述74 面向对象的基本概念75 面向对象建模76 对象模型77 动态模型78 功能模型79 本章重点,71 传统方法学的缺点,传统的生命周期方法学的本质,是通过需求分析预定义软件需求,然后一个阶段接着一个阶段有条不紊的开发用户所要求的软件,实现预定义的软件需求。虽然生命周期方法较之传统的软件开发方法更为规范化,对实现软件开发工程化起到了重要的促进作用,部分缓解了软件危机,引起了软件开发原理的一次重大变革。但是,

2、对于那些大的复杂的软件系统而言,这种方法仍然显得力不从心。,一、瀑布模型的缺点:僵化,生命周期各阶段间存在严格的顺序性与依赖性,因此其特别强调预先定义需求的重要性。要求预先定义并“冻结”软件需求。实践表明:在系统建立起来很难仅仅依靠分析就能确定一套完整、准确、一致、有效的应用需求,而且该方法不适用与用户需求不断变化的情况:(1)某些类型的系统需求是模糊的。(2)项目参与者之间存在通讯鸿沟。(3)预先定义的需求可能是过时的。,二、SA - SD - SP 技术的缺点,本质上是功能分解,以实现功能的过程为中心,而用户的需求变化主要是针对功能的。这就使基于过程的设计不易被理解;且功能变化往往引起结构

3、变化较大,稳定性不好。系统有明确的边界定义,且系统结构依赖于系统边界的定义,系统不易扩充和修改。数据与操作分开处理,可造成软构件对具体应用环境的依赖,可重用性(reusability)较差.,72 快速原型法简介,快速原型法适用于用户需求模糊或随时间变化的系统。以原型(软件产品的样品)为共同语言,实现用户与开发者双向沟通,来解决用户与开发者之间的鸿沟。原型是一个可实地运行的模型,有正式产品的主要特征,但不是全部特征。软件原型是软件系统的最初版本,以最少的费用,最短的时间开发出的、以反映最后软件的主要特征的系统。,一、原型模型(快速成型模型),建造/修改 原型,用户测试运行原型,听取用 户意见,

4、原型范型,二、原型的特性,是一个可实际工作的系统; 没有固定的生存期,结局可能是用后立即被抛弃,或可能成为最终系统; 可服务于不同的目的, 从需求分析到最终产品都可做原型; 建立必须快,便宜; 是包含修改、评价在内的完整重复过程。 原型指“快速软件原型”,三、原型化开发的应用领域,需求分析和定义规格说明; 作为软件设计的一种工具; 作为一种解决不确定性的工具 作为一种实验工具 系统开发同时,作为同步培训工具 作为开发方法,利用原型演化为最终系统 作为软件维护的辅助工具,四、原型开发的分类,原型化随建立原型目的不同分为: (1)抛弃式原型开发:辅助于瀑布模型,建立目标是评价目标系统的某个(些)特

5、性,以便准确了解需求,或严格验证方案。特点用完就抛弃,然后重新建立正式的目标系统。 (2)演化式原型开发:采用高度迭代的动态方法,每次都要再次确定需求、分析设计、开发测试、,多次迭代直到用户满意为止。特点是系统的初始版本很早交付用户试用,而且开发的成败取决于需要双方的耐心。,四、原型开发的分类(续),(3)递增式原型开发:融合了瀑布模型与原型迭代的特征。特点是采用随日程时间的进展而交错的线性序列,每一个线性序列产生一个可发布“增量”。如使用此方法开发一个字处理软件,线性序列安排如下: S1:发布基本的文件管理、编辑和文档生成功能; S2:增量实现完善的编辑和文档生成功能; S3:增量实现拼写和

6、语法检查功能; S4:增量完成高级的页面布局功能。,五、原型开发的优点,保证产品有较好的可维护性改善用户与开发人员的信息交流和思想沟通,给用户修改的机会减少或消灭下游返工的可能,改进了瀑布模型的弊病原型系统可作为培训环境,有利于用户培训和开发同步。开发成本降低,周期缩短。,73 面向对象方法学概述,一、传统的软件开发方法的缺点:特点是把软件视为处理流,并定义成由一系列步骤构成的算法。每一步骤都是带有预定输入和特定输出的一个过程,把这些步骤串联在一起可产生合理的稳定的贯通于整个程序的控制流,最终产生一个简单的具有静态结构的体系结构。过程性开发模式侧重建立构成问题解决的处理流。数据抽象、数据结构根

7、据算法步骤的要求开发,它贯穿于过程,提供过程所要求操作的信息。系统的状态是一组全局变量,这组全局变量保存状态的值,把它们从一个过程传送到另一个过程。,二、面向对象思想的由来,传统的软件开发方法 没有直接而全面地反映问题的本质 直接面对问题域中客观存在的事物来进行软件开发 面向对象,希望,二、面向对象思想的由来(续),对象 表示现实世界中某个具体的事物。 事物可分为两大部分 :物质 : 表达具体的事物意识 : 描述抽象的概念,三、对象、实体与类关系图,对象,实体,类,抽象数据类,计算机世界,现实世界,计算机逻辑的实现,影射,抽象,实例化,抽象,四、面向对象方法(OOM)特点,尽可能模拟人类习惯的

8、思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,OOM以数据或信息为主线,把数据和处理结合构成统一体 对象。这时程序不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的集合。,OOM举例:邮局业务管理,杭 州,北 京,Message,Send by method,对象Object,Object,= 数据Attribute,Attributes: location; employee; ,+ 操作Method,Methods: send; sell; ,注意:Object内部的attributes不允许外部用户直接改动,只有当它提供了相应的服务method时,用户才能

9、通过发送message来提请它执行。,我想把邮局搬到我家门口,多加几个邮递员,24小时都开门,对不起,本邮局不提供此类服务,唉,那就先送束花吧 Post_office.Send (request, payment),五、面向对象的定义,面向对象=对象+类+继承+通信,如果一个软件系统是使用这样 4 个概念设计和实现的,则我们认为这个软件系统是面向对象的。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。面向对象四要素:(1)对象 (2)类 (3)继承 (4)消息,六、面向对象四要素对象,对象(Object)是面向对象的基本成份。每个对象可用它本身的一组属性

10、和它可以执行的一组操作来定义。属性一般只能通过执行对象的操作来改变。操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。,六、面向对象四要素类,类(Class)是一组具有相同数据结构和相同操作的对象的集合。类的定义包括一组数据属性和在数据上的一组合法操作。类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。在一个类中,每个对象都是类的实例 (Instance),它们都可使用类中提供的函数。对象的状态则包含在它的实例变量,即实例的属性中。,六、面向对象四要素消息,消息(Message)是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的

11、某个操作的规格说明。发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。,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 ;

12、/声明类的示例:对象 req_type My_request ; money_type My_payment ; My_PO.Send ( My_request, My_payment) ; /通讯 ,OOM举例:邮局业务管理,六、面向对象四要素继承,继承(Inheritance)是使用已存在的定义做为基础建立新定义的技术。新类的定义可以是既存类所声明的数据和新类所增加的声明的组合。新类复用既存的定义,而不要求修改既存类。既存类可当做基类来引用,则新类相应地可当做派生类来引用。例如,从一个既存的车辆类派生的四轮驱动车类可能不仅是车辆类子集合定义的特殊化,而且还可能在新类的界面中引入新的能力。,

13、七、面向对象与传统方法比较, 传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解。OOM:以object 为核心,强调对现实概念的模拟而不强调算法。“面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统”。 Class:由特殊到一般的归纳(induction) Inheritance:由一般到特殊的演绎(deduction),七、面向对象与传统方法比较(续), 传统方法:结构依赖于功能,不稳定。OOM:以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。,传统方法:通过建立标准函数

14、库来重用软构件。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要。OOM:一个class所有的 instances 都可重用它的代码;由 inheritance 派生出的新的class 可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。,七、面向对象与传统方法比较(续),稳定性好:软件功能需求的变化不牵动全局,只需局部修改;Class 独立性强:只要修改不涉及class的对外接口,则内部修改完全不影响外部调用;Inheritance和多态性(polymorphism)使其很容易被修改和扩充;容易理解;, 传统方法:可维护性是最令人头痛的问题。 OOM:从以下几方面改善了可维护

15、性 ,七、面向对象与传统方法比较(续),OOM并不是减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。OOM与快速原型法结合使用效果好。,八、三种开发模型的适用范围,瀑布模型 Waterfall: 需求稳定少变化 对环境较熟悉(低风险) 用户很少参与开发 面向过程编程, 螺旋模型Spiral : 需求可能在开发早期有变化 对环境较熟悉(中风险) 用户不同程度地参与整个过程 OOP,八、三种开发模型的适用范围(续), 增量模型Incremental: 需求随时可能变化 对环境不熟悉(高风险) 用户完全参与开发 OOP,SA - SD - SP

16、 与Waterfall model 有本质上的密切联系;OOP由可用于任何模型。OOM的工作重点在分析阶段,确定objects,此外,生命周期的各阶段可以“无缝”连接。,74 面向对象的基本概念,f1,f2,f3,fi,fn,fi(X),S,gi(X,S),S,输出,输出,1、对象Object : = ID + Method + Attribute + Message,对象的基本特点, 以数据为中心,不设与数据无关的操作; Object主动处理而不 被动地等待被处理,外部只能通过message请求操作; 具有黑盒性:外部操作时,无须知道该object内部的数据结构及算法; 具有并行性:不同ob

17、ject各自独立地处理自身数据,彼此间仅通过传递message完成通信; 模块独立性好:内聚强()、耦合松( ),2、类Class:具有相同数据和相同操作的一组对象;3、实例Instance:某个class描述的具体对象;4、消息Message: = object_ID. method_ID (parameter(s);5、方法Method: object能做的操作,亦称为service 、responsibility, 在 class 中须定义相应的代码;6、属性Attribute :object 的固有数据;7、继承Inheritance:子类自动共享父类attributes 和metho

18、ds ,而不必重复定义。,面向对象的基本概念(续),面向对象的基本概念(续),例:,继承的特点:低层性质覆盖高层性质:若杭州人的 methods中有与中国人的同名,则李士执行该 method 时以杭州人为准,不执行中国人中定义的同名 method。, 传递性(transitivity):AB、BC AC 一个 class 继承了上层全部 classes 的一切性质。, 一个子类只 有 一 个父类称为单 继 承 (single inheritance), 一个子类可有多个父类称为多重继承(multiple inheritance). 例, 修改与扩充可以很容易地通过派生子类来完成。,注意:mul

19、tiple inheritance 在定义中应避免二义性(ambiguity),即二个父类中定义重名,但各具不同性质。,例:,CardDeck,GraphicalObject,GraphicalDeck,Method:Draw := take a card from a deck,Method:Draw := displaya graphical object,Method:Draw := ?,例:,面向对象的基本概念(续),8、多态性(Polymorphism):不同层次的 classes 可共享一个method名,但按各自的方式来实现这种method。,C+ 中定义了虚函数(virtual

20、 function)来实现这一功能。即一个method有多个版本,运行时才决定执行哪一个。故亦称为动态联编(dynamic binding)或滞后联编(late binding),面向对象的基本概念(续),double avg (const double a , int size) ; double sum = 0.0 ; for ( int i = 0; i size; +i ) sum += ai ; return ( sum / size ) ; double avg (const int a , int size) ; int sum = 0 ; for ( int i = 0; i

21、size; +i ) sum += ai ; return ( (double) sum / size ) ; main() int k3 = 1, 2, 3 ; double x3 = 1.1, 2.2, 3.3 ; cout avg(k, 3) “ int averagen” ; cout avg(x, 3) “double averagen”;,9、重载Overloading, 函数重载 :不同函数共用一个名字,而调用参数的特征不同。例:,面向对象的基本概念(续), 运算符重载Operator overloading : 同一运算符 (operator)作用于不同类型的操作数 (oper

22、and) 上面。,在编译(compile)阶段就决定了使用类型及执行代码,故意亦称为静态联编 (static binding)或先前联编 (early binding) 。,75 面向对象建模,面向对象的开发方法Booch方法Booch最先描述了面向对象的软件开发的基础问题,指出了面向对象开发方法是一种完全不同于传统的功能分解的设计方法。面向对象的软件分解方法更接近人对客观事物的理解,而功能分解只能通过问题空间的转换获得。Booch方法包括各种模型,涉及软件系统的对象、动态及功能各方面,对类及继承方面的描述特别值得借鉴。,面向对象的开发方法(续),Coad方法1989年Coad与Yourdon

23、提出的面向对象方法,经典著作(OOA、OOD).该方法比较完整而系统介绍了面向对象的分析和设计。主要优点是在对象、结构、属性和服务的认定方面,提出了一套系统的原则。该方法完成了从需求角度出发的对象和分类结构的认定工作,面向对象的设计可以在此基础上,从设计的角度进一步类和类层次结构的认定。,面向对象的开发方法(续),OMT (Object Modeling Technique)方法OMT方法是1991年由James Rumbaugh等5人提出的,经典著作为“面向对象的建模与设计”。特点是开发工作起始于对真实世界的对象建模上,然后围绕这这些对象使用这个模型来构造独立于语言的设计。建立三种模型: 描

24、述系统数据结构的对象模型(object model). 描述系统控制结构的动态模型(dynamic model). 描述系统功能的功能模型(function model).,76 对象模型(Object Model),对象模型是对模拟客观世界实体的对象以及对象之间关系的映射,描述了系统的静态结构。对象模型是三个模型中最关键的一个模型,它的作用是描述系统的静态结构,包括构成系统的类和对象,它们的属性和操作,及它们之间的关系。在建立对象模型时,需要定义一组图形符号,并且规定一组组织这些符号以表示特定语义的规则。此处给出Coad与Yourdon的表示方法。,一、表示类&对象的图形符号,表示属于该类的

25、对象,结构表示问题域中的复杂关系,是客观世界实体间关系的抽象。 类及对象间的关系可概括为:归纳关系(一般/特殊结构、分类结构) 针对事物类之间的组织关系组合关系(整体/部分结构、组装结构) 表示事物的整体与部分之间的组合关系关联关系 表示对象间相互依赖、相互作用关系,二、表示结构的图形符号,一般类,特殊类,特殊类,.,子类的公共属性和操作归属于一般类并被每一个子类共享,每一个子类都继承了一般类的特征。,一般类(父类、基类、超类),特殊类(子类),继承,(1)一般/特殊结构表示法,存户,一般/特殊结构举例,一般类(父类、基类、超类),特殊类(子类),继承,一个特殊类中的所有对象可继承一般类中的属

26、性、服务、关系,账号姓名余额,存款取款,支票存户,储蓄存户,利息率,一个整体对象可有不同类型的部分对象.一个部分对象也可同时属于多个整体对象.,(2)整体/部分结构表示法,飞机,发动机,飞机整体对象,可能 没有发动机 最多有四台发动机,用以实现聚合、组合、划分,发动机部分对象,0, 4,整体/部分结构(分类结构),整体/部分结构是一种特定的连接. 整体类中的一个对象(或称聚合)是由各部分类的对象(或称成分)构成的.这一结构是对象间的一种关系.,微机,1+,电源,主机箱,键盘,监视器,鼠标,内存,CPU,硬盘,0,1,整体/部分结构表示法举例,关联关系反映对象之间相互依赖、相互作用的关系。通常为

27、1:1,1:M, M:N三种类型。,三、表示关联的图形符号,类1,连接名称m n,类2,教师,指导论文0,m 1,学生,表示法:,教师为学生指导论文:,m,n为阶,0至m,类 1,连接名称m n,类 1,连接属性,1)关联关系(链属性)的表示,允许实例连接带有一组属性,这些属性通过关联来描述,为之工作1,m,工资职务,雇主,雇员,个人名字身份证号,公司名字地址,题目答辩时间成绩,教师,学生,指导论文0,m 1,1)关联关系(链属性)示例,教师,1+,书,表示1个或多个,2) 阶数(重数):相关对象的数量,目录,文件名,文件,发送者,接受者,类 A,限定词,类 B,目录+文件名产生一个文件,3)

28、限定,4)消息连接,例:,为之工作,管理 0,1,姓名身份证号码地址,员工,名字电话号码主要产品地址,公司,职务,雇用解雇,项目名预算优先级,项目,产品名成本重量,产品,工人,经理,部门,部门名,主持,参加,1+,1+,1+,1+,1+,生产,四、一家公司的对象模型,77 动态模型(Dynamic Model),要想对一个系统了解得比较清楚,还应当考察在任何时刻对象及其关系的改变。系统的这些涉及时序和改变状况用动态模型来描述。动态模型着重于描述系统瞬时的、行为化的控制逻辑,其规定了对象模型中对象的合法的变化序列。它包括两个图,一是状态图,一是事件追踪图。,一、状态图,状态图是一个状态和事件的网

29、络,侧重于描述每一类对象的动态行为。动态模型由多个状态图组成。对于每一个具有重要动态行为的类都有一个状态图。状态图中的三要素含义如下:(1)事件:引发对象状态改变的控制信息,具有瞬时性;(2)状态:对象的属性所处的情形,具有可持续;(3)行为:对象要达到某种状态所做的操作,需要耗时。,Do:活动1,一、状态图(续),状态1,状态2,.,事件1条件1,结束事件,初始事件,空闲,可视菜单,右边按钮按下/显示弹出菜单,左边按钮弹起/擦除弹出菜单,光标移动/高亮菜单项,状态图举例:弹出菜单动作,状态图的表示方法:,注:当描述循环运行过程时,通常不关心是怎样启动的。,二、事件追踪图,事件追踪图侧重于说明

30、发生于系统执行过程中的一个特定“场景”。场景也叫做脚本,是完成系统某个功能的一个事件序列。场景通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件,它可以包括发生在这个期间的系统所有的内部事件。,二、事件追踪图举例:,挂断电话,电话切断,挂断电话,通 话,通 话,停止振铃,停止振铃,响应电话,电话振铃,铃 声,拨 号(3),拨 号(2),电话忙音结束,拨 号(8),电话忙音开始,拿起听筒,电话线,接电话者,打电话者,打电话的事件追踪图,三、状态图与事件追踪图的关系,状态图叙述一个对象的个体行为,事件追踪图则给出多个对象所表现出来的集体行为。它们从不同侧面来说明同一系统的行为。例如,一

31、个事件追踪图指出某一对象在接受一个事件之后发出另一事件,同一行为在此对象的状态图中也应当有所表示。,78 功能模型(Function Model),功能模型表明系统应该做什么, 着重于系统内部数据的传送和处理。表示方法:数据流图(DFD)。功能模型由多个数据流图组成,它们指明从外部输入,通过操作和内部存储,直到外部输出,这整个的数据流情况。 功能模型定义“做什么” 动态模型定义“何时做” 对象模型定义“对谁做”。,79 本章重点,1)掌握传统的软件开发方法的优缺点以及适用范围。,2)掌握快速原型法的原理、特点、以及适用范围。,3)掌握面向对象的原理、基本概念。,4)掌握OMT方法的三个模型(对象模型、动态模型与功能模型)的基本概念与用途。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。