第七章面向对象方法学引论_第1页
第七章面向对象方法学引论_第2页
第七章面向对象方法学引论_第3页
第七章面向对象方法学引论_第4页
第七章面向对象方法学引论_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章面向对象方法学引论第一页,共六十五页,编辑于2023年,星期四第七章面向对象方法学引论7·1传统方法学的缺点7·2快速原型法简介7·3面向对象方法学概述7·4面向对象的基本概念7·5面向对象建模7·6对象模型7·7动态模型7·8功能模型7·9本章重点第二页,共六十五页,编辑于2023年,星期四7·1传统方法学的缺点传统的生命周期方法学的本质,是通过需求分析预定义软件需求,然后一个阶段接着一个阶段有条不紊的开发用户所要求的软件,实现预定义的软件需求。

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

但是,对于那些大的复杂的软件系统而言,这种方法仍然显得力不从心。第三页,共六十五页,编辑于2023年,星期四一、瀑布模型的缺点:僵化

生命周期各阶段间存在严格的顺序性与依赖性,因此其特别强调预先定义需求的重要性。要求预先定义并“冻结”软件需求。 实践表明:在系统建立起来很难仅仅依靠分析就能确定一套完整、准确、一致、有效的应用需求,而且该方法不适用与用户需求不断变化的情况: (1)某些类型的系统需求是模糊的。 (2)项目参与者之间存在通讯鸿沟。 (3)预先定义的需求可能是过时的。第四页,共六十五页,编辑于2023年,星期四二、SA-SD-SP技术的缺点 本质上是功能分解,以实现功能的过程为中心,而用户的需求变化主要是针对功能的。这就使基于过程的设计不易被理解;且功能变化往往引起结构变化较大,稳定性不好。系统有明确的边界定义,且系统结构依赖于系统边界的定义,系统不易扩充和修改。数据与操作分开处理,可造成软构件对具体应用环境的依赖,可重用性(reusability)较差.第五页,共六十五页,编辑于2023年,星期四7·2快速原型法简介 快速原型法适用于用户需求模糊或随时间变化的系统。以原型(软件产品的样品)为共同语言,实现用户与开发者双向沟通,来解决用户与开发者之间的鸿沟。

原型是一个可实地运行的模型,有正式产品的主要特征,但不是全部特征。 软件原型是软件系统的最初版本,以最少的费用,最短的时间开发出的、以反映最后软件的主要特征的系统。第六页,共六十五页,编辑于2023年,星期四一、原型模型(快速成型模型)建造/修改原型用户测试运行原型

听取用户意见原型范型第七页,共六十五页,编辑于2023年,星期四二、原型的特性是一个可实际工作的系统;没有固定的生存期,结局可能是用后立即被抛弃,或可能成为最终系统;可服务于不同的目的,从需求分析到最终产品都可做原型;建立必须快,便宜;是包含修改、评价在内的完整重复过程。

原型指“快速软件原型”第八页,共六十五页,编辑于2023年,星期四三、原型化开发的应用领域需求分析和定义规格说明;作为软件设计的一种工具;作为一种解决不确定性的工具作为一种实验工具系统开发同时,作为同步培训工具作为开发方法,利用原型演化为最终系统作为软件维护的辅助工具第九页,共六十五页,编辑于2023年,星期四四、原型开发的分类 原型化随建立原型目的不同分为:

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

S1:发布基本的文件管理、编辑和文档生成功能;

S2:增量实现完善的编辑和文档生成功能;

S3:增量实现拼写和语法检查功能;

S4:增量完成高级的页面布局功能。第十一页,共六十五页,编辑于2023年,星期四五、原型开发的优点保证产品有较好的可维护性改善用户与开发人员的信息交流和思想沟通,给用户修改的机会减少或消灭下游返工的可能,改进了瀑布模型的弊病原型系统可作为培训环境,有利于用户培训和开发同步。开发成本降低,周期缩短。第十二页,共六十五页,编辑于2023年,星期四7·3面向对象方法学概述一、传统的软件开发方法的缺点: 特点是把软件视为处理流,并定义成由一系列步骤构成的算法。每一步骤都是带有预定输入和特定输出的一个过程,把这些步骤串联在一起可产生合理的稳定的贯通于整个程序的控制流,最终产生一个简单的具有静态结构的体系结构。过程性开发模式侧重建立构成问题解决的处理流。数据抽象、数据结构根据算法步骤的要求开发,它贯穿于过程,提供过程所要求操作的信息。系统的状态是一组全局变量,这组全局变量保存状态的值,把它们从一个过程传送到另一个过程。第十三页,共六十五页,编辑于2023年,星期四二、面向对象思想的由来传统的软件开发方法—没有直接而全面地反映问题的本质

直接面对问题域中客观存在的事物来进行软件开发—面向对象希望第十四页,共六十五页,编辑于2023年,星期四二、面向对象思想的由来(续)对象表示现实世界中某个具体的事物。事物可分为两大部分:物质

:表达具体的事物意识

:描述抽象的概念解决问题方法:(OOObject-Oriented)现实问题空间面向对象解空间物质对象(客观存在的)意识类(抽象的概念)第十五页,共六十五页,编辑于2023年,星期四三、对象、实体与类关系图对象实体类抽象数据类计算机世界现实世界计算机逻辑的实现影射抽象实例化抽象第十六页,共六十五页,编辑于2023年,星期四四、面向对象方法(OOM)特点

尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,OOM以数据或信息为主线,把数据和处理结合构成统一体——对象。这时程序不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的集合。第十七页,共六十五页,编辑于2023年,星期四OOM举例:邮局业务管理杭州北京Post-officeMessageSendbymethod对象ObjectObject=数据AttributeAttributes:location;employee;……+操作MethodMethods:send;sell;……注意:Object内部的attributes不允许外部用户直接改动,只有当它提供了相应的服务method时,用户才能通过发送message来提请它执行。我想把邮局搬到我家门口,多加几个邮递员,24小时都开门……对不起,本邮局不提供此类服务唉,那就先送束花吧——Post_office.Send(request,payment)第十八页,共六十五页,编辑于2023年,星期四五、面向对象的定义面向对象=对象+类+继承+通信如果一个软件系统是使用这样4个概念设计和实现的,则我们认为这个软件系统是面向对象的。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。面向对象四要素:(1)对象(2)类(3)继承(4)消息第十九页,共六十五页,编辑于2023年,星期四六、面向对象四要素——对象对象(Object)是面向对象的基本成份。每个对象可用它本身的一组属性和它可以执行的一组操作来定义。属性一般只能通过执行对象的操作来改变。操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。第二十页,共六十五页,编辑于2023年,星期四六、面向对象四要素——类类(Class)是一组具有相同数据结构和相同操作的对象的集合。类的定义包括一组数据属性和在数据上的一组合法操作。类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。在一个类中,每个对象都是类的实例

(Instance),它们都可使用类中提供的函数。对象的状态则包含在它的实例变量,即实例的属性中。第二十一页,共六十五页,编辑于2023年,星期四六、面向对象四要素——消息消息(Message)是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。第二十二页,共六十五页,编辑于2023年,星期四classPost_office//定义类{private:loc_typelocation;emp_typeemployee;……public:voidsend(req_typerequest,money_typepayment);voidsell(intgoods,money_typepayment);……};

main(){Post_officeMy_PO;//声明类的示例:对象

req_typeMy_request;money_typeMy_payment;……My_PO.Send(My_request,My_payment);//通讯

……}OOM举例:邮局业务管理第二十三页,共六十五页,编辑于2023年,星期四六、面向对象四要素——继承继承(Inheritance)是使用已存在的定义做为基础建立新定义的技术。新类的定义可以是既存类所声明的数据和新类所增加的声明的组合。新类复用既存的定义,而不要求修改既存类。既存类可当做基类来引用,则新类相应地可当做派生类来引用。例如,从一个既存的车辆类派生的四轮驱动车类可能不仅是车辆类子集合定义的特殊化,而且还可能在新类的界面中引入新的能力。第二十四页,共六十五页,编辑于2023年,星期四七、面向对象与传统方法比较①传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解。OOM:以object为核心,强调对现实概念的模拟而不强调算法。“面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统”。Class:由特殊到一般的归纳(induction)

Inheritance:由一般到特殊的演绎(deduction)第二十五页,共六十五页,编辑于2023年,星期四七、面向对象与传统方法比较(续)②传统方法:结构依赖于功能,不稳定。OOM:以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。③传统方法:通过建立标准函数库来重用软构件。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要。OOM:一个class所有的instances都可重用它的代码;由inheritance派生出的新的class可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。第二十六页,共六十五页,编辑于2023年,星期四七、面向对象与传统方法比较(续)稳定性好:软件功能需求的变化不牵动全局,只需局部修改;Class独立性强:只要修改不涉及class的对外接口,则内部修改完全不影响外部调用;Inheritance和多态性(polymorphism)使其很容易被修改和扩充;容易理解;④传统方法:可维护性是最令人头痛的问题。

OOM:从以下几方面改善了可维护性——第二十七页,共六十五页,编辑于2023年,星期四七、面向对象与传统方法比较(续)

OOM并不是减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。OOM与快速原型法结合使用效果好。第二十八页,共六十五页,编辑于2023年,星期四八、三种开发模型的适用范围⑴瀑布模型Waterfall:需求稳定少变化对环境较熟悉(低风险)用户很少参与开发面向过程编程⑵螺旋模型Spiral:需求可能在开发早期有变化对环境较熟悉(中风险)用户不同程度地参与整个过程

OOP第二十九页,共六十五页,编辑于2023年,星期四八、三种开发模型的适用范围(续)⑶增量模型Incremental:需求随时可能变化对环境不熟悉(高风险)用户完全参与开发

OOP

SA-SD-SP

与Waterfallmodel有本质上的密切联系;OOP由可用于任何模型。OOM的工作重点在分析阶段,确定objects,此外,生命周期的各阶段可以“无缝”连接。

第三十页,共六十五页,编辑于2023年,星期四7·4面向对象的基本概念f1f2f3……fi……fnfi(X)Sgi(X,S)S’输出输出1、对象Object:=ID+Method+Attribute+Message第三十一页,共六十五页,编辑于2023年,星期四对象的基本特点①以数据为中心,不设与数据无关的操作;②Object主动处理而不被动地等待被处理,外部只能通过message请求操作;③具有黑盒性:外部操作时,无须知道该object内部的数据结构及算法;④具有并行性:不同object各自独立地处理自身数据,彼此间仅通过传递message完成通信;⑤模块独立性好:内聚强(①)、耦合松(③④)第三十二页,共六十五页,编辑于2023年,星期四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和methods,而不必重复定义。面向对象的基本概念(续)第三十三页,共六十五页,编辑于2023年,星期四面向对象的基本概念(续)Class中国人中国人Attributes中国人Methods张山(instance)

Class中国人张山的AttributesClass杭州人(子类)杭州人Attributes杭州人Methods

Class中国人李士(instance)中国人李士的Attributes杭州人李士的Attributes

Class杭州人例:第三十四页,共六十五页,编辑于2023年,星期四继承的特点:①低层性质覆盖高层性质:若杭州人的methods中有与中国人的同名,则李士执行该method时以杭州人为准,不执行中国人中定义的同名method。②传递性(transitivity):AB、BCAC

一个

class继承了上层全部classes

的一切性质。③一个子类只有一个父类称为单继承(singleinheritance),一个子类可有多个父类称为多重继承(multipleinheritance).例④修改与扩充可以很容易地通过派生子类来完成。第三十五页,共六十五页,编辑于2023年,星期四注意:multipleinheritance在定义中应避免二义性(ambiguity),即二个父类中定义重名,但各具不同性质。例:FemaleChineseScholarICardDeckGraphicalObjectGraphicalDeckMethod:Draw:=takeacardfromadeckMethod:Draw:=displayagraphicalobjectMethod:Draw:=?例:第三十六页,共六十五页,编辑于2023年,星期四面向对象的基本概念(续)8、多态性(Polymorphism):不同层次的classes可共享一个method名,但按各自的方式来实现这种method。

C++中定义了虚函数(virtualfunction)来实现这一功能。即一个method有多个版本,运行时才决定执行哪一个。故亦称为动态联编(dynamicbinding)或滞后联编(latebinding)第三十七页,共六十五页,编辑于2023年,星期四面向对象的基本概念(续)doubleavg(constdoublea[],intsize);{doublesum=0.0;for(inti=0;i<size;++i)sum+=a[i];return(sum/size);}doubleavg(constinta[],intsize);{intsum=0;for(inti=0;i<size;++i)sum+=a[i];return((double)sum/size);}main(){intk[3]={1,2,3};doublex[3]={1.1,2.2,3.3};cout<<avg(k,3)<<“intaverage\n”;cout<<avg(x,3)<<“doubleaverage\n”;}9、重载Overloading⑴函数重载:不同函数共用一个名字,而调用参数的特征不同。例:第三十八页,共六十五页,编辑于2023年,星期四面向对象的基本概念(续)⑵运算符重载Operatoroverloading:同一运算符(operator)作用于不同类型的操作数(operand)上面。在编译(compile)阶段就决定了使用类型及执行代码,故意亦称为静态联编

(staticbinding)或先前联编

(earlybinding)。第三十九页,共六十五页,编辑于2023年,星期四7·5面向对象建模面向对象的开发方法Booch方法

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

Booch方法包括各种模型,涉及软件系统的对象、动态及功能各方面,对类及继承方面的描述特别值得借鉴。第四十页,共六十五页,编辑于2023年,星期四面向对象的开发方法(续)Coad方法

1989年Coad与Yourdon提出的面向对象方法,经典著作(OOA、OOD).该方法比较完整而系统介绍了面向对象的分析和设计。 主要优点是在对象、结构、属性和服务的认定方面,提出了一套系统的原则。该方法完成了从需求角度出发的对象和分类结构的认定工作,面向对象的设计可以在此基础上,从设计的角度进一步类和类层次结构的认定。第四十一页,共六十五页,编辑于2023年,星期四面向对象的开发方法(续)OMT(ObjectModelingTechnique)方法

OMT方法是1991年由JamesRumbaugh等5人提出的,经典著作为“面向对象的建模与设计”。 特点是开发工作起始于对真实世界的对象建模上,然后围绕这这些对象使用这个模型来构造独立于语言的设计。建立三种模型:①描述系统数据结构的对象模型(objectmodel).②描述系统控制结构的动态模型(dynamicmodel).③描述系统功能的功能模型(functionmodel).第四十二页,共六十五页,编辑于2023年,星期四7·6对象模型(ObjectModel) 对象模型是对模拟客观世界实体的对象以及对象之间关系的映射,描述了系统的静态结构。 对象模型是三个模型中最关键的一个模型,它的作用是描述系统的静态结构,包括构成系统的类和对象,它们的属性和操作,及它们之间的关系。 在建立对象模型时,需要定义一组图形符号,并且规定一组组织这些符号以表示特定语义的规则。此处给出Coad与Yourdon的表示方法。第四十三页,共六十五页,编辑于2023年,星期四一、表示类—&—对象的图形符号ClassNameAttributesMethods类ClassClassNameAttributesMethods类&对象Class-&-Object表示属于该类的对象第四十四页,共六十五页,编辑于2023年,星期四 结构表示问题域中的复杂关系,是客观世界实体间关系的抽象。类及对象间的关系可概括为:归纳关系(一般/特殊结构、分类结构)

针对事物类之间的组织关系组合关系(整体/部分结构、组装结构)

表示事物的整体与部分之间的组合关系关联关系表示对象间相互依赖、相互作用关系二、表示结构的图形符号第四十五页,共六十五页,编辑于2023年,星期四一般类特殊类特殊类...... 子类的公共属性和操作归属于一般类并被每一个子类共享,每一个子类都继承了一般类的特征。一般类(父类、基类、超类)特殊类(子类)继承(1)一般/特殊结构表示法第四十六页,共六十五页,编辑于2023年,星期四

存户一般/特殊结构举例一般类(父类、基类、超类)特殊类(子类)继承一个特殊类中的所有对象可继承一般类中的属性、服务、关系.账号姓名余额存款取款支票存户储蓄存户利息率第四十七页,共六十五页,编辑于2023年,星期四一个整体对象可有不同类型的部分对象.一个部分对象也可同时属于多个整体对象.(2)整体/部分结构表示法整体部分1部分2组合关系注:是object间的关系,有传递性。1,m0,n第四十八页,共六十五页,编辑于2023年,星期四飞机发动机飞机-整体对象可能没有发动机最多有四台发动机用以实现"聚合"、"组合"、"划分"发动机-部分对象0,4第四十九页,共六十五页,编辑于2023年,星期四整体/部分结构(分类结构)整体/部分结构是一种特定的连接.

整体类中的一个对象(或称聚合)是由各部分类的对象(或称成分)构成的.这一结构是对象间的一种关系.第五十页,共六十五页,编辑于2023年,星期四微机1+电源主机箱键盘监视器鼠标内存CPU硬盘0,1整体/部分结构表示法举例第五十一页,共六十五页,编辑于2023年,星期四

关联关系反映对象之间相互依赖、相互作用的关系。通常为1:1,1:M,M:N三种类型。三、表示关联的图形符号类1连接名称mn类2教师指导论文0,m1学生表示法:教师为学生指导论文:m,n为阶0至m第五十二页,共六十五页,编辑于2023年,星期四类1连接名称mn类1连接属性1)关联关系(链属性)的表示 允许实例连接带有一组属性,这些属性通过关联来描述

第五十三页,共六十五页,编辑于2023年,星期四为之工作1,m工资职务雇主雇员个人名字身份证号公司名字地址题目答辩时间成绩教师学生指导论文0,m11)关联关系(链属性)示例第五十四页,共六十五页,编辑于2023年,星期四教师1+书表示1个或多个2)阶数(重数):相关对象的数量第五十五页,共六十五页,编辑于2023年,星期四目录文件名文件发送者接受者类A限定词类B目录+文件名产生一个文件3)限定4)消息连接例:第五十六页,共六十五页,编辑于2023年,星期四为之工作管理0,1姓名身份证号码地址员工名字电话号码主要产品地址公司职务雇用解雇项目名预算优先级项目产品名成本重量产品工人经理部门部门名主持参加1+1+1+1+1+生产四、一家公司的对象模型第五十七页,共六十五页,编辑于2023年,星期四7·7动态模型(DynamicModel) 要想对一个系统了解得比较清楚,还应当考察在任何时刻对象及其关系的改变。系统的这些涉及时序和改变状况用动态模型来描述。 动态模型着重于描述系统瞬时的、行为化的控制逻辑,其规定了对象模型中对象的合法的变化序列。 它包括两个图,一是状态图,一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论