1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第七章面向对象方法学引论,第七章 面向对象方法学引论,71,传统方法学的缺点,72,快速原型法简介,73,面向对象方法学概述,74,面向对象的基本概念,75,面向对象建模,76,对象模型,77,动态模型,78,功能模型,79,本章重点,71 传统方法学的缺点,传统的生命周期方法学的本质,是,通过需求分析预定义软件需求,然后一个阶段接着一个阶段有条不紊的开发用户所要求的软件,实现预定义的软件需求,。,虽然生命周期方法较之传统的软件开发方法更
2、为规范化,对实现软件开发工程化起到了重要的促进作用,部分缓解了软件危机,引起了软件开发原理的一次重大变革。,但是,对于那些大的复杂的软件系统而言,这种方法仍然显得力不从心,。,一、瀑布模型的缺点:僵化,生命周期各阶段间存在严格的顺序性与依赖性,因此其特别强调预先定义需求的重要性,。要求预先定义并“冻结”软件需求。,实践表明:在系统建立起来很难仅仅依靠分析就能确定一套完整、准确、一致、有效的应用需求,而且该方法不适用与用户需求不断变化的情况:,(1)某些类型的系统需求是模糊的。,(2)项目参与者之间存在通讯鸿沟。,(3)预先定义的需求可能是过时的。,二、,SA-SD-SP,技术的缺点,本质上是功
3、能分解,以实现功能的,过程,为中心,而用户的需求变化主要是针对,功能,的。这就使基于过程的设计,不易被理解,;且,功能,变化往往引起结构变化较大,,稳定性不好,。,系统有明确的边界定义,且系统结构依赖于系统边界的定义,系统,不易扩充和修改,。,数据与操作分开处理,可造成软构件对具体应用环境的依赖,,可重用性(,reusability),较差,.,72 快速原型法简介,快速原型法适用于用户需求模糊或随时间变化的系统。以原型,(,软件产品的样品,),为共同语言,实现用户与开发者双向沟通,来解决用户与开发者之间的鸿沟。,原型是一个可实地运行的模型,有正式产品的主要特征,但不是全部特征,。,软件原型是
4、软件系统的最初版本,以最少的费用,最短的时间开发出的、以反映最后软件的主要特征的系统。,一、原型模型,(,快速成型模型,),建造/修改,原型,用户测试,运行原型,听取用,户意见,原型范型,二、原型的特性,是一个可实际工作的系统;,没有固定的生存期,结局可能是用后立即被抛弃,或可能成为最终系统;,可服务于不同的目的,从需求分析到最终产品都可做原型;,建立必须快,便宜;,是包含修改、评价在内的完整重复过程。,原型指“快速软件原型”,三、原型化开发的应用领域,需求分析和定义规格说明;,作为软件设计的一种工具;,作为一种解决不确定性的工具,作为一种实验工具,系统开发同时,作为同步培训工具,作为开发方法
5、利用原型演化为最终系统,作为软件维护的辅助工具,最多有四台发动机,double x3=1.,整体/部分结构表示法举例,七、面向对象与传统方法比较,如果一个软件系统是使用这样 4 个概念设计和实现的,则我们认为这个软件系统是面向对象的。,状态图叙述一个对象的个体行为,事件追踪图则给出多个对象所表现出来的集体行为。,一个特殊类中的所有对象可继承一般类中的属性、服务、关系,管理 0,1,Inheritance和多态性(polymorphism)使其很容易被修改和扩充;,7、继承Inheritance:子类自动共享父类attributes 和methods,而不必重复定义。,7、继承Inherita
6、nce:子类自动共享父类attributes 和methods,而不必重复定义。,四、原型开发的分类,原型化随建立原型目的不同分为:,(1)抛弃式原型开发:,辅助于瀑布模型,建立目标是评价目标系统的某个(些,),特性,以便准确了解需求,或严格验证方案。特点用完就抛弃,然后重新建立正式的目标系统。,(2)演化式原型开发:,采用高度迭代的动态方法,每次都要再次确定需求、分析设计、开发测试、,多次迭代直到用户满意为止。特点是,系统的初始版本很早交付用户试用,而且开发的成败取决于需要双方的耐心,。,四、原型开发的分类,(,续,),(3)递增式原型开发:,融合了瀑布模型与原型迭代的特征。特点是采用随日程
7、时间的进展而交错的线性序列,每一个线性序列产生一个可发布“增量”。如使用此方法开发一个字处理软件,线性序列安排如下:,S1,:发布基本的文件管理、编辑和文档生成功能;,S2,:增量实现完善的编辑和文档生成功能;,S3,:增量实现拼写和语法检查功能;,S4,:增量完成高级的页面布局功能。,五、原型开发的优点,保证产品有较好的可维护性,改善用户与开发人员的信息交流和思想沟通,给用户修改的机会,减少或消灭下游返工的可能,改进了瀑布模型的弊病,原型系统可作为培训环境,有利于用户培训和开发同步。,开发成本降低,周期缩短。,73 面向对象方法学概述,一、传统的软件开发方法的缺点:,特点是,把软件视为处理流
8、并定义成由一系列步骤构成的算法,。每一步骤都是带有预定输入和特定输出的一个过程,把这些步骤串联在一起可产生合理的稳定的贯通于整个程序的控制流,最终产生一个简单的具有静态结构的体系结构。,过程性开发模式,侧重建立构成问题解决的处理流,。,数据抽象、数据结构,根据算法步骤的要求开发,它贯穿于过程,提供过程所要求操作的信息。,系统的状态是一组全局变量,,这组全局变量保存状态的值,把它们从一个过程传送到另一个过程。,二、面向对象思想的由来,传统的软件开发方法,没有直接而全面地反映问题的本质,直接面对问题域中客观存在的事物来进行软件开发,面向对象,希望,二、面向对象思想的由来,(,续,),对象,表示现
9、实世界中某个具体的事物。事物可分为两大部分:,物质,:表达具体的事物,意识,:描述抽象的概念,解决问题方法:(,OO,O,bject-,O,riented,),现实问题空间 面向对象解空间,物质,对象,(客观存在的),意识,类,(抽象的概念),三、对象、实体与类关系图,对象,实体,类,抽象数据类,计算机世界,现实世界,计算机逻,辑的实现,影射,抽,象,实,例,化,抽,象,四、面向对象方法,(OOM),特点,尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,,OOM,以数据或信息为主线,把,数据和处理结合,构成统一体,对象。这时程序不再是一系列工作在数据上的函数集
10、合,而是相互协作又彼此独立的,对象,的集合。,OOM,举例:,邮局业务管理,杭 州,北 京,Post-office,Message,Send by method,对象,Object,Object,=数据,Attribute,Attributes:,location;,employee;,+操作,Method,Methods:,send;,sell;,注意:,Object,内部的,attributes,不允许外部用户直接改动,只有当它提供了相应的服务,method,时,用户才能通过发送,message,来提请它执行。,我想把邮局搬到,我家门口,多加几个,邮递员,24小时都开门,对不起,,本邮局不
11、提供,此类服务,唉,那就先送束花吧,Post_office.Send(request,payment),五、面向对象的定义,面向对象=对象+类+继承+通信,如果一个软件系统是使用这样 4 个概念设计和实现的,则我们认为这个软件系统是面向对象的。,一个面向对象的程序的每一成份应是,对象,,计算是通过,新的对象的建立,和,对象之间的通信,来执行的,。,面向对象四要素:,(1)对象(2)类 (3)继承(4)消息,六、面向对象四要素,对象,对象(,Object),是面向对象的,基本成份,。,每个对象可用,它本身的一组属性,和,它可以执行的一组操作,来定义。,属性,一般只能,通过执行对象的操作来改变,。
12、操作,又称为方法或服务,它,描述了对象执行的功能,,若通过消息传递,还可以为其它对象使用。,六、面向对象四要素,类,类(,Class,)是一组具有,相同数据结构,和,相同操作,的对象的集合。,类的定义包括,一组数据属性,和,在数据上的一组合法操作,。,类定义可以视为一个具有类似特性与共同行为的对象的,模板,,可用来产生对象。,在一个类中,每个,对象,都是,类的实例,(,Instance),,它们都可使用类中提供的函数。,对象的状态则包含在它的实例变量,即实例的属性中。,六、面向对象四要素,消息,消息(,Message,)是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的
13、规格说明。,发送给一个对象的消息定义了一个,方法名,和一个,参数表,(可能是空的),并,指定某一个,对象,。,一个对象接收的消息则调用消息中指定的,方法,,并将,形式参数与参数表中相应的值结合起来,。,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;,/,声
14、明类的示例:对象,req_type My_request;,money_type My_payment;,My_PO.Send(My_request,My_payment);,/,通讯,OOM,举例:,邮局业务管理,六、面向对象四要素,继承,继承,(,Inheritance),是,使用已存在的定义做为基础建立新定义,的技术。,新类的定义可以是,既存类所声明的数据,和,新类所增加的声明,的组合。新类复用既存的定义,而,不要求修改既存类,。,既存类,可当做,基类,来引用,则,新类,相应地可当做,派生类,来引用。,例如,从一个既存的,车辆,类派生的,四轮驱动车,类可能不仅是,车辆,类子集合定义的特殊
15、化,而且还可能在新类的界面中引入新的能力。,七、面向对象与传统方法比较,传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解。,OOM,:以,object,为核心,强调对现实概念的模拟而不强调算法。“,面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统,”。,Class:,由特殊到一般的归纳(,induction),Inheritance,:由一般到特殊的演绎(,deduction),七、面向对象与传统方法比较,(,续,),传统方法:结构依赖于功能,不稳定。,OOM,:以,object,模拟实体,需求变化不会引起结构的整
16、体变化,因为实体相对稳定,故系统也相应稳定。,传统方法:通过建立标准函数库来重用软构件。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要。,OOM,:一个,class,所有的,instances,都可重用它的代码;由,inheritance,派生出的新的,class,可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。,七、面向对象与传统方法比较,(,续,),稳定性好:软件功能需求的变化不牵动全局,只需局部修改;,Class,独立性强:只要修改不涉及,class,的对外接口,则内部修改完全不影响外部调用;,Inheritance,和多态性,(polymorphism),使其很容
17、易被修改和扩充;,容易理解;,传统方法:可维护性是最令人头痛的问题。,OOM,:从以下几方面改善了可维护性,七、面向对象与传统方法比较,(,续,),OOM,并不是减少了开发时间,,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度,改进了软件的质量,。,OOM,与,快速原型法,结合使用效果好。,八、三种开发模型的适用范围,瀑布模型,Waterfall,:,需求稳定少变化,对环境较熟悉(低风险),用户很少参与开发,面向过程编程,螺旋模型,Spiral,:,需求可能在开发早期有变化,对环境较熟悉(中风险),用户不同程度地参与整个过程,OOP,八、三种开发模型的适用范围,(,续,
18、),增量模型,Incremental,:,需求随时可能变化,对环境不熟悉(高风险),用户完全参与开发,OOP,SA-SD-SP,与,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,主动处理,而不 被动地等待被处
19、理,外部只能通过,message,请求操作;,具有黑盒性,:外部操作时,无须知道该,object,内部的数据结构及算法;,具有并行性,:不同,object,各自独立地处理自身数据,彼此间仅通过传递,message,完成通信;,模块独立性好,:内聚强()、耦合松(),2,、类,Class,:具有相同数据和相同操作的一组对象;,3,、实例,Instance,:某个,class,描述的具体对象;,4,、消息,Message,:=object_ID.method_ID(parameter(s),;,5,、方法,Method,:object,能做的操作,亦称为,service,、,responsibil
20、ity,在,class,中须定义相应的代码;,6,、属性,Attribute,:,object,的固有数据;,7,、继承,Inheritance,:子类自动共享父类,attributes,和,methods,,而不必重复定义。,面向对象的基本概念,(,续,),面向对象的基本概念,(,续,),Class,中国人,中国人,Attributes,中国人,Methods,张山(,instance),Class,中国人,张山的,Attributes,Class,杭州人(子类),杭州人,Attributes,杭州人,Methods,Class,中国人,李士(,instance),中国人李士的,Attrib
21、utes,杭州人李士的,Attributes,Class,杭州人,例:,继承的特点,:,低层性质覆盖高层性质,:,若,杭州人,的,methods,中有与,中国人,的同名,则李士执行该,method,时以,杭州人,为准,不执行,中国人,中定义的同名,method,。,传递性(,transitivity),:,A,B,、,BC,A,C,一个,class,继承了上层全部,classes,的一切性质。,一个子类只 有 一 个父类称为单 继 承(,single inheritance),一个子类可有多个父类称为多重继承(,multiple inheritance).,例,修改与扩充可以很容易地通过派生子
22、类来完成。,注意:,multiple inheritance,在定义中应避免二义性,(ambiguity),,即二个父类中定义重名,但各具不同性质。,例:,Female,Chinese,Scholar,I,CardDeck,GraphicalObject,GraphicalDeck,Method:,Draw:=take,a card from,a deck,Method:,Draw:=display,a graphical object,Method:,Draw:=?,例:,面向对象的基本概念,(,续,),8、多态性(,Polymorphism),:不同层次的,classes,可共享一个,me
23、thod,名,但按各自的方式来实现这种,method,。,C+,中定义了虚函数,(,virtual 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);
24、int sum=0;,for(int i=0;i 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,函数重载,:,不同函数共用一个名字,而调用参数的特征不同。例:,传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解。,一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。,c
25、out avg(k,3)“int averagen”;,(2)项目参与者之间存在通讯鸿沟。,原型指“快速软件原型”,OOM:以object 为核心,强调对现实概念的模拟而不强调算法。,S3:增量实现拼写和语法检查功能;,Post-office,类(Class)是一组具有相同数据结构和相同操作的对象的集合。,76 对象模型(Object Model),一个子类只 有 一 个父类称为单 继 承(single inheritance),一个子类可有多个父类称为多重继承(multiple inheritance).,开发成本降低,周期缩短。,状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为
26、系统的状态是一组全局变量,这组全局变量保存状态的值,把它们从一个过程传送到另一个过程。,Post_office My_PO;/声明类的示例:对象,生命周期各阶段间存在严格的顺序性与依赖性,因此其特别强调预先定义需求的重要性。,1989年Coad与Yourdon提出的面向对象方法,经典著作(OOA、OOD).,面向对象的基本概念,(,续,),运算符重载,Operator overloading:,同一运算符,(operator),作用于不同类型的操作数,(operand),上面。,在编译(,compile),阶段就决定了使用类型及执行代码,故意亦称为,静态联编,(,static bindin
27、g),或,先前联编,(,early binding),。,75 面向对象建模,面向对象的开发方法,Booch,方法,Booch,最先描述了面向对象的软件开发的基础问题,指出了面向对象开发方法是一种完全不同于传统的功能分解的设计方法。面向对象的软件分解方法更接近人对客观事物的理解,而功能分解只能通过问题空间的转换获得。,Booch,方法包括各种模型,涉及软件系统的对象、动态及功能各方面,对类及继承方面的描述特别值得借鉴。,面向对象的开发方法,(,续,),Coad,方法,1989,年,Coad,与,Yourdon,提出的面向对象方法,经典著作,(OOA,、,OOD).,该方法比较完整而系统介绍了面
28、向对象的分析和设计。,主要优点是在对象、结构、属性和服务的认定方面,提出了一套系统的原则。该方法完成了从需求角度出发的对象和分类结构的认定工作,面向对象的设计可以在此基础上,从设计的角度进一步类和类层次结构的认定。,面向对象的开发方法,(,续,),OMT,(,Object Modeling Technique,),方法,OMT,方法是,1991,年由,James Rumbaugh,等,5,人提出的,经典著作为“面向对象的建模与设计”。,特点是开发工作起始于对真实世界的对象建模上,然后围绕这这些对象使用这个模型来构造独立于语言的设计。建立三种模型:,描述系统数据结构的对象模型,(object m
29、odel).,描述系统控制结构的动态模型,(dynamic model).,描述系统功能的功能模型,(function model).,76,对象模型,(,Object Model,),对象模型是对模拟客观世界实体的对象以及对象之间关系的映射,描述了系统的静态结构。,对象模型是三个模型中最关键的一个模型,它的作用是,描述系统的静态结构,,包括,构成系统的类和对象,,,它们的属性和操作,,及,它们之间的关系,。,在建立对象模型时,需要定义一组图形符号,并且规定一组组织这些符号以表示特定语义的规则。此处给出,Coad,与,Yourdon,的表示方法。,一、表示类,&,对象的图形符号,Class N
30、ame,Attributes,Methods,类,Class,Class Name,Attributes,Methods,类&对象,Class-&-Object,表示属于该类,的对象,结构表示问题域中的复杂关系,是客观世界实体间关系的抽象。,类及对象间的关系可概括为:,归纳关系,(,一般,/,特殊结构,、,分类结构,),针对事物类之间的组织关系,组合关系,(,整体,/,部分结构,、,组装结构,),表示事物的整体与部分之间的组合关系,关联关系,表示对象间相互依赖,、,相互作用关系,二、表示结构的图形符号,一般类,特殊类,特殊类,.,子类的公共属性和操作归属于一般类并被每一个子类共享,每一个子类都
31、继承,了一般类的特征。,一般类,(父类、基类、超类),特殊类,(子类),继承,(1),一般,/,特殊结构表示法,存户,一般/特殊结构举例,一般类,(父类、基类、超类),特殊类,(子类),继承,一个特殊类中的所有对象可继承一般类中的属性、服务、关系,账号,姓名,余额,存款,取款,支票存户,储蓄存户,利息率,一个整体对象可有不同类型的部分对象.,一个部分对象也可同时属于多个整体对象.,(2),整体,/,部分结构表示法,整 体,部分 1,部分 2,组合关系,注:是,object,间的关系,有传递性。,1,m,0,n,飞机,发动机,飞机,整体对象,可能 没有发动机,最多有四台发动机,用以实现聚合,、
32、组合,、,划分,发动机,部分对象,0,4,整体,/,部分结构,(,分类结构,),整体,/,部分结构是一种特定的连接,.,整体类中的一个对象,(,或称聚合,),是由各部分类的对象,(,或称成分,),构成的,.,这一结构是对象间的一种关系,.,微机,1+,电源,主机箱,键盘,监视器,鼠标,内存,CPU,硬盘,0,1,整体,/,部分结构表示法举例,关联关系反映对象之间相互依赖、相互作用的关系。,通常为,1:1,1:M,M:N,三种类型。,三、表示关联的图形符号,类1,连接名称,m n,类2,教师,指导论文,0,m 1,学生,表示法:,教师为学生,指导论文:,m,n,为阶,0至,m,类 1,连接名称
33、m n,类 1,连接,属性,1),关联关系,(,链属性,),的表示,允许实例连接带有一组属性,这些属性通过关联来描述,为之工作,1,m,工资,职务,雇主,雇员,个人,名字,身份证号,公司,名字,地址,题目,答辩时间,成绩,教师,学生,指导论文,0,m 1,1),关联关系,(,链属性,),示例,教师,1+,书,表示1个,或多个,2),阶数,(,重数,),:相关对象的数量,目录,文件名,文件,发送者,接受者,类,A,限定词,类,B,目录+文件名产生一个文件,3)限定,4)消息连接,例:,为之工作,管理 0,1,姓名,身份证号码,地址,员工,名字,号码,主要产品,地址,公司,职务,雇用,解雇,项目
34、名,预算,优先级,项目,产品名,成本,重量,产品,工人,经理,部门,部门名,主持,参加,1+,1+,1+,1+,1+,生产,四、一家公司的对象模型,77,动态模型,(,Dynamic Model,),要想对一个系统了解得比较清楚,还应当考察,在任何时刻对象及其,关系,的改变,。系统的这些涉及,时序,和,改变状况,用动态模型来描述。,动态模型着重于,描述系统瞬时的、行为化的控制逻辑,,其规定了对象模型中对象的合法的变化序列。,它包括两个图,一是,状态图,,一是,事件追踪图,。,一、状态图,状态图是一个,状态,和,事件,的网络,侧重于,描述每一类对象的动态,行为,。动态模型由多个状态图组成。对于,
35、每一个具有重要动态行为的类都有一个状态图,。状态图中的三要素含义如下:,(1)事件:,引发对象状态改变的控制信息,具有瞬时性;,(2)状态:,对象的属性所处的情形,具有可持续,;,(3),行为,:,对象要达到某种状态所做的操作,需要耗时。,Do:,活动1,一、状态图,(,续,),状态1,状态2,.,事件1条件1,结束,事件,初始,事件,空闲,可视菜单,右边按钮按下/显示弹出菜单,左边按钮弹起/擦除弹出菜单,光标移动/高亮菜单项,状态图举例:弹出菜单动作,状态图的表示方法:,注:当描述循环运行过程时,通常不关心是怎样启动的。,二、事件追踪图,事件追踪图,侧重于说明发生于系统执行过程中的一个特定“
36、场景”,。,场景,也叫做脚本,是完成,系统某个功能的一个事件序列,。,场景通常,起始于一个系统外部的输入事件,,,结束于一个系统外部的输出事件,,它可以,包括发生在这个期间的系统所有的内部事件,。,二、事件追踪图,举例:,挂断,切断,挂断,通 话,通 话,停止振铃,停止振铃,响应,振铃,铃 声,拨 号(3),拨 号(2),忙音结束,拨 号(8),忙音开始,拿起听筒,线,接 者,打 者,打 的事件追踪图,三、状态图与事件追踪图的关系,状态图叙述一个对象的个体行为,事件追踪图则给出多个对象所表现出来的集体行为,。它们从不同侧面来说明同一系统的行为。,例如,一个事件追踪图指出某一对象在接受一个事件之
37、后发出另一事件,同一行为在此对象的状态图中也应当有所表示。,78,功能模型,(,Function Model,),功能模型表明系统应该做什么,着重于系统内部数据的传送和处理,。,表示方法:,数据流图(,DFD,),。,功能模型由多个数据流图组成,它们指明从外部输入,通过操作和内部存储,直到外部输出,这整个的数据流情况。,功能模型定义“,做什么,”,动态模型定义“,何时做,”,对象模型定义“,对谁做,”。,79,本章重点,1),掌握,传统的软件开发方法的优缺点以及适用范围。,2),掌握,快速原型法的原理、特点、以及适用范围。,3),掌握,面向对象的原理、基本概念。,4),掌握,OMT,方法的三个模型(对象模型、动态模型与功能模型)的基本概念与用途。,感谢观看,






