1、第三篇 面向对象方法学 (Object - Oriented Methodology),第六章 面向对象的概念与模型第七章 面向对象的分析第八章 面向对象的设计第九章 面向对象的实现,第6章 面向对象的概念与模型,面向对象方法学概述面向对象方法学的主要优点面向对象的概念面向对象建模,重点:,难点:,面向对象方法学对象模型动态模型功能模型,6.1 面向对象方法学概述,一、传统方法学的缺点1、瀑布模型的缺点:僵化瀑布模型要求:生命周期各阶段间遵守严格的顺序。实际情况是:软件开发往往在反复实践中完成。瀑布模型要求:预先定义并“冻结”软件需求。实际情况是:某些系统的需求的一个逐渐明确的过程,且预先定义
2、的需求到软件完成时可能已经过时。,本质上是功能分解,以实现功能的过程为中心,而用户的需求变化主要是针对功能的。这就使基于过程的设计不易被理解;且功能变化往往引起结构变化较大,稳定性不好。系统有明确的边界定义,且系统结构依赖于系统边界的定义,这样的系统不易扩充和修改。数据与操作分开处理,可能造成软构件对具体应用环境的依赖,可重用性(reusability)较差。,2、SA - SD - SP 技术的缺点:,杭 州,北 京,Message,Send by method,对象Object,Object,= 数据Attribute,Attributes: location; employee; ,+
3、操作Method,Methods: send; sell; ,注意:Object内部的attributes不允许外部用户直接改动,只有当它提供了相应的服务method时,用户才能通过发送message来提请它执行。,我想把邮局搬到我家门口,多加几个邮递员,24小时都开门,对不起,本邮局不提供此类服务,唉,那就先送束花吧 Post_office.Send (request, payment),二、面向对象方法学(OOM)例:,特点:尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,OOM以数据或信息为主线,把数据和处理结合构成统一体 对象。这时程序不再是一系列工作
4、在数据上的函数集合,而是相互协作又彼此独立的对象的集合。,OOM的四要素:,对象(object):世界由对象组成。, 类 (class) :对象可划分为类;单个对象可视为某一类的实例 (instance)。,例: 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
5、 My_PO ; req_type My_request ; money_type My_payment ; My_PO.Send ( My_request, My_payment) ; , 继承(inheritance):类可分层,下层子类与上层父类有相同特征,称为继承。, 消息(message):对象间只能通过发送消息进行联系,外界不能处理对象的内部数据,只能通过消息请求它进行处理(如果它提供相应消息的话)。,OOM = Object+Class+Inheritance+Communication with messages,OOM:以object 为核心,强调对现实概念的模拟而不强调算法
6、。“面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统”。 Class:由特殊到一般的归纳(induction) Inheritance:由一般到特殊的演绎(deduction),6.2 面向对象方法学的主要优点,传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解。,1、与人类习惯的思维方式一致,OOM:以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。,传统方法:结构依赖于功能,不稳定。,2、稳定性好,6.2 面向对象方法学的主要优点,3、可重用性好,传统方法:通过建立标准函
7、数库来重用软构件。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要。,OOM:一个class所有的 instances 都可重用它的代码;由 inheritance 派生出的新的 class 可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。,6.2 面向对象方法学的主要优点,稳定性好:软件功能需求的变化不牵动全局,只需局部修改;Class 独立性强:只要修改不涉及class的对外接口,则内部修改完全不影响外部调用;Inheritance和多态性(polymorphism)使其很容易被修改和扩充;容易理解;,传统方法:可维护性是最令人头痛的问题。 OOM:从以下几方面改善了可
8、维护性 , 容易测试、调试。,4、可维护性好,6.2 面向对象方法学的主要优点,5、较易开发大型软件产品,较容易地把大型软件分解为独立的模块(对象)降低了开发难度和管理难度。,注:OOM并不是减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。OOM与Prototyping结合使用效果好。,6.2 面向对象方法学的主要优点,晨晖历历经年事,山里老虎动地秋。岁晚朝班惊紫气,花残锦豹悯皇州。,6.3 面向对象的基本概念,Object : = ID + Method + Attribute + Message,f1,f2,f3,fi,fn,fi(X
9、),S,gi(X,S),S,输出,输出,一、对象1、对象的形象表示,2、对象的定义,对象指的是一个独立的、异步的、并发的实体,它能“知道一些事情”(存储数据)、“做一些工作”(封装服务),并“与其它对象协同”(通过交换消息),从而完成(模块化)系统的所有功能。,3、对象的特点: 以数据为中心,不设与数据无关的操作; Object主动处理而不 被动地等待被处理,外部只能通过message请求操作; 具有黑盒性:外部操作时,无须知道该object内部的数据结构及算法; 具有并行性:不同object各自独立地处理自身数据,彼此间仅通过传递message完成通信; 模块独立性好:内聚强( )、耦合松(
10、 ),2、Instance:某个class描述的具体对象;3、Message: = object_ID. method_ID (parameter(s);4、Method: object能做的操作,亦称为service 、responsibility, 在 class 中须定义相应的代码;5、Attribute :object 的固有数据;,1、Class:具有相同数据和相同操作的一组对象;,二、其他概念,6、Encapsulation(封装),7、Inheritance:子类自动共享父类的attributes 和methods ,而不必重复定义。,特点: 若杭州人的 methods中有与中国
11、人的同名,则李士执行该 method 时以杭州人为准,不执行中国人中定义的同名 method。,3.基本概念, 传递性(transitivity):AB、BC AC 一个 class 继承了上层全部 classes 的一切性质。, 一个子类只 有 一 个父类称为单 继 承 (single inheritance), 一个子类可有多个父类称为多重继承(multiple inheritance)., 修改与扩充可以很容易地通过派生子类来完成。,3.基本概念,8、Polymorphism:不同层次的 classes 可共享一个method名,但按各自的方式来实现这种 method。,C+ 中定义了虚
12、函数(virtual function)来实现这一功能。即一个method有多个版本,运行时才决定执行哪一个。故亦称为动态联编(dynamic binding)或滞后联编(late binding),9、Overloading, Function (or parameter) overloading :不同函数共用一个名字,而调用参数的特征不同。例:,double avg (const double a , int size) ;double avg (const int a , int size) ;double avg (const double a , int size) ; doubl
13、e 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 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 average n” ; cout
14、avg(x, 3) “ double average n” ;, Operator overloading : 同一运算符 (operator)作用于不同类型的操作数 (operand) 上面。,3.基本概念,在编译(compile)阶段就决定了使用类型及执行代码,故意亦称为静态联编 (static binding)或先前联编 (early binding) 。,6.4. Object Modeling Technique (OMT),建立三种模型: 描述系统数据结构的对象模型(object model). 描述系统控制结构的动态模型(dynamic model). 描述系统功能的功能模型(f
15、unction model).,6.5 Object Model(对象模型),三个模型中最关键的一个模型,它的作用是描述系统的静态结构,包括构成系统的类和对象,它们的属性和操作,及它们之间的关系。图形符号有:,Inductive relation(归纳关系),注:子类is_a父类;一般与特殊关系;是class间的关系,直线端点进入虚框。,Combinative relation(组合关系/聚合关系),注:整体与部分的关系,是object间的关系,有传递性。,1, m,0, n,4. OMT,Correlative relation:(关联关系)是object间的关系,,一对多,链属性,1+,文
16、件名,限 定,发送消息以调用,4. OMT,状态图 事件 (event):引发 object 状态改变的控制信息(瞬时)。 状态(status):即 object 的 attributes 所处的情形(可持续)。 行为(action): Object 要达到某种 status 所做的操作(耗时)。,6.6 Dynamic Model(动态模型,表示系统瞬时的控制性质),表示方法:,例:电话的 状态图,事件追踪图,事件追踪图侧重于说明发生于系统执行过程中的一个特定“场景”。场景也叫做脚本,是完成系统某个功能的一个事件序列。场景通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件,它可以
17、包括发生在这个期间的系统所有的内部事件。,铃,铃,声,声,在,在,打,打,电,电,话,话,者,者,的,的,电,电,话,话,上,上,传,传,出,出,接,接,电,电,话,话,者,者,回,回,答,答,接,接,电,电,话,话,者,者,的,的,电,电,话,话,停,停,止,止,振,振,铃,铃,铃,铃,声,声,在,在,打,打,电,电,话,话,者,者,的,的,电,电,话,话,中,中,消,消,失,失,通,通,电,电,话,话,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,状态图与事件追踪图的关系,状态图叙述一个对象的个体行为,事件追踪图则给出多个对象所表现出来的集体行为。它们从不同侧面来
18、说明同一系统的行为。例如,一个事件追踪图指出某一对象在接受一个事件之后发出另一事件,同一行为在此对象的状态图中也应当有所表示。,6.7 Function Model(功能模型),功能模型表明,通过计算,从输入数据能得到什么样的输出数据,不考虑参加计算的数据按什么时序执行。功能模型由多个数据流图组成,它们指明从外部输入,通过操作和内部存储,直到外部输出,这整个的数据流情况。功能模型中所有的数据流图往往形成一 个层次结构。,业务数据流程图,功能模型定义“做什么”动态模型定义“何时做”对象模型定义“对谁做”,三种模型之间的关系,课后分析,通过对比传统方法学和面向对象方法学的优缺点,引入面向对象方法学的基本概念和特点,并且向同学们重点介绍了面向对象建模原理,为后续课程奠定良好的基础。,