《面向对象的概念与模型软件工程专业》由会员分享,可在线阅读,更多相关《面向对象的概念与模型软件工程专业(71页珍藏版)》请在金锄头文库上搜索。
1、1软件工程软件工程 2 软件工程软件工程面向对象的概念与模型面向对象的概念与模型3 开发方法有三种:开发方法有三种: 1、面向过程的方法面向过程的方法(又称结构化方法)(又称结构化方法) 2、面向对象的方法、面向对象的方法 3、面向数据的方法、面向数据的方法 面向对象的方法面向对象的方法包括以下几个方面:包括以下几个方面: 1、概念与模型、概念与模型 2、用户需求和需求分析、用户需求和需求分析 3、软件设计(概要、详细设计、数据库设计)、软件设计(概要、详细设计、数据库设计) 4、软件实现(编程、开发计划书)、软件实现(编程、开发计划书) 5、软件测试(测试用例)、软件测试(测试用例) 6、软
2、件项目管理(管理方法、原则和经验)、软件项目管理(管理方法、原则和经验) 7、软件发布与实施、软件发布与实施 8、软件培训与维护、软件培训与维护分八次分八次讲解讲解4主要讲解内容主要讲解内容1 1、面向对象方法概述、面向对象方法概述2 2、面向对象方法优点、面向对象方法优点3 3、面向对象的概念、面向对象的概念4 4、面向对象建模、面向对象建模5 5、对象模型、对象模型6 6、动态模型、动态模型7 7、功能模型、功能模型8 8、三种模型之间的关系、三种模型之间的关系5 面向过程的面向过程的处理处理方法方法就是把数据和处就是把数据和处理人为地分成两个独立的部分。理人为地分成两个独立的部分。 面向
3、对象面向对象(Object-Oriented,(Object-Oriented,缩写为缩写为OO)OO)方法:是尽可能模拟人类习惯的思维方法:是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接方式,使开发软件的方法与过程尽可能接近人类认识和解决问题的方法和过程,也近人类认识和解决问题的方法和过程,也就是使描述问题域与实现解法在结构上尽就是使描述问题域与实现解法在结构上尽可能一致。可能一致。 概述概述706 面向对象方法是一种以数据为主线,把面向对象方法是一种以数据为主线,把数据和处理相结合的方法。数据和处理相结合的方法。 它是把对象作为由数据及可以施加在这它是把对象作为由数据及可以
4、施加在这些数据上的操作所构成的统一体。它不是被些数据上的操作所构成的统一体。它不是被动地等待外界对它施加操作,它是处理的主动地等待外界对它施加操作,它是处理的主体,必须发消息请求对象主动地执行它的某体,必须发消息请求对象主动地执行它的某些操作,处理它的私有数据,而不能从外界些操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。直接对它的私有数据进行操作。7 面向对象方法学所提供的面向对象方法学所提供的“对象对象”概念,是让概念,是让软件开发者自己定义或选取解对象,然后把软件系软件开发者自己定义或选取解对象,然后把软件系统作为一系列离散的解对象的集合。这些解对象彼统作为一系列离散的解
5、对象的集合。这些解对象彼此间通过发送消息而相互作用,从而得出问题的解。此间通过发送消息而相互作用,从而得出问题的解。 它是一种新的思维方法,把程序看作是相互协它是一种新的思维方法,把程序看作是相互协作而又彼此独立的对象的集合。每个对象就像一个作而又彼此独立的对象的集合。每个对象就像一个微型程序,有自己的数据、操作、功能和目的。因微型程序,有自己的数据、操作、功能和目的。因此,这样的程序易于理解和维护。此,这样的程序易于理解和维护。708 概括地说,面向对象方法具有下述四个要点概括地说,面向对象方法具有下述四个要点: : 1 1、认为客观世界是由各种对象组成的,、认为客观世界是由各种对象组成的,
6、任何事物都是对象,复杂的对象可以由比较简任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。因此,面向对单的对象以某种方式组合而成。因此,面向对象的软件系统是由对象组成的,软件中的任何象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的元素都是对象,复杂的软件对象由比较简单的对象组合而成。对象组合而成。9 2 2、把所有对象都划分成各种对象类、把所有对象都划分成各种对象类( (简称为简称为类类) ),每个类都定义了一组数据和一组方法。数据,每个类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。因用于表示对象的静态属性,是对象
7、的状态信息。因此,每当建立该类的一个新实例时,就按照类中对此,每当建立该类的一个新实例时,就按照类中对数据的定义为这个新对象生成一组专用的数据,以数据的定义为这个新对象生成一组专用的数据,以便描述该对象独特的属性值。例如,屏幕上不同位便描述该对象独特的属性值。例如,屏幕上不同位置显示的半径不同的几个圆,虽然都是类的对象,置显示的半径不同的几个圆,虽然都是类的对象,但是,各自都有自己专用的数据,以便记录各自的但是,各自都有自己专用的数据,以便记录各自的圆心位置、半径等等。圆心位置、半径等等。10 3 3、按照子类、按照子类( (或称为派生类或称为派生类) )与父类与父类( (或称为基或称为基类类
8、) )的关系,把若干个对象类组成一个层次结构,的关系,把若干个对象类组成一个层次结构,在这种层次结构中,通常下层的派生类具有和上在这种层次结构中,通常下层的派生类具有和上层的基类相同的特性,这种现象称为继承。但是,层的基类相同的特性,这种现象称为继承。但是,如果在派生类中对某些特性又做了重新描述,则如果在派生类中对某些特性又做了重新描述,则在派生类中的这些特性将以新描述为准,也就是在派生类中的这些特性将以新描述为准,也就是说,低层的特性将屏蔽高层的同名特性。说,低层的特性将屏蔽高层的同名特性。7011 4 4、类是进行处理的主体,必须发消息、类是进行处理的主体,必须发消息请求它执行它的某个操作
9、,处理它的私有数请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行据,而不能从外界直接对它的私有数据进行操作。也就是说,一切局部于该对象的私有操作。也就是说,一切局部于该对象的私有信息,都被封装在该对象类的定义中,就好信息,都被封装在该对象类的定义中,就好像装在一个不透明的黑盒子中一样,在外界像装在一个不透明的黑盒子中一样,在外界是看不见的,更不能直接使用,这就是是看不见的,更不能直接使用,这就是“封封装性装性”。12主要优点主要优点1. 1. 与人类习惯的思维方法一致与人类习惯的思维方法一致 面向对象的软件技术以对象为核心,用这种技面向对象的软件技术以对象为核心,用
10、这种技术开发的软件系统由对象组成。术开发的软件系统由对象组成。它强调模拟现实世它强调模拟现实世界中的概念而不强调算法,它鼓励开发者在软件开界中的概念而不强调算法,它鼓励开发者在软件开发的绝大部分过程中都用应用领域的概念去思考。发的绝大部分过程中都用应用领域的概念去思考。 软件开发过程从始至终都是对问题领域进行自软件开发过程从始至终都是对问题领域进行自然的分解,确定需要使用的对象和类,建立类层次,然的分解,确定需要使用的对象和类,建立类层次,在类之间传递消息实现必要的联系。按照人们习惯在类之间传递消息实现必要的联系。按照人们习惯的思维方式建立起问题领域的模型,模拟客观世界。的思维方式建立起问题领
11、域的模型,模拟客观世界。70132. 2. 稳定性好稳定性好 是用对象模拟问题领域中的实体,以对象是用对象模拟问题领域中的实体,以对象间的联系刻画实体间的联系。软件系统结构是间的联系刻画实体间的联系。软件系统结构是根据问题领域的模型而建立起来的,不是基于根据问题领域的模型而建立起来的,不是基于对系统应完成的功能的分解,所以,当对系统对系统应完成的功能的分解,所以,当对系统的功能需求变化时并不会引起软件结构的整体的功能需求变化时并不会引起软件结构的整体变化,往往仅需要作一些局部性的修改。变化,往往仅需要作一些局部性的修改。70143. 3. 可重用性好可重用性好 在面向对象方法所使用的对象中,数
12、据在面向对象方法所使用的对象中,数据和操作是作为平等伙伴出现的。对象所固有和操作是作为平等伙伴出现的。对象所固有的封装性和信息隐藏机理,使得对象的内部的封装性和信息隐藏机理,使得对象的内部实现与外界隔离,具有较强的独立性。由此实现与外界隔离,具有较强的独立性。由此可见,对象类提供了比较理想的模块化机制可见,对象类提供了比较理想的模块化机制和比较理想的可重用的软件成分。和比较理想的可重用的软件成分。7015 4. 4. 较易开发大型软件产品较易开发大型软件产品 如何组织开发人员,往往是出现问题的主要如何组织开发人员,往往是出现问题的主要原因。用面向对象范型开发软件时,可以把一个原因。用面向对象范
13、型开发软件时,可以把一个大型产品看作是一系列本质上相互独立的小产品大型产品看作是一系列本质上相互独立的小产品来处理,这就不仅降低了开发的技术难度,而且来处理,这就不仅降低了开发的技术难度,而且也使得对开发工作的管理变得容易多了。也使得对开发工作的管理变得容易多了。 许多软件开发公司的经验都表明,当把面向许多软件开发公司的经验都表明,当把面向对象技术用于大型软件开发时,软件成本明显地对象技术用于大型软件开发时,软件成本明显地降低了,软件的整体质量也提高了。降低了,软件的整体质量也提高了。70165. 5. 可维护性好可维护性好 由于下述因素的存在,使得用面向对由于下述因素的存在,使得用面向对象方
14、法所开发的软件可维护性好。象方法所开发的软件可维护性好。 面向对象的软件稳定性比较好。面向对象的软件稳定性比较好。 面向对象的软件比较容易修改。面向对象的软件比较容易修改。 面向对象的软件比较容易理解。面向对象的软件比较容易理解。 易于测试和调试。易于测试和调试。7017 面向对象的概念面向对象的概念对象对象: : 它既可以是具体的物理实体的抽象,也可以它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的是人为的概念,或者是任何有明确边界和意义的东西。例如,一名职工、一家公司、一个窗口、东西。例如,一名职工、一家公司、一个窗口、一座图书馆、一本图书、贷款和借款等,都
15、可以一座图书馆、一本图书、贷款和借款等,都可以作为一个对象。总之,对象是对问题域中某个实作为一个对象。总之,对象是对问题域中某个实体的抽象,设立某个对象就反映了软件系统保存体的抽象,设立某个对象就反映了软件系统保存有关它的信息并具与它进行交互的能力。有关它的信息并具与它进行交互的能力。7018对象的定义对象的定义 1 1 对象是具有相同状态的一组操作的集合。对象是具有相同状态的一组操作的集合。 这个定义主要是从面向对象程序设计的角度看这个定义主要是从面向对象程序设计的角度看“对象对象”。对象的定义对象的定义 2 2 对象是对问题域中某个东西的抽象,这种抽象反对象是对问题域中某个东西的抽象,这种
16、抽象反映了系统保存有关这个东西的信息或与它交互的能映了系统保存有关这个东西的信息或与它交互的能力。也就是说,对象是对属性值和操作的封装。力。也就是说,对象是对属性值和操作的封装。 这个定义着重从信息模拟的角度看待这个定义着重从信息模拟的角度看待“对象对象”。19对象的定义对象的定义 3 3 对象对象=ID=MI其中:其中:IDID是对象的标识或名字是对象的标识或名字 MSMS是对象中的操作集合是对象中的操作集合 DSDS是对象的数据结构是对象的数据结构 MIMI是是对对象象受受理理的的消消息息名名集集合合( (即即对对外外接接口口) )20 1. 1. 类类(Class)(Class) 在面向
17、对象的软件技术中,在面向对象的软件技术中,“类类”就是对具就是对具有相同数据和相同操作的一组相似对象的定义,有相同数据和相同操作的一组相似对象的定义,也就是说,类是对具有相同属性和行为的一个或也就是说,类是对具有相同属性和行为的一个或多个对象的描述,通常在这种描述中也包括对怎多个对象的描述,通常在这种描述中也包括对怎样创建该类的新对象的说明。样创建该类的新对象的说明。2. 2. 实例实例(Instance)(Instance) 实例就是由某个特定的类所描述的一个具体的实例就是由某个特定的类所描述的一个具体的对象。对象。名词解释名词解释213. 3. 消息消息(Message)(Message)
18、 消息,就是要求某个对象执行在定义它的那消息,就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。通常,一个类中所定义的某个操作的规格说明。通常,一个消息由下述三部分组成:个消息由下述三部分组成: 接收消息的对象;接收消息的对象; 消息选择符消息选择符( (也称为消息名也称为消息名) ); 零个或多个变元。零个或多个变元。70224. 4. 方法方法(Method)(Method) 方法,就是对象所能执行的操作,也就是类方法,就是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。法,响应消息的方法。
19、5. 5. 属性属性(Attribute)(Attribute) 属性,就是类中所定义的数据,它是对客观属性,就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。有自己特有的属性值。236 6、封装、封装(Encapsulation)(Encapsulation) 封装就是把某个事物包起来,使外界不知道该事物的封装就是把某个事物包起来,使外界不知道该事物的具体内容。具体内容。 封装的条件封装的条件 有一个清晰的边界。所有私有数据和实现操作代码都有一个清晰的边界。所有私有数据和实现操作代码都被封装在这个边界内,从
20、外面看不见更不能直接访问。被封装在这个边界内,从外面看不见更不能直接访问。 有确定的接口有确定的接口( (即协议即协议) )。这些接口就是对象可以接受。这些接口就是对象可以接受的消息,只能通过向对象发送消息来使用它。的消息,只能通过向对象发送消息来使用它。 受保护的内部实现。实现对象功能的细节受保护的内部实现。实现对象功能的细节( (私有数据私有数据和代码和代码) )不能在定义该对象的类的范围外进行访问。不能在定义该对象的类的范围外进行访问。247. 7. 继承继承(Inheritance)(Inheritance) 在面向对象的软件技术中,继承是子类自动在面向对象的软件技术中,继承是子类自动
21、地共享基类中定义的数据和方法的机制。地共享基类中定义的数据和方法的机制。 当一个类只允许有一个父类时,也就是说,当一个类只允许有一个父类时,也就是说,当类等级为树形结构时,类的继承是单继承;当当类等级为树形结构时,类的继承是单继承;当允许一个类有多个父类时,类的继承是多重继承。允许一个类有多个父类时,类的继承是多重继承。25面向对象建模面向对象建模 为了更好地理解问题,人们常常采用建立问题为了更好地理解问题,人们常常采用建立问题模型的方法。所谓模型,就是为了理解事物而对事模型的方法。所谓模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种书面描述。通物作出的一种抽象,是对事物的一种书面
22、描述。通常,模型由一组图示符号和组织这些符号的规则组常,模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。成,利用它们来定义和描述问题域中的术语和概念。更进一步讲,模型是一种思考工具,利用这种工具更进一步讲,模型是一种思考工具,利用这种工具可以把知识规范地表示出来。可以把知识规范地表示出来。7026 通常需要建立三种形式的模型:通常需要建立三种形式的模型: 1 1、描述系统数据结构的、描述系统数据结构的对象模型对象模型(数据结构),(数据结构), 2 2、描述系统控制结构的、描述系统控制结构的动态模型动态模型(执行操作),(执行操作), 3 3、描述系统功能
23、的、描述系统功能的功能模型功能模型(完成数据值的变化)。(完成数据值的变化)。 这三种模型都涉及到数据、控制和操作等共同的概念,这三种模型都涉及到数据、控制和操作等共同的概念,只不过每种模型描述的侧重点不同。这三种模型从三个不只不过每种模型描述的侧重点不同。这三种模型从三个不同但又密切相关的角度模拟目标系统,全面地反映了对目同但又密切相关的角度模拟目标系统,全面地反映了对目标系统的需求。标系统的需求。27对象模型对象模型 对象模型表示静态的、结构化的系对象模型表示静态的、结构化的系统的统的“数据数据”性质。它是对模拟客观世性质。它是对模拟客观世界实体的对象以及界实体的对象以及对象彼此间的关系的
24、对象彼此间的关系的映射,描述了系统的静态结构。映射,描述了系统的静态结构。281 1、类、类 “类类”是一个专用术语,它的含义是是一个专用术语,它的含义是“一个类及属于该类的对象一个类及属于该类的对象” 。 名词与图形符号名词与图形符号(a)表示类表示类&对象的图形符号对象的图形符号 (b) 表示类的图形符号。表示类的图形符号。29 2 2、命名、命名 类的命名时应该遵守以下几条准则。类的命名时应该遵守以下几条准则。 (1) (1) 使用标准术语使用标准术语 (2) (2) 使用具有确切含义的名词使用具有确切含义的名词 (3) (3) 必要时用名词短语作名字必要时用名词短语作名字 总总之之,名
25、名字字应应该该是是富富于于描描述述性性的的、简简洁洁的的而而且无二义性的。且无二义性的。7030 在面向对象分析和设计中,结构表示了问在面向对象分析和设计中,结构表示了问题域中的复杂关系,是对客观世界实体相互间关题域中的复杂关系,是对客观世界实体相互间关系的抽象。类系的抽象。类& &对象间的关系可以概括为归对象间的关系可以概括为归纳关系、组合关系及关联关系。纳关系、组合关系及关联关系。 1 1、 归纳关系归纳关系 它反映了一个类与若干个互不相容的子类它反映了一个类与若干个互不相容的子类之间的分类关系。高层类之间的分类关系。高层类( (即基类即基类) )说明一般性的说明一般性的属性,低层类属性,
26、低层类( (即派生类即派生类) )说明特殊属性。它继承说明特殊属性。它继承了在高层类中定义的属性和服务。了在高层类中定义的属性和服务。31 2 2、 组合关系组合关系 组合关系就是组合关系就是“整体整体部分部分”关系,它反映了对象关系,它反映了对象之间的构成关系。组合关系也称为聚集关系。之间的构成关系。组合关系也称为聚集关系。 组合关系具有的最重要的性质是传递性。也就是组合关系具有的最重要的性质是传递性。也就是说,如果说,如果A A是是B B的一部分,的一部分,B B是是C C的一部分,则的一部分,则A A也是也是C C的的一部分。一部分。 当组合关系有多个层次时,可以用一棵简单的聚当组合关系
27、有多个层次时,可以用一棵简单的聚集树来表示它。聚集树是多级组合关系的一种简化表集树来表示它。聚集树是多级组合关系的一种简化表示形式。示形式。32描绘教材结构的聚集树333. 3. 关联关系关联关系 关联关系反映对象之间相互依赖、相互作关联关系反映对象之间相互依赖、相互作用的关系。通常把两类对象之间的二元关系再用的关系。通常把两类对象之间的二元关系再细分为一对一细分为一对一(11)(11)、一对多、一对多(1M)(1M)和多对多和多对多(MN)(MN)等三种基本类型,类型的划分依据参与等三种基本类型,类型的划分依据参与关联的对象的数目。关联的对象的数目。34 (3) (3) 链属性:就是关联链的
28、性质。链属性:就是关联链的性质。 (4) (4) 限定限定 一个受限的关联由两个对象及一个限定词组成。一个受限的关联由两个对象及一个限定词组成。可以把限定词看作是一种特殊的链属性。利用限定词可以把限定词看作是一种特殊的链属性。利用限定词通常能有效地减少关联的阶数。通常能有效地减少关联的阶数。 (5) (5) 消息连接消息连接 消息连接的表示符号,是从消息发送者指向消息消息连接的表示符号,是从消息发送者指向消息接收者的箭头线。接收者的箭头线。35例:例:一家公司的对象模型7036与上图对应的ER图37 建立对象模型建立对象模型1 1、确定类、确定类& &对象对象 类类& &对象是在问题域中客观存
29、在的,系对象是在问题域中客观存在的,系统分析员的主要任务,就是通过分析找出这些统分析员的主要任务,就是通过分析找出这些类类& &对象。首先,找出所有候选的类对象。首先,找出所有候选的类& &对对象;然后,从候选的类象;然后,从候选的类& &对象中筛选掉不正对象中筛选掉不正确的或不必要的。确的或不必要的。38 银行、自动取款机、系统、银行、自动取款机、系统、中央计算机、分行计算机、中央计算机、分行计算机、柜员终端、柜员终端、网络、网络、总行、分行、总行、分行、软件、成本、市、街道、软件、成本、市、街道、营业厅、储蓄所、营业厅、储蓄所、柜员、储户、柜员、储户、现金、支票、现金、支票、账户、事务、账
30、户、事务、现金兑换卡、现金兑换卡、余额、磁卡、分行代码、卡号、用户、副本、余额、磁卡、分行代码、卡号、用户、副本、信息、密码、类型、取款额、账单以及访问。信息、密码、类型、取款额、账单以及访问。 在需求在需求陈述中不会一个不漏地写出问题域中所有有关的类陈述中不会一个不漏地写出问题域中所有有关的类& &对象,因此,分析员应该根据领域知识或常识进一步把隐对象,因此,分析员应该根据领域知识或常识进一步把隐含的类含的类& &对象提取出来。例如,在对象提取出来。例如,在ATMATM系统的需求陈述系统的需求陈述中还没写中还没写“通信链路通信链路”和和“事务日志事务日志”。以以ATMATM系统为例系统为例3
31、9 筛选出正确的类筛选出正确的类& &对象对象 显然,仅通过一个简单、机械的过程不可能正确显然,仅通过一个简单、机械的过程不可能正确地完成分析工作。非正式分析仅仅帮助我们找到一些地完成分析工作。非正式分析仅仅帮助我们找到一些候选的类候选的类& &对象,接下来应该严格考察每个候选对对象,接下来应该严格考察每个候选对象,从中去掉不正确的或不必要的,仅保留确实应该象,从中去掉不正确的或不必要的,仅保留确实应该记录其信息或需要其提供服务的那些对象。记录其信息或需要其提供服务的那些对象。7040 筛选时主要依据下列标准,删除不正确或不必要筛选时主要依据下列标准,删除不正确或不必要的类的类& &对象。对象
32、。 (1) (1) 冗余、冗余、(2) (2) 无关、无关、(3) (3) 笼统、笼统、(4) (4) 属性、属性、(5) (5) 操作、操作、(6) (6) 实现实现 在在ATMATM系统的例子中,经过初步筛选,剩下下列类系统的例子中,经过初步筛选,剩下下列类& &对象:对象:ATMATM、中央计算机、分行计算机、柜员终端、中央计算机、分行计算机、柜员终端、总行、分行、柜员、储户、账户、事务和现金兑换卡。总行、分行、柜员、储户、账户、事务和现金兑换卡。412 2、确定关联、确定关联 两个或多个对象之间的相互依赖、相互作用两个或多个对象之间的相互依赖、相互作用的关系就是关联。分析确定关联,能促
33、使分析考虑的关系就是关联。分析确定关联,能促使分析考虑问题域的边缘情况,有助于发现那些尚未被发现的问题域的边缘情况,有助于发现那些尚未被发现的类类& &对象。在分析确定关联的过程中,不必花对象。在分析确定关联的过程中,不必花过多的精力去区分关联和聚集。事实上,聚集不过过多的精力去区分关联和聚集。事实上,聚集不过是一种特殊的关联,是关联的一个特例。是一种特殊的关联,是关联的一个特例。42初步确定关联初步确定关联 在初步确定关联时,大多数关联可以通过在初步确定关联时,大多数关联可以通过直接提取需求陈述中的动词词组而得出。通过分直接提取需求陈述中的动词词组而得出。通过分析需求陈述,还能发现一些在陈述
34、中隐含的关联析需求陈述,还能发现一些在陈述中隐含的关联。最后,分析还应该与用户及领域专家讨论问题。最后,分析还应该与用户及领域专家讨论问题域实体间的相互依赖、相互作用关系,根据领域域实体间的相互依赖、相互作用关系,根据领域知识再进一步补充一些关联。知识再进一步补充一些关联。43筛选筛选 经初步分析得出的关联只能作为候选的关联,还经初步分析得出的关联只能作为候选的关联,还需经过进一步筛选,以去掉不正确的或不必要的关联。需经过进一步筛选,以去掉不正确的或不必要的关联。筛选时主要根据下述标准删除候选的关联。筛选时主要根据下述标准删除候选的关联。 (1) (1) 已删去的类之间的关联已删去的类之间的关
35、联 (2) (2) 与问题无关的或应在实现阶段考虑的关联与问题无关的或应在实现阶段考虑的关联 (3) (3) 瞬时事件瞬时事件(4) (4) 三元关联三元关联(5) (5) 派生关联派生关联44 ATM系统原始对象图453 3、划分主题、划分主题在开发大型、复杂系统的过程中,为了降低复杂在开发大型、复杂系统的过程中,为了降低复杂程度,人们习惯于把系统再进一步划分成几个程度,人们习惯于把系统再进一步划分成几个不同的主题,也就是在概念上把系统包含的内不同的主题,也就是在概念上把系统包含的内容分解成若干个范畴。容分解成若干个范畴。46 ATM系统划分成三个主题474 4、确定属性、确定属性 一般说来
36、,确定属性的过程包括分析和选择两一般说来,确定属性的过程包括分析和选择两个步骤。个步骤。 属性的确定与问题域和目标系统的任务有关。属性的确定与问题域和目标系统的任务有关。应该仅考虑与具体应用直接相关的属性,不要考虑应该仅考虑与具体应用直接相关的属性,不要考虑那些超出所要解决的问题范围的属性。在分析过程那些超出所要解决的问题范围的属性。在分析过程中应该首先找出最重要的属性,以后再逐渐把其余中应该首先找出最重要的属性,以后再逐渐把其余属性增添进去。在分析阶段不要考虑那些纯粹用于属性增添进去。在分析阶段不要考虑那些纯粹用于实现的属性。实现的属性。7048 选择选择 认真考察经初步分析而确定下来的那些
37、属性,从认真考察经初步分析而确定下来的那些属性,从中删掉不正确的或不必要的属性。通常有以下几种常中删掉不正确的或不必要的属性。通常有以下几种常见情况。见情况。 (1)(1)误把对象当作属性误把对象当作属性 (2)(2)把链属性误作为属性把链属性误作为属性 (3)(3)把限定误当成属性把限定误当成属性 (4)(4)误把内部状态当成了属性误把内部状态当成了属性 (5)(5)过于细化过于细化 (6)(6)存在不一致的属性存在不一致的属性495 5、识别继承关系、识别继承关系 一般说来,有用两种方式建立继承一般说来,有用两种方式建立继承( (即归纳即归纳) )关系。关系。 自底向上:抽象出现有类的共同
38、性质泛化出父类,自底向上:抽象出现有类的共同性质泛化出父类,这个过程实质上模拟了人类归纳思维过程。这个过程实质上模拟了人类归纳思维过程。 自顶向下:把现有类细化成更具体的子类,这模拟自顶向下:把现有类细化成更具体的子类,这模拟了人类的演绎思维过程。了人类的演绎思维过程。506 6、反复修改、反复修改 仅仅经过一次建模过程很难得到完全正确仅仅经过一次建模过程很难得到完全正确的对象模型。事实上,软件开发过程就是一个的对象模型。事实上,软件开发过程就是一个多次反复修改、逐步完善的过程。发现了模型多次反复修改、逐步完善的过程。发现了模型的缺陷,都必须返回到前期阶段进行修改。由的缺陷,都必须返回到前期阶
39、段进行修改。由于面向对象的概念和符号在整个开发过程中都于面向对象的概念和符号在整个开发过程中都是一致的,因此远比使用结构化分析和设计技是一致的,因此远比使用结构化分析和设计技术更容易实现反复修改及逐步完善的过程。术更容易实现反复修改及逐步完善的过程。51 建立动态模型建立动态模型 建立动态模型的第一步,是编写典型交互行为建立动态模型的第一步,是编写典型交互行为的脚本。虽然脚本中不可能包括每个偶然事件,的脚本。虽然脚本中不可能包括每个偶然事件,但是,至少必须保证不遗漏常见的交互行为。接但是,至少必须保证不遗漏常见的交互行为。接下来从脚本中提取出事件,确定触发每个事件的下来从脚本中提取出事件,确定
40、触发每个事件的动作对象以及接受事件的目标对象。第三步,排动作对象以及接受事件的目标对象。第三步,排列事件发生的次序,确定每个对象可能有的状态列事件发生的次序,确定每个对象可能有的状态及状态间的转换关系,并用状态图描绘它们。最及状态间的转换关系,并用状态图描绘它们。最后,比较各个对象的状态图,检查它们之间的一后,比较各个对象的状态图,检查它们之间的一致性,确保事件之间的匹配。致性,确保事件之间的匹配。70521 1、编写脚本、编写脚本 所谓所谓“脚本脚本”,原意是指,原意是指“表演戏曲、话剧,拍摄电影、电表演戏曲、话剧,拍摄电影、电视剧等所依据的本子,里面记载台词、故事情节等视剧等所依据的本子,
41、里面记载台词、故事情节等”。在建立。在建立动态模型的过程中,脚本是指系统在某一执行期间内出现的一动态模型的过程中,脚本是指系统在某一执行期间内出现的一系列事件。脚本描述用户系列事件。脚本描述用户( (或其他外部设备或其他外部设备) )与目标系统之间的与目标系统之间的一个或多个典型的交互过程,以便对目标系统的行为有更具体一个或多个典型的交互过程,以便对目标系统的行为有更具体的认识。编写脚本的目的,是保证不遗漏重要的交互步骤,它的认识。编写脚本的目的,是保证不遗漏重要的交互步骤,它有助于确保整个交互过程的正确性和清晰性。有助于确保整个交互过程的正确性和清晰性。 编写脚本时,首先编写正常情况的脚本。
42、然后,考虑特殊编写脚本时,首先编写正常情况的脚本。然后,考虑特殊情况,例如输入或输出的数据为最大值情况,例如输入或输出的数据为最大值( (或最小值或最小值) )。最后,考。最后,考虑出错情况,例如,输入的值为非法值或响应失败。虑出错情况,例如,输入的值为非法值或响应失败。53 画事件跟踪图画事件跟踪图 完整、正确的脚本为建立动态模型奠定了完整、正确的脚本为建立动态模型奠定了必要的基础。但是,用自然语言书写的脚本往必要的基础。但是,用自然语言书写的脚本往往不够简明,而且有时在阅读时会有二义性。往不够简明,而且有时在阅读时会有二义性。为了有助于建立动态模型,通常在画状态图之为了有助于建立动态模型,
43、通常在画状态图之前先画出事件跟踪图。为此首先需要进一步明前先画出事件跟踪图。为此首先需要进一步明确事件及事件与对象的关系。确事件及事件与对象的关系。54 1 1、确定事件、确定事件 应该仔细分析每个脚本,以便从中提取出所有外部事件。应该仔细分析每个脚本,以便从中提取出所有外部事件。事件包括系统与用户交互的所有信号、输入、输出、中断事件包括系统与用户交互的所有信号、输入、输出、中断和动作等。从脚本中容易找出正常事件,但是,应该小心和动作等。从脚本中容易找出正常事件,但是,应该小心仔细,不要遗漏了异常事件和出错条件。仔细,不要遗漏了异常事件和出错条件。传递信息的对象的动作也是事件。传递信息的对象的
44、动作也是事件。 经过分析,应该区分出每类事件的发送对象和接受对象。经过分析,应该区分出每类事件的发送对象和接受对象。一类事件相对它的发送对象来说是输出事件,但是相对它一类事件相对它的发送对象来说是输出事件,但是相对它的接受对象来说则是输入事件。有时一个对象把事件发送的接受对象来说则是输入事件。有时一个对象把事件发送给自己,在这种情况下,该事件既是输出事件又是输入事给自己,在这种情况下,该事件既是输出事件又是输入事件。件。55 2 2、画出事件跟踪图、画出事件跟踪图 从脚本中提取出各类事件并确定了每类事件的发送对象和从脚本中提取出各类事件并确定了每类事件的发送对象和接受对象之后,就可以用事件跟踪
45、图把事件序列以及事件与对接受对象之后,就可以用事件跟踪图把事件序列以及事件与对象的关系,形象、清晰地表示出来。象的关系,形象、清晰地表示出来。 在事件跟踪图中,一条竖线代表一个类在事件跟踪图中,一条竖线代表一个类& &对象,每个事对象,每个事件用一条水平的箭头线表示,箭头方向从事件的发送对象指向件用一条水平的箭头线表示,箭头方向从事件的发送对象指向接受对象。时间从上向下递增,也就是说,画在最上面的水平接受对象。时间从上向下递增,也就是说,画在最上面的水平箭头线代表最先发生的事件,画在最下面的水平箭头线所代表箭头线代表最先发生的事件,画在最下面的水平箭头线所代表的事件最晚发生。箭头线之间的间距并
46、没有具体含义,图中仅的事件最晚发生。箭头线之间的间距并没有具体含义,图中仅用箭头线在垂直方向上的相对位置表示事件发生的先后,并不用箭头线在垂直方向上的相对位置表示事件发生的先后,并不表示两个事件之间的精确时间差。表示两个事件之间的精确时间差。56ATM系统正常情况脚本的事件跟踪图系统正常情况脚本的事件跟踪图57 3 3、画状态图画状态图 通常,用一张状态图描绘一类对象的行为,它通常,用一张状态图描绘一类对象的行为,它确定了由事件序列引出的状态序列。但是,也不是确定了由事件序列引出的状态序列。但是,也不是任何一个类任何一个类& &对象都需要有一张状态图描绘它的对象都需要有一张状态图描绘它的行为。
47、很多对象仅响应与过去历史无关的那些输入行为。很多对象仅响应与过去历史无关的那些输入事件,或者把历史作为不影响控制流的参数。对于事件,或者把历史作为不影响控制流的参数。对于这类对象来说,状态图是不必要的。系统分析员应这类对象来说,状态图是不必要的。系统分析员应该集中精力仅考虑具有重要交互行为的那些类。该集中精力仅考虑具有重要交互行为的那些类。58 从一张事件跟踪图出发画状态图时,应该集中从一张事件跟踪图出发画状态图时,应该集中精力仅考虑影响一类对象的事件,也就是说,仅考精力仅考虑影响一类对象的事件,也就是说,仅考虑事件跟踪图中指向某条竖线的那些箭头线。把这虑事件跟踪图中指向某条竖线的那些箭头线。
48、把这些事件作为状态图中的有向边些事件作为状态图中的有向边( (即箭头线即箭头线) ),边上标,边上标以事件名。两个事件之间的间隔就是一个状态。一以事件名。两个事件之间的间隔就是一个状态。一般说来,如果同一个对象对相同事件的响应不同,般说来,如果同一个对象对相同事件的响应不同,则这个对象处在不同状态。应该尽量给每个状态取则这个对象处在不同状态。应该尽量给每个状态取个有意义的名字。通常,从事件跟踪图中当前考虑个有意义的名字。通常,从事件跟踪图中当前考虑的竖线射出的箭头线,是这条竖线代表的对象达到的竖线射出的箭头线,是这条竖线代表的对象达到某个状态时所做的行为某个状态时所做的行为( (往往是引起另一
49、类对象状态往往是引起另一类对象状态转换的事件转换的事件) )。7059 根据一张事件跟踪图画出状态图之后,再把其根据一张事件跟踪图画出状态图之后,再把其他脚本的事件跟踪图合并到已画出的状态图中。为他脚本的事件跟踪图合并到已画出的状态图中。为此需在事件跟踪图中找出以前考虑过的脚本的分支此需在事件跟踪图中找出以前考虑过的脚本的分支点点( (例如例如“验证账户验证账户”就是一个分支点,因为验证的就是一个分支点,因为验证的结果可能是结果可能是“账户有效账户有效”,也可能是,也可能是“无效账户无效账户”) ),然后把其他脚本中的事件序列并入已有的状态图,然后把其他脚本中的事件序列并入已有的状态图中,作为
50、一条可选的路径。中,作为一条可选的路径。 考虑完正常事件之后再考虑边界情况和特殊情考虑完正常事件之后再考虑边界情况和特殊情况,其中包括在不适当时候发生的事件况,其中包括在不适当时候发生的事件( (例如,系统例如,系统正在处理某个事务时,用户要求取消该事务正在处理某个事务时,用户要求取消该事务) )。7060ATM类的状态图61 建立功能模型建立功能模型 1 1、画出基本系统模型图、画出基本系统模型图 基本系统模型由若干个数据源点基本系统模型由若干个数据源点/ /终点,及一个终点,及一个处理框组成,这个处理框代表了系统加工、变换数处理框组成,这个处理框代表了系统加工、变换数据的整体功能。基本系统
51、模型指明了目标系统的边据的整体功能。基本系统模型指明了目标系统的边界。由数据源点输入的数据和输出到数据终点的数界。由数据源点输入的数据和输出到数据终点的数据,是系统与外部世界之间的交互事件的参数。据,是系统与外部世界之间的交互事件的参数。7062ATM系统的基本系统模型63 2 2、画出功能级数据流图、画出功能级数据流图 把基本系统模型中单一的处理框分解成若干个处把基本系统模型中单一的处理框分解成若干个处理框,以描述系统加工、变换数据的基本功能,就得理框,以描述系统加工、变换数据的基本功能,就得到功能级数据流图。到功能级数据流图。 3 3、描述处理框功能、描述处理框功能 把数据流图分解细化到一
52、定程度之后,就应该描把数据流图分解细化到一定程度之后,就应该描述图中各个处理框的功能。应该注意的是,要着重描述图中各个处理框的功能。应该注意的是,要着重描述每个处理框所代表的功能,而不是实现功能的具体述每个处理框所代表的功能,而不是实现功能的具体算法。算法。7064ATM系统的功能级数据流图65功能模型功能模型 功能模型表示变化的系统的功能模型表示变化的系统的“功能功能”性质,它指明了系统应该性质,它指明了系统应该“做什么做什么”,因此更直接地反映了用户对目标系统的因此更直接地反映了用户对目标系统的需求。需求。 描述系统功能的功能模型描述系统功能的功能模型 (完成数据值的变化)(完成数据值的变
53、化)7066 在面向对象方法学中,对象模型是最基本最重要的,它在面向对象方法学中,对象模型是最基本最重要的,它为其他两种模型奠定了基础。为其他两种模型奠定了基础。 1 1、针对每个类建立的动态模型,描述了类实例的生命周、针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。期或运行周期。 2 2、状态转换驱使行为发生,这些行为在数据流图中被映、状态转换驱使行为发生,这些行为在数据流图中被映射成处理,它们同时与对象模型中的服务相对应。射成处理,它们同时与对象模型中的服务相对应。 3 3、功能模型中的处理,对应于对象模型中类、功能模型中的处理,对应于对象模型中类& &对象所对象所提供的服务。
54、通常,在顶层数据流图中的处理,对应于复杂提供的服务。通常,在顶层数据流图中的处理,对应于复杂对象提供的服务;在低层数据流图中的处理,对应于更基本对象提供的服务;在低层数据流图中的处理,对应于更基本的对象的对象( (基本对象是复杂对象的组成部分基本对象是复杂对象的组成部分) )的服务。有时一个的服务。有时一个处理对应多个服务,也有一个服务对应多个处理的时候。处理对应多个服务,也有一个服务对应多个处理的时候。三种模型之间的关系三种模型之间的关系7067 4 4、功能模型中的数据存储,以及数据的源点、功能模型中的数据存储,以及数据的源点/ /终点终点( (在功在功能模型中称为动作对象能模型中称为动作
55、对象) ),通常是对象模型中的对象。,通常是对象模型中的对象。 5 5、功能模型中的数据流,往往是对象模型中的属性值,、功能模型中的数据流,往往是对象模型中的属性值,也可能是整个对象。也可能是整个对象。 6 6、功能模型中的处理可能产生动态模型中的事件。、功能模型中的处理可能产生动态模型中的事件。 7 7、对象模型描述了功能模型中的动作对象、数据存储以、对象模型描述了功能模型中的动作对象、数据存储以及数据流的结构。及数据流的结构。7068 小结小结 1 1、近年来,面向对象方法学日益受到人们的重视,特、近年来,面向对象方法学日益受到人们的重视,特别是在用这种方法开发大型软件产品时,可以把该产品
56、看别是在用这种方法开发大型软件产品时,可以把该产品看作是一系列本质上相互独立的小产品,这就不仅降低了开作是一系列本质上相互独立的小产品,这就不仅降低了开发工作的技术难度,而且也使得对开发工作的管理变得容发工作的技术难度,而且也使得对开发工作的管理变得容易了。因此,对于大型软件产品来说,面向对象范型明显易了。因此,对于大型软件产品来说,面向对象范型明显优于结构化范型。此外,使用面向对象范型能够开发出稳优于结构化范型。此外,使用面向对象范型能够开发出稳定性好、可重用性好和可维护性好的软件,这些都是面向定性好、可重用性好和可维护性好的软件,这些都是面向对象方法学的突出优点。对象方法学的突出优点。69
57、 2 2、面向对象方法学比较自然地模拟了人类、面向对象方法学比较自然地模拟了人类认识客观世界的思维方式,它所追求的目标和遵认识客观世界的思维方式,它所追求的目标和遵循的基本原则,就是使描述问题的问题空间和在循的基本原则,就是使描述问题的问题空间和在计算机中解决问题的解空间,在结构上尽可能一计算机中解决问题的解空间,在结构上尽可能一致。致。 小结小结70 3 3、面向对象方法学认为,客观世界由对象组成。任何、面向对象方法学认为,客观世界由对象组成。任何事物都是对象,每个对象都有自己的内部状态和运动规律,事物都是对象,每个对象都有自己的内部状态和运动规律,不同对象彼此间通过消息相互作用、相互联系,
58、从而构成不同对象彼此间通过消息相互作用、相互联系,从而构成了我们所要分析和构造的系统。系统中每个对象都属于一了我们所要分析和构造的系统。系统中每个对象都属于一个特定的对象类。类是对具有相同属性和行为的一组相似个特定的对象类。类是对具有相同属性和行为的一组相似对象的定义。应该按照子类、父类的关系,把众多的类进对象的定义。应该按照子类、父类的关系,把众多的类进一步组织成一个层次系统,这样做了之后,如果不加特殊一步组织成一个层次系统,这样做了之后,如果不加特殊描述,则处于下一层次上的对象可以自动继承位于上一层描述,则处于下一层次上的对象可以自动继承位于上一层次的对象的属性和行为。次的对象的属性和行为
59、。 小结小结71小小 结结 4、用面向对象观点建立系统的模型,能够促进和加深对系、用面向对象观点建立系统的模型,能够促进和加深对系统的理解,有助于开发出更容易理解、更容易维护的软件。通统的理解,有助于开发出更容易理解、更容易维护的软件。通常,人们从三个互不相同然而又密切相关的角度建立起三种不常,人们从三个互不相同然而又密切相关的角度建立起三种不同的模型。它们分别是描述系统静态结构的对象模型、描述系同的模型。它们分别是描述系统静态结构的对象模型、描述系统控制结构的动态模型、以及描述系统计算结构的功能模型。统控制结构的动态模型、以及描述系统计算结构的功能模型。其中,对象模型是最基本、最核心、最重要的。其中,对象模型是最基本、最核心、最重要的。 本章所讲述的面向对象方法及定义的概念和表示符号,可以本章所讲述的面向对象方法及定义的概念和表示符号,可以适用于整个软件开发过程。软件开发人员无须像用结构分析、适用于整个软件开发过程。软件开发人员无须像用结构分析、设计技术那样,在开发过程的不同阶段转换概念和表示符号。设计技术那样,在开发过程的不同阶段转换概念和表示符号。实际上,用面向对象方法开发软件时,阶段的划分是十分模糊实际上,用面向对象方法开发软件时,阶段的划分是十分模糊的,通常在分析、设计和实现等阶段间多次迭代。的,通常在分析、设计和实现等阶段间多次迭代。