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

下载本文档

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

文档简介

第9章面向对象方法学引论

(Object-OrientedMethodology)

本章介绍面向对象方法学的概述、基本概念,以及在用面向对象方法学开发软件过程中通常建立的3种模型:对象模型、动态模型和功能模型。

瀑布模型的缺点是僵化,要求:生命周期各阶段间遵守严格的顺序;预先定义并“冻结”软件需求。

SA-SD-SP技术的缺点:本质上是功能分解,以实现功能的过程为中心,而用户的需求变化主要是针对功能的。这就使基于过程的设计不易被理解;且功能变化往往引起结构变化较大,稳定性不好。数据与操作分开处理,可能造成软构件对具体应用环境的依赖,可重用性(reusability)较差。§1.OOM概述

尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,OOM以数据或信息为主线,把数据和处理结合构成统一体——对象。这时程序不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的集合。OOM的四要点:①对象(object):客观世界由对象组成。②类(class):对象可划分为类;单个对象可视为某一类的实例(instance)。OOM的特点: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);……}§1.OOM概述例如:③继承(inheritance):类可分层,下层子类与上层父类有相同特征,称为继承。④消息(message):对象间只能通过发送消息进行联系,外界不能处理对象的内部数据,只能通过消息请求它进行处理(如果它提供相应消息的话)。§1.OOM概述OOM(Object-Oriented)=Object+Classes+Inheritance+CommunicationwithmessagesObject-based=Object+CommunicationwithmessagesClass-based=Object+Classes+CommunicationwithmessagesOOM:以object为核心,强调对现实概念的模拟而不强调算法。“面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统”。

Class:由特殊到一般的归纳(induction)

Inheritance:由一般到特殊的演绎(deduction)2、面向对象方法学的优点传统方法:面向过程设计,以算法为核心,数据与操作分离,不易理解。§1.OOM概述①与人类习惯的思维方式一致OOM:以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。②面向对象软件稳定性好传统方法:结构依赖于功能,不稳定。传统方法:通过建立标准函数库来重用软构件。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要。OOM:一个class所有的instances都可重用它的代码;由inheritance派生出的新的class可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。§1.OOM概述③面向对象软件可重用性好传统方法:在许多中、小规模软件开发中取得成功。OOM:构成软件系统的每个对象有自己的数据、操作、功能和用途。可以把大型软件产品分解成一系列本质上相互独立的小产品,从而降低技术难度,便于管理。④较易开发大型软件产品稳定性好:软件功能需求的变化不牵动全局,只需局部修改;Class独立性强:只要修改不涉及class的对外接口,则内部修改完全不影响外部调用;Inheritance和多态性(polymorphism)使其很容易被修改和扩充;容易理解;OOM:从以下几方面改善了可维护性——有这一条就什么都好办了!

容易测试、调试。这一点还可商榷⑤面向对象软件可维护性好§1.OOM概述传统方法:可维护性是最令人头痛的问题。注:OOM并不是减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。3、面向对象的软件过程

任何开发方法学都必须完成的工作要素:“做什么”、“怎样做”、“实现”和“完善”。

迭代在OOM中更常见更容易实现开发重点应该是生命周期的分析阶段

生命周期个阶段的区分并不重要、不明显

整个开发过程中使用统一的软件概念“对象”整个开发过程吻合一致,是“无缝”连接的为避免开发过程过分无序,应以一线性过程为总目标。§1.OOM概述进一步开发运行状态集成和测试阶段编码阶段面向对象设计阶段面向对象分析阶段陈述需求阶段维护期f1f2f3……fi……fnfi(X)Sgi(X,S)S’输出输出§2.面向对象的概念

对象是基本运行实体,由描述其属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。1、对象(Object)Object:=ID+Method+Attribute+Message=ID,MS,DS,MI§2.OO的概念Object的特点:①以数据为中心,不设与数据无关的操作;②Object主动处理而不被动地等待被处理,外部只能通过message请求操作;③具有黑盒性:外部操作时,无须知道该object内部的数据结构及算法;④具有并行性:不同object各自独立地处理自身数据,彼此间仅通过传递message完成通信;⑤模块独立性好:内聚强(①)、耦合弱(③④)class中定义的数据,object有自己特有的属性值。7、封装(Encapsulation)2、类(Class)§2.OO的概念具有相同数据和相同操作的一组相似对象。3、实例(Instance)某个class描述的一个具体对象。4、消息(Message)

要求对象执行在定义它的那个类中所定义的某个操作的规格说明。Message:=object_ID.method_ID(parameter(s))5、方法(Method)object能做的操作,亦称为service、responsibility,在

class中须定义相应的代码。6、属性(Attribute)把数据和实现操作集中放在对象内部,对外界隐藏了实现细节。Class中国人中国人Attributes中国人Methods张山(instance)Class中国人

张山的AttributesClass重庆人

(子类)

重庆人Attributes

重庆人MethodsClass中国人李士(instance)

中国人李士的Attributes

重庆人李士的AttributesClass重庆人例:§2.OO的概念8、继承(Inheritance)

子类自动共享父类的attributes和methods,而不必重复定义。Inheritance的特点:①若重庆人的methods中有与中国人的同名,则李士执行该method时以重庆人为准,不执行中国人中定义的同名method。

讲官话,这叫做“低层性质override高层性质”讲土话,这叫做“县官不如现管”②传递性(transitivity):AB、BCAC

一个class继承了上层全部classes的一切性质。③一个子类只有一个父类称为单继承(singleinheritance),一个子类可有多个父类称为多重继承(multipleinheritance).§2.OO的概念FemaleChineseScholarI例:注意:multipleinheritance在定义中应避免二义性(ambiguity),即二个父类中定义重名,但各具不同性质。④修改与扩充可以很容易地通过派生子类来完成。9、多态性(Polymorphism)

不同层次的classes可共享一个method名,但按各自的方式来实现这种method。C++中定义了虚函数(virtualfunction)来实现这一功能。即一个method有多个版本,运行时才决定执行哪一个。故亦称为动态联编(dynamicbinding)或滞后联编(latebinding)§2.OO的概念10、重载(Overloading)

对相同的函数名或运算符实现不同的函数算法或运算。分为函数重载和运算符重载两种。doubleavg(constdoublea[],intsize);doubleavg(constinta[],intsize);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”;}⑴Function(orparameter)overloading:不同函数共用一个名字,而调用参数的特征不同。§2.OO的概念例:⑵Operatoroverloading:同一运算符(operator)作用于不同类型的操作数(operand)。

在编译(compile)阶段就决定了使用类型及执行代码,故亦称为静态联编(staticbinding)或先前联编

(earlybinding)。§3.面向对象建模

Object-OrientedModeling

面向对象方法最基本的原则是:按照人们习惯的思维方式,用面向对象观点建立问题域的模型,进而开发出尽可能自然地表现求解方法的软件。

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

影响较大的面向对象技术:

Coad/Yourdon方法

Booch方法

OMT(ObjectModelingTechnique)技术UML(UnifiedModelingLanguage)和RUP(RationalUnifiedProcess)OMT方法建立三种模型:描述系统数据结构的对象模型(objectmodel).

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

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

三种模型从3个不同但又密切相关的角度模拟目标系统,从不同侧面反映了系统的实质性内容,综合起来全面地反映对目标系统的需求。三种模型都是必不可少的,其中的对象模型是最重要、最基本、最核心的。§3.面向对象建模§3.面向对象建模1、对象模型(ObjectModel,OM)ClassNameAttributesMethodsClass

对象模型表示静态的、结构化的系统的“数据”性质,是对模拟客观世界实体的对象及对象彼此间的关系的映射,描述了系统的静态结构。

建立对象模型的目标是从客观世界中提炼出对具体应用有价值的概念。(1)类图的基本符号

通常使用UML提供的类图来建立对象模型,UML中类的实际含义是“一个类及属于该类的对象”。

属性

服务可见性属性名:类型名=初值{性质串}可见性操作名(参数表):返回值类型{性质串}注:可见性有3种+(public)、-(private)、#(protected)

参数名:类型名=默认值例如:圆

圆心坐标半径

……

显示隐藏

……§3.面向对象建模-半径:integer=1

关联关系表示两类对象之间存在着某种语义上的联系,即对象之间有相互作用、相互依靠的关系。(2)表示关系的符号§3.面向对象建模①关联关系校长学校一对一(1:1)教师讲义一对多(1:M)1M教师学生多对多(N:M)MN

关联的多重性:在表示关联的直线两端写上重数0..1表示0到1个对象0..*或*表示0到多个对象1+或1..*表示1到多个对象1..10表示1到10个对象5表示5个对象§3.面向对象建模1+目录文件文件名

名称:常见的关联是双向的关系作家计算机1+*使用被使用

关联的限定:受限的关联由两类对象及限定词组成

关联类:为说明关联的性质,引入关联类来表示这些附加信息电梯控制器电梯按钮4*队列

角色:类对象在关联中的特定作用工人公司*雇主雇员②聚集关系§3.面向对象建模

聚集(聚合)是关联的特例,表示一类对象与另一类对象之间的关系是整体与部分的关系。

共享聚集:处于部分方的对象可以同时参与多个处于整体方对象

组合聚集:部分类对象完全隶属于整体类对象窗口列表框*按钮菜单文本框***包含课题组人1..**成员§3.面向对象建模③泛化关系

泛化关系就是通常的继承关系,是通用类和具体类之间的关系。具体类完全拥有通用类的数据和操作,并且还可以补充一些数据和操作。注:泛化是针对类而不针对实例,指出在类与类之间存在“一般-特殊”关系。抽象类是没有具体对象的类。抽象操作是抽象类的操作。

普通泛化:就是继承关系(§2)交通工具{abstract}drive(){abstract}汽车drive()轮船drive()

受限泛化:具有进一步说明泛化使用方法或扩充方法的附加约束条件的泛化关系。预定义的约束有多重、不相交、完全和不完全4种。§3.面向对象建模④依赖和细化关系

依赖关系:描述两个类或用例之间的语义连接关系。表明一个类对象为了完成自己的任务需要借助另一个类对象提供的服务。

如:一个类使用另一个类的对象作为操作的参数或数据成员、一个类向另一个类发消息等。类B类A

细化关系:描述同一个事物的不同抽象层次的类对象。分析类设计类

即:“分析类”和“设计类”描述同一事物但抽象层次不同,“设计类”是在“分析类”的基础上的更详细的描述(“设计类”细化了“分析类”,或“分析类”细化成了“设计类”)。三要素:①事件(event):引发object状态改变的控制信息(瞬时)。②状态(status):即

object的

attributes所处的情形(可持续)。③行为(action):object要达到某种status所做的操作(耗时)。

动态模型表示系统瞬时的、行为化的系统控制性质,规定了对象模型中的对象的合法变化序列。表示方法:用UML提供的状态图(P.66)来描述对象的状态、触发状态转换的事件以及对象的行为。注:每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来构成系统的动态模型。2、动态模型(DynamicModel,DM)§3.面向对象建模闲置拨号通话断线拨号音do/响拨号音超时do/响蜂鸣音存储的信息do/播放信息接通中do/试接通振铃do/振铃忙音do/响忙音拿起听筒数字数字有效号码已接通受话人回话受话人挂断电话挂断电话超时挂断电话超时无效号码信息播完占线例:电话系统的状态图§3.面向对象建模表示方法:

数据流图(DFD)(P.40)用例模型(CaseModel)(1)用例图(CaseDiagram)UML提供的用例图是进行需求分析和建立功能模型的有力工具。在UML中用用例图建立起来的系统模型称用例模型。

用例图包含的模型元素有系统、行为者、用例及用例之间的关系。§3.面向对象建模3、功能模型(FunctionModel,FM)功能模型表示变化的系统的功能性质,表明系统应该做什么。自动售货机系统售货供货取货款顾客供货人收银员§3.面向对象建模①系统

用矩形框表示系统。方框的边线表示系统的边界,用于划定系统的功能范围,定义了系统所具有的功能。②

用例UML中用例定义为系统完成一个完整功能的一系列动作,其结果能被特定的行为者感受到。具有如下特征:

用例代表用户可见的功能,实现一个具体的用户目标

用例是被行为者启动的,并向行为者提供确切的值

用例可大可小,但必须是相对完整的注:用例置于系统方框内用例是一个类,代表一类功能而不是使用该类功能的某个具体实例用例的实例是系统的一种实际使用方法(脚本)用例除完成内部计算与工作外,还包括与外部的通信§3.面向对象建模③

行为者④

用例之间的关系

是与系统交互的人或其他系统,代表系统外部的实体。注

温馨提示

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

评论

0/150

提交评论