《面向对象分析与设计精选PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《面向对象分析与设计精选PPT讲稿.ppt(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、关于面向对象分析与设计第一页,讲稿共七十页哦第第1章章 面向对象技术概论面向对象技术概论本章的学习目的本章的学习目的 由于由于面向对象技术比传统的软件开发技术面向对象技术比传统的软件开发技术能更自然和有效地开发软件,解决软件危机,能更自然和有效地开发软件,解决软件危机,因此它因此它已成为现代软件企业广为采用的一项有效已成为现代软件企业广为采用的一项有效技术,所以当今学习面向对象技术具有非常重要技术,所以当今学习面向对象技术具有非常重要的意义。的意义。教学教学目的是使学生目的是使学生通过本章的通过本章的学习学习能够理解和能够理解和掌握掌握面向对象技术的基本概念和基本知识以及面向对象技术的基本概念
2、和基本知识以及基本思想方法,为后续进一步学习面向对象的基本思想方法,为后续进一步学习面向对象的分析、设计和编程奠定良好的基础。分析、设计和编程奠定良好的基础。第二页,讲稿共七十页哦u本章的学习内容本章的学习内容了解面向对象软件开发方法的发展历程及其了解面向对象软件开发方法的发展历程及其重要意义重要意义了解面向对象技术的基本概念了解面向对象技术的基本概念了解面向对象技术的特点和优点了解面向对象技术的特点和优点初步了解面向对象分析与设计的一般方法初步了解面向对象分析与设计的一般方法第三页,讲稿共七十页哦 1.1 1.1 面向对象方法的提出面向对象方法的提出(1)软件概念的提出)软件概念的提出 二十
3、世纪四十年代诞生了世界上第一台电子计算机二十世纪四十年代诞生了世界上第一台电子计算机E ENIAC,NIAC,至今才半个来世纪至今才半个来世纪,聚然间发生了巨大而深刻的计聚然间发生了巨大而深刻的计算机革命。计算机科学技术已经成为一门系统完善、复算机革命。计算机科学技术已经成为一门系统完善、复杂深刻的工程技术学科,它的应用已从国防、科技、工杂深刻的工程技术学科,它的应用已从国防、科技、工业、农业渗透到人类生活的各个方面,无处不在。出现业、农业渗透到人类生活的各个方面,无处不在。出现了各种各样的计算机,包括巨型机、大型机、小型机、了各种各样的计算机,包括巨型机、大型机、小型机、个人电脑、工作站和网
4、络等等,五花八门,应有尽有。个人电脑、工作站和网络等等,五花八门,应有尽有。但是,无论怎样尖端,怎样高深,一个计算机系统都是但是,无论怎样尖端,怎样高深,一个计算机系统都是由硬件和软件两部分构成。由硬件和软件两部分构成。人们在第一台电子计算机上就已实现了冯人们在第一台电子计算机上就已实现了冯.诺依曼提出诺依曼提出的的存储程序思想存储程序思想,即将程序和数据存储在计算机内存中即将程序和数据存储在计算机内存中,用用程序来控制计算机的运行。这种程序来控制计算机的运行。这种程序、数据及相关文档程序、数据及相关文档 统统称为称为软件(软件(software)software)。由于计算机是在程序的控制下
5、运。由于计算机是在程序的控制下运行,所以软件成为了计算机的灵魂行,所以软件成为了计算机的灵魂,是组成计算机系统不是组成计算机系统不可缺少的部分。可缺少的部分。第四页,讲稿共七十页哦(2)软件开发方法的发展)软件开发方法的发展 计算机诞生之后,计算机技术一直处于高速发展计算机诞生之后,计算机技术一直处于高速发展状态,计算机科学技术的发展由原来只依靠硬件状态,计算机科学技术的发展由原来只依靠硬件的发展逐渐变为更多地依靠软件的发展。事实上,的发展逐渐变为更多地依靠软件的发展。事实上,软件技术的发展经历了多代历程。软件技术的发展经历了多代历程。l第一代第一代(20(20世纪世纪50-6050-60年代
6、年代),是以,是以FORTRANFORTRAN和和ALGOLALGOL等编程语言为标志的算法技术时代。等编程语言为标志的算法技术时代。那时,程序设计那时,程序设计全靠人们发挥创造才能,全靠技巧和窍门。基于这种全靠人们发挥创造才能,全靠技巧和窍门。基于这种算法技术的软件生产率非常低,程序很难看懂,甚至算法技术的软件生产率非常低,程序很难看懂,甚至程序员自己写的程序过一段时间后自己也看不懂,这程序员自己写的程序过一段时间后自己也看不懂,这给软件的修改、维护带来极大的困难。于是给软件的修改、维护带来极大的困难。于是6060年代年代末出现了末出现了“软件危机软件危机”。第五页,讲稿共七十页哦l第二代第
7、二代(20(20世纪世纪7070年代末开始到年代末开始到8080年代盛行的年代盛行的),以,以PASCALPASCAL、COBOLCOBOL等编程语言和关系数据库管理系统为标志的结构化系统分等编程语言和关系数据库管理系统为标志的结构化系统分析和设计技术。析和设计技术。由于早期的软件比较简单,开发一个软件就等同于编一个程由于早期的软件比较简单,开发一个软件就等同于编一个程序,算法设计出来了就解决了问题。那时程序处理的数据也很序,算法设计出来了就解决了问题。那时程序处理的数据也很杂乱,数据结构不统一,实现相同功能的不同程序处理的数据杂乱,数据结构不统一,实现相同功能的不同程序处理的数据结构或数据模
8、型可能相差很大,这对于软件的统一化和标准化结构或数据模型可能相差很大,这对于软件的统一化和标准化以及软件的集成和推广以及软件的集成和推广 应用很不利。当软件变得很大很复杂时,应用很不利。当软件变得很大很复杂时,开发一个软件只编一个程序的方法就不适应了。于是人们提出开发一个软件只编一个程序的方法就不适应了。于是人们提出了结构化软件开发方法。这种方法提倡通过系统分析和设计将了结构化软件开发方法。这种方法提倡通过系统分析和设计将该大的系统划分为多个功能模块,每个功能块又可以进一步划该大的系统划分为多个功能模块,每个功能块又可以进一步划分为更小的功能子模块,直到各个子模块容易编程实现为止。分为更小的功
9、能子模块,直到各个子模块容易编程实现为止。在编程实现了各个模块之后,将这些模块组装起来就构成了完在编程实现了各个模块之后,将这些模块组装起来就构成了完整的应用系统。整的应用系统。这种技术主要强调程序模块化结构和数据结构,采用这种技术主要强调程序模块化结构和数据结构,采用自顶向下逐步求精的设计方法和单入口单出口的控制结构,自顶向下逐步求精的设计方法和单入口单出口的控制结构,从而大大改善了程序的可读性。从而大大改善了程序的可读性。第六页,讲稿共七十页哦 伴随着结构化软件开发技术的出现,人们伴随着结构化软件开发技术的出现,人们还提出了还提出了软件工程方法软件工程方法,使软件开发工作从以,使软件开发工
10、作从以前只考虑程序的编写技巧转变到利用软件工程前只考虑程序的编写技巧转变到利用软件工程的方法,使软件系统的生产过程遵循一系列的的方法,使软件系统的生产过程遵循一系列的规范化步骤,包括需求分析、总体设计、详细规范化步骤,包括需求分析、总体设计、详细设计、编程实现、软件测试、软件维护等。从设计、编程实现、软件测试、软件维护等。从而大大改善了软件的质量与可维护性,但软件而大大改善了软件的质量与可维护性,但软件开发的成本却大大增加了,未能完全克服软件开发的成本却大大增加了,未能完全克服软件危机。危机。第七页,讲稿共七十页哦l第三代第三代(上个世纪上个世纪80年代开始至今还盛行的年代开始至今还盛行的)以
11、以Smalltalk、C+等为代表的面向对象等为代表的面向对象软件开发方法软件开发方法(OO)。传统的结构化程序设计以算法为核心,传统的结构化程序设计以算法为核心,把本来密切相关的数据和对数据的操作分离把本来密切相关的数据和对数据的操作分离开来,很难保持数据和操作的一致性,其软开来,很难保持数据和操作的一致性,其软件开发方法也不符合人们的自然思维习惯件开发方法也不符合人们的自然思维习惯,设计出来的软件系统其解空间与问题空间不设计出来的软件系统其解空间与问题空间不一致,致使程序难以理解、修改和扩充,最一致,致使程序难以理解、修改和扩充,最终导致程序复杂性问题和软件危机。终导致程序复杂性问题和软件
12、危机。为了超越程序复杂性障碍,克服软件危机为了超越程序复杂性障碍,克服软件危机,人们提出了人们提出了面向对象软件开发方法面向对象软件开发方法。面向对。面向对象开发方法一改过去传统的以功能分析和功象开发方法一改过去传统的以功能分析和功能分解为基础的面向过程的结构化分析与设能分解为基础的面向过程的结构化分析与设计方法,计方法,第八页,讲稿共七十页哦 面向对象开发方法模拟人们理解和处理客观世界的方式面向对象开发方法模拟人们理解和处理客观世界的方式来分析问题,把系统视为一系列对象的集合,其面向对来分析问题,把系统视为一系列对象的集合,其面向对象的设计又将分析的结果映射到某种面向对象实现工具象的设计又将
13、分析的结果映射到某种面向对象实现工具的结构上,使映射过程有着比较直接的对应关系,使分的结构上,使映射过程有着比较直接的对应关系,使分析者、设计者和编程者都可使用相同的概念,从而使面析者、设计者和编程者都可使用相同的概念,从而使面向对象的软件开发能比较自然地模拟客观世界的活动,向对象的软件开发能比较自然地模拟客观世界的活动,使问题描述空间与解空间在结构上尽可能一致。因此,使问题描述空间与解空间在结构上尽可能一致。因此,采用面向对象方法可以更有效地开发大型软件系统。面采用面向对象方法可以更有效地开发大型软件系统。面向对象方法的封装、继承、多态等机制不仅支持软件复向对象方法的封装、继承、多态等机制不
14、仅支持软件复用,而且使软件维护工作可靠有效,可实现软件系统的用,而且使软件维护工作可靠有效,可实现软件系统的柔性制造,更好地克服软件危机。因此,它已成为成熟柔性制造,更好地克服软件危机。因此,它已成为成熟的广为采用的软件开发方法。的广为采用的软件开发方法。到到2020世纪末,面向对象软件工程逐渐发展成熟,特世纪末,面向对象软件工程逐渐发展成熟,特别是统一建模语言别是统一建模语言(UML)(UML)标准的形成和广泛使用,使面标准的形成和广泛使用,使面向对象软件开发方法已成为软件开发的主流技术。向对象软件开发方法已成为软件开发的主流技术。第九页,讲稿共七十页哦(3 3)面向对象软件开发方法的发展)
15、面向对象软件开发方法的发展u面向对象软件开发方法始于面向对象语言的研究和发面向对象软件开发方法始于面向对象语言的研究和发展展。面向对象语言的发展有三个重要的里程碑:。面向对象语言的发展有三个重要的里程碑:2020世纪世纪7070年代的年代的Simula-67 Simula-67 是第一个面向对象的语言是第一个面向对象的语言 ,对后来的许多面向对象语言的出现产生了很大的影响。,对后来的许多面向对象语言的出现产生了很大的影响。它首次提出了对象和类的概念和方法,启示了一种崭新软它首次提出了对象和类的概念和方法,启示了一种崭新软件思维方法的出现。件思维方法的出现。8080年代初的年代初的 Smallt
16、alk Smalltalk 语言语言,它的广泛使用掀起了一,它的广泛使用掀起了一场场“面向对象运动面向对象运动”,随之诞生了多种面向对象,随之诞生了多种面向对象的语言的语言,可分为几类。可分为几类。对流行的语言进行面向对象的扩充得到的语言,对流行的语言进行面向对象的扩充得到的语言,如混合性如混合性语言语言C+C+和纯面向对象语言和纯面向对象语言Java.Java.第十页,讲稿共七十页哦u 自自8080年代末期到年代末期到9090年代年代 ,面向对象技术的研面向对象技术的研究和应用不再局限于编程阶段究和应用不再局限于编程阶段 ,而是向着系,而是向着系统分析和系统设计阶段发展,即系统分析和系统分析
17、和系统设计阶段发展,即系统分析和系统设计阶段也开始采用面向对象方法。这标志统设计阶段也开始采用面向对象方法。这标志着面向对象方法已经发展成一种完整的方法论着面向对象方法已经发展成一种完整的方法论和系统化的技术体系和系统化的技术体系面向对象软件工程面向对象软件工程。我们用面向对象语言编程求解问题之前需要我们用面向对象语言编程求解问题之前需要先按面向对象的方法进行分析和设计,然后才先按面向对象的方法进行分析和设计,然后才能根据设计模型进行有效编程。所以我们在学能根据设计模型进行有效编程。所以我们在学习用面向对象技术求解实际问题之前习用面向对象技术求解实际问题之前应该先学应该先学习面向对象的基本概念
18、,再学习面向对象的分习面向对象的基本概念,再学习面向对象的分析和设计,然后再学习面向对象的编程实现,析和设计,然后再学习面向对象的编程实现,这样才能全面掌握用面向对象技术求解问题的这样才能全面掌握用面向对象技术求解问题的方法。方法。第十一页,讲稿共七十页哦 1.2 面向对象的基本概念面向对象的基本概念 为了更好地理解面向对象的思想和方法为了更好地理解面向对象的思想和方法,有必要先介绍一些面向对象的基本概念。有必要先介绍一些面向对象的基本概念。与人们认识客观世界一样,面向对象技术与人们认识客观世界一样,面向对象技术认为客观世界是由各种各样的事物或实体组成认为客观世界是由各种各样的事物或实体组成,
19、每个事物或实体都可用一个对象来表示。因此,每个事物或实体都可用一个对象来表示。因此,客观世界可看成是由各种各样的对象组成,每客观世界可看成是由各种各样的对象组成,每个对象都有各自的内部状态和行为操作,不同个对象都有各自的内部状态和行为操作,不同对象间相互作用和联系就构成了各种不同的系对象间相互作用和联系就构成了各种不同的系统,从而形成了客观世界。统,从而形成了客观世界。因此,在面向对象因此,在面向对象的程序中,客观系统自然被描绘成一系列完全的程序中,客观系统自然被描绘成一系列完全自治、封装的对象,自治、封装的对象,因此对象是组成面向对象因此对象是组成面向对象程序的基本单位。程序的基本单位。第十
20、二页,讲稿共七十页哦(1)对象(对象(ObjectObject)对象是客观实体的抽象表示,是由描述对象的对象是客观实体的抽象表示,是由描述对象的属性属性的数据的数据和对这些数据进行的和对这些数据进行的操作操作行为行为两部分组成。两部分组成。u属性属性是用来描述对象静态特征的数据项。是用来描述对象静态特征的数据项。u行为行为是用来描述对象动态特征的操作方法或算法。是用来描述对象动态特征的操作方法或算法。第十三页,讲稿共七十页哦(2)(2)对象的特征对象的特征具有一个状态具有一个状态,由与其相关联的属性值集合所表征。由与其相关联的属性值集合所表征。具有唯一的标识名,可以区别于其他对象。具有唯一的标
21、识名,可以区别于其他对象。有一组操作方法,每个操作方法决定对象的一种行为。有一组操作方法,每个操作方法决定对象的一种行为。对象的状态一般只能被自身的行为所改变。对象的状态一般只能被自身的行为所改变。对象的操作包括自操作(施于自身)和它操作(施于对象的操作包括自操作(施于自身)和它操作(施于其他对象)。其他对象)。对象之间以消息传递的方式进行通信。对象之间以消息传递的方式进行通信。一个对象的成员仍可以是一个对象。一个对象的成员仍可以是一个对象。void display()void display()Person A;Person A;cout cout学号学号endl;endl;cout cou
22、t姓名姓名endl;endl;cout cout性别性别endl;endl;cout cout成绩成绩endl;endl;A.print();A.print();第十四页,讲稿共七十页哦(3)类)类(ClassClass)在面向对象程序中,一般不会逐个描述具体对象,而是将注意在面向对象程序中,一般不会逐个描述具体对象,而是将注意力集中于力集中于一类一类具有相同特性的对象具有相同特性的对象,抽象出这类对象的共,抽象出这类对象的共同特性和行为,用同特性和行为,用“类类”进行一般性描述。进行一般性描述。类类u 类是具有相同属性和行为的对象集合的抽象描述;类是具有相同属性和行为的对象集合的抽象描述;u
23、 类的内部包括属性和行为两个主要部分。类的内部包括属性和行为两个主要部分。第十五页,讲稿共七十页哦(4)实例实例 (instance)(instance)类是对具有相同属性和行为的一组对象的抽象描述。类是对具有相同属性和行为的一组对象的抽象描述。因此,因此,类可作为一种用户自定义类型和创建对象的类可作为一种用户自定义类型和创建对象的样板,而按照这种样板所创建的一个个具体对象就样板,而按照这种样板所创建的一个个具体对象就是类的实际例子,通常称为是类的实际例子,通常称为实例实例。例如,例如,studentstudent S1(051001,S1(051001,李明,男,李明,男,9090)第十六页
24、,讲稿共七十页哦(5 5)属性(属性(attribute)attribute)属性就是类中所定义的数据成员,是对客观实体的性属性就是类中所定义的数据成员,是对客观实体的性质的抽象质的抽象表示表示。例如,学生类中有属性:学号、姓。例如,学生类中有属性:学号、姓名、性别、成绩等。名、性别、成绩等。第十七页,讲稿共七十页哦(6 6)方法方法 (method)(method)方法就是对象所能执行的某项操作,也就是类中定义方法就是对象所能执行的某项操作,也就是类中定义的服务函数。方法描述了对象执行操作的算法。的服务函数。方法描述了对象执行操作的算法。在在C+C+中把类中定义的方法称为成员函数中把类中定义
25、的方法称为成员函数。例如,学生。例如,学生类中用于显示学生属性数据的类中用于显示学生属性数据的成员成员函数函数 display()display()就就是一个方法。是一个方法。第十八页,讲稿共七十页哦(7 7)消息(消息(message)message)消息就是请求某个对象执行它所包含的某项处消息就是请求某个对象执行它所包含的某项处理操作的指令信息。实质是对某个类对象的操理操作的指令信息。实质是对某个类对象的操作函数的调用。例如作函数的调用。例如,student student S1S1;S1S1.display().display()是一个消息。是一个消息。一个消息一般由三部分组成:接收消息
26、的对象一个消息一般由三部分组成:接收消息的对象名、操作函数名、函数的参数。名、操作函数名、函数的参数。消息是对象之间的通信机制。一个对象可消息是对象之间的通信机制。一个对象可以同时向多个对象发送消息,也可以接受多个以同时向多个对象发送消息,也可以接受多个对象发来的消息。对象发来的消息。第十九页,讲稿共七十页哦(8)封装性封装性(encapsulationencapsulation)所谓所谓封装封装就是就是把对象的属性和把对象的属性和操作结合成一个独立的单位操作结合成一个独立的单位,使外界不能直接访问或修改这使外界不能直接访问或修改这些属性数据和操作代码,外界些属性数据和操作代码,外界只能通过对
27、象提供的接口函数只能通过对象提供的接口函数来改变或获取对象的属性数据,来改变或获取对象的属性数据,这就实现了消息隐蔽。这就实现了消息隐蔽。封装是面向对象技术的一个封装是面向对象技术的一个基基本特征本特征。封装的目的是实现信息的有效隐封装的目的是实现信息的有效隐蔽。蔽。例如例如,class Student private:char*id;/学号学号 char*name;/姓名姓名 int age;/年龄年龄 public:void modify()age=age+1;void display()第二十页,讲稿共七十页哦 l 封装的优点封装的优点:(a)封装起了信息隐蔽作用,增封装起了信息隐蔽作用
28、,增强了对象的独立性,使外界只关强了对象的独立性,使外界只关心心对象对象对外所提供的接口,忽略对外所提供的接口,忽略其内部细节。其内部细节。(b)封装使外界不能随意存取封装使外界不能随意存取对象的内部属性,从而有效地避对象的内部属性,从而有效地避免外部错误对它的影响,提高了免外部错误对它的影响,提高了系统的安全性和可靠性。系统的安全性和可靠性。(c)封装的结果隐蔽了程序的复封装的结果隐蔽了程序的复杂性,提供了代码的重用性,降低杂性,提供了代码的重用性,降低了软件开发的难度。了软件开发的难度。例如例如,class Student private:char*id;/学号学号 char*name;/
29、姓名姓名 int age;/年龄年龄 public:void modify()age=age+1;void print()main()Student S1;S1.modify();S1.print();第二十一页,讲稿共七十页哦(9 9)继承性)继承性(inheritance)(inheritance)n如果在一个已定义的类如果在一个已定义的类上,增加一些特殊属性上,增加一些特殊属性或操作,可以形成一个或操作,可以形成一个新的类,这个类不仅继新的类,这个类不仅继承了前一个类的全部特承了前一个类的全部特征,而且具有新的特性,征,而且具有新的特性,因此可看作前一个类的因此可看作前一个类的特例,是对
30、前一个类的特例,是对前一个类的继承。前一个类称为继承。前一个类称为父父类类,新产生的类叫做,新产生的类叫做子子类类。通过。通过继承关系继承关系可形可形成一种类层次结构,叫成一种类层次结构,叫做继承结构。做继承结构。第二十二页,讲稿共七十页哦n 继承关系继承关系可以分为如下几种可以分为如下几种:一代继承一代继承:从父类到子类只延伸一次。如图从父类到子类只延伸一次。如图(a)所示。所示。多代继承多代继承:从父类到子类延伸多次。如图从父类到子类延伸多次。如图(b)所示。所示。单继承单继承:如果在一个继承层次结构中,每个子类只有一个直接父类,:如果在一个继承层次结构中,每个子类只有一个直接父类,则这种
31、继承称为单继承。如图则这种继承称为单继承。如图(a)和和(b)所示。所示。多继承多继承:如果在一个继承层次结构中,每个子类可有不止一个直接:如果在一个继承层次结构中,每个子类可有不止一个直接父类,则这种继承称为多继承。如图父类,则这种继承称为多继承。如图(c)所示。所示。第二十三页,讲稿共七十页哦(10)多态性多态性(polymorphism polymorphism)l 为了正确反映客观世界的多态性,面向对象程序设计为了正确反映客观世界的多态性,面向对象程序设计中也采用了中也采用了多态性多态性,即在不同类中,可用相同的函数名,即在不同类中,可用相同的函数名实现功能不同的函数。如下图所示。实现
32、功能不同的函数。如下图所示。l多态性的优点多态性的优点:高层代码(算法)只需写一次,低:高层代码(算法)只需写一次,低层便可多次复用,可提高程序设计的灵活性和效率。层便可多次复用,可提高程序设计的灵活性和效率。第二十四页,讲稿共七十页哦(11)(11)抽象性抽象性 抽象抽象就是忽略事物中与当前目标无关的非就是忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本本质特征,更充分地注意与当前目标有关的本质特征质特征,从而找出事物的共性,把具有共性的从而找出事物的共性,把具有共性的事物划分为一类。事物划分为一类。类的定义明确指出类是一组类的定义明确指出类是一组具有相同属性和行为的对象
33、集合的抽象描述。具有相同属性和行为的对象集合的抽象描述。将客观事物抽象成对象和类是面向对象的第一将客观事物抽象成对象和类是面向对象的第一步。因此,步。因此,抽象性是面向对象的的基本特征抽象性是面向对象的的基本特征。(12)(12)分类性分类性分类性是指将具有相同的数据分类性是指将具有相同的数据(属属性性)和行为和行为(操作操作)的对象抽象成的对象抽象成一一类。类。第二十五页,讲稿共七十页哦 1.3 1.3 面向对象的分析方法面向对象的分析方法n面向对象的分析面向对象的分析(object-oriented analysis,OOA)(object-oriented analysis,OOA)是面
34、是面向对象软件工程方法的第一个环节向对象软件工程方法的第一个环节,包括一套概念原则、包括一套概念原则、过程步骤、表示方法、提交文档等规范要求。过程步骤、表示方法、提交文档等规范要求。nOOAOOA的基本任务是的基本任务是:运用面向对象方法,对问题域和系统责:运用面向对象方法,对问题域和系统责任展开分析,正确认识其中事物和它们之间的关系,发现描任展开分析,正确认识其中事物和它们之间的关系,发现描述问题域和系统责任所需要的对象和类,并定义类的属性和述问题域和系统责任所需要的对象和类,并定义类的属性和服务,以及它们之间所形成的结构和连接,最终的目的是产服务,以及它们之间所形成的结构和连接,最终的目的
35、是产生一个符合用户需求,并能直接反映问题域和系统责任的生一个符合用户需求,并能直接反映问题域和系统责任的OOAOOA模型及其详细说明,为后续的面向对象设计模型及其详细说明,为后续的面向对象设计 object_oriented object_oriented design,OOD design,OOD)和面向对象编程实现()和面向对象编程实现(object_oriented object_oriented programming,OOPprogramming,OOP)提供指导。)提供指导。OOAOOA与与OODOOD能够自然地过渡和能够自然地过渡和结合,这是面向对象方法的一个优点。结合,这是面向
36、对象方法的一个优点。第二十六页,讲稿共七十页哦 1.3.1 OOA方法评价方法评价 由于面向对象方法更适应于解决当今的庞大、复杂由于面向对象方法更适应于解决当今的庞大、复杂和易变的系统开发问题,更易于设计模型,因此它已和易变的系统开发问题,更易于设计模型,因此它已成为当前比较流行的软件开发方法。自成为当前比较流行的软件开发方法。自2020世纪世纪8080年代后年代后期以来,相继出现了许多期以来,相继出现了许多OOAOOA和和OODOOD方法,方法,例如:例如:BoochBooch方法(方法(OOD)OOD)Cood-YourdonCood-Yourdon方法方法(OOAD)(OOAD)Jaco
37、bsonJacobson方法方法(OOSE)(OOSE)RumbaughRumbaugh方法方法(OMT)(OMT)Wassman-Pircher(OOSD)Wassman-Pircher(OOSD)等。等。第二十七页,讲稿共七十页哦 评价一个分析方法的优劣主要看它是否具有评价一个分析方法的优劣主要看它是否具有OOAOOA的如下优点:的如下优点:(1 1)面向对象分析方法应该能够自然地模拟人)面向对象分析方法应该能够自然地模拟人们理解和处理客观事物的方式来分析问题,表们理解和处理客观事物的方式来分析问题,表达需求达需求,直观性较好。直观性较好。OOAOOA应该便于应该便于与分析有与分析有关的人
38、员关的人员之间的交流。之间的交流。(2)(2)有利于对问题域和系统责任的理解和分析有利于对问题域和系统责任的理解和分析,有有利于克服系统的复杂性困难。所建立的系统模利于克服系统的复杂性困难。所建立的系统模型清晰,与程序中的类层次结构保持对应,便型清晰,与程序中的类层次结构保持对应,便于系统扩充和改造。于系统扩充和改造。(3 3)把属性数据和操作服务作为对象整体来看)把属性数据和操作服务作为对象整体来看待,比较自然地描述客观实体。对象在问题域待,比较自然地描述客观实体。对象在问题域中比较稳定,当需求变化时,只需增加新的对中比较稳定,当需求变化时,只需增加新的对象,而原有的对象可以保留使用。象,而
39、原有的对象可以保留使用。第二十八页,讲稿共七十页哦(4 4)根据对象间的相关性最小原则来分析和说明问题,)根据对象间的相关性最小原则来分析和说明问题,从而有利于实行封装性原则,更好地适应系统需求从而有利于实行封装性原则,更好地适应系统需求的变化、制作和提取可复用部件,支持软件复用。的变化、制作和提取可复用部件,支持软件复用。(5 5)可用类这样的有效机制来显式地表示对象集)可用类这样的有效机制来显式地表示对象集合的共性;抽象得到的类层次结构又可以比较直合的共性;抽象得到的类层次结构又可以比较直接地转化为接地转化为OOPOOP的程序结构,使得编程思路清晰,的程序结构,使得编程思路清晰,编程效率较
40、高。编程效率较高。(6 6)分析方法与设计方法比较一致,从而便于建)分析方法与设计方法比较一致,从而便于建造一个问题域模型。造一个问题域模型。(7 7)适合开发一大类系统,实用性较强;开发出)适合开发一大类系统,实用性较强;开发出来的系统可扩展性强。来的系统可扩展性强。第二十九页,讲稿共七十页哦1.3.2 OOA1.3.2 OOA步骤步骤n面向对象分析的关键面向对象分析的关键是对问题域中的事物进行识别是对问题域中的事物进行识别,确定必要的类及其相互关系。根据分析问题的繁简程确定必要的类及其相互关系。根据分析问题的繁简程度和设计进程的需要,把问题域分解成一些类和对象,度和设计进程的需要,把问题域
41、分解成一些类和对象,并以消息的形式建立各对象之间的联系。并以消息的形式建立各对象之间的联系。n面向对象分析的大致步骤如下:面向对象分析的大致步骤如下:(1)(1)分析问题域,明确用户需求分析问题域,明确用户需求 了解与问题相关的业务领域知识,明确用户对系统了解与问题相关的业务领域知识,明确用户对系统的需求,定义系统的职责范围和边界,探讨问题的初的需求,定义系统的职责范围和边界,探讨问题的初步解决方案步解决方案。例如例如,题库管理系统题库管理系统的用户需求可以从如下三个方的用户需求可以从如下三个方面描述面描述:系统问题域说明系统问题域说明:应用系统的业务范围应用系统的业务范围系统边界说明系统边界
42、说明:确定系统与用户之间接口确定系统与用户之间接口系统功能说明系统功能说明:系统需要实现的功能系统需要实现的功能第三十页,讲稿共七十页哦系统问题域说明系统问题域说明:在公共题库的支持下在公共题库的支持下n 每个教师每个教师:输入习题输入习题:可用系统编写习题及答案可用系统编写习题及答案,并存入习题库并存入习题库;组成作业组成作业:从习题库中选择一组习题从习题库中选择一组习题来来组成作业组成作业,并在要求时间公并在要求时间公布习题答案布习题答案;从习题库中选择一组习题组成考试试卷从习题库中选择一组习题组成考试试卷,并公布试题并公布试题;可以批改学生的作业可以批改学生的作业;学生答题后可收卷学生答
43、题后可收卷,阅卷评分。阅卷评分。n 每个学生每个学生:用系统完成作业或答题并提交给系统用系统完成作业或答题并提交给系统;可在习题库中选择习题自己练习可在习题库中选择习题自己练习;可以在公布答案后核对自己的作业可以在公布答案后核对自己的作业;n 系统管理员系统管理员:负责习题、编班和权限管理,维护习题库。负责习题、编班和权限管理,维护习题库。第三十一页,讲稿共七十页哦系统边界说明系统边界说明:系统的用户有本校教师、学生、系统管理员。系统的用户有本校教师、学生、系统管理员。学校以班组织学生学校以班组织学生,每班每学期有若干课程。每班每学期有若干课程。每门课的习题由一位教师负责。每门课的习题由一位教
44、师负责。只有本科教师可提交或修改习题。只有本科教师可提交或修改习题。系统功能说明系统功能说明:教师编写习题及答案入库。教师编写习题及答案入库。教师选择作业题公布于教师选择作业题公布于习题板习题板上,向学生布置作业上,向学生布置作业;教师选择试题公布于教师选择试题公布于考试板考试板上上(有考题有考题,时间和评分要求时间和评分要求).).每个学生每门课程都有一个每个学生每门课程都有一个练习本练习本。记录学生对每道习题。记录学生对每道习题(或试题或试题)的解答。的解答。教师通过练习本批改习题教师通过练习本批改习题(或试题或试题)。习题库提供入库习题库提供入库,提取提取,权限权限,查询等管理。查询等管
45、理。第三十二页,讲稿共七十页哦(2 2)确定对象和类。)确定对象和类。即分析确定并标识构成系统的对象,再即分析确定并标识构成系统的对象,再对对象进行抽象分类。先把系统看成由一些子系统组成,把对对象进行抽象分类。先把系统看成由一些子系统组成,把每个子系统划分成一个主题,主题是由一组类和对象组成。每个子系统划分成一个主题,主题是由一组类和对象组成。例如,对于题库管理系统,发现对象的出发点例如,对于题库管理系统,发现对象的出发点:问题域、问题域、系统功能和边界系统功能和边界説明説明n从需求中找出关键名词从需求中找出关键名词或名词短语或名词短语作为侯选对象作为侯选对象:教师教师,系统系统,习题习题,答
46、案答案,作业作业,时间时间,学生学生,试题试题,系统管理系统管理员员,权限权限,学校学校,班班,学期学期,课程课程,习题板习题板,考试板考试板,练习本练习本,习题习题库。库。n分析和筛选对象分析和筛选对象:教师教师,学生学生,习题板习题板,练习本练习本班班,课程课程习题习题,考试板考试板,习题答案习题答案习题库服务习题库服务第三十三页,讲稿共七十页哦确定类确定类:对具有相同属性和操作集合的各组对象进行抽象描对具有相同属性和操作集合的各组对象进行抽象描述述 ,得到组成系统的,得到组成系统的类类。第三十四页,讲稿共七十页哦(3 3)确定系统各部分的分类和组成结构确定系统各部分的分类和组成结构l第一
47、是按照一般第一是按照一般特殊关系,标识类间的继承关系,特殊关系,标识类间的继承关系,确定分类结构;确定分类结构;l第二是按照整体第二是按照整体部分关系,标识一个对象是有哪些部分关系,标识一个对象是有哪些对象组成,确定组装结构。对象组成,确定组装结构。n 例如,对于题库管理系统,分类结构可如下确定:例如,对于题库管理系统,分类结构可如下确定:习题板与考试板是父子关系习题板与考试板是父子关系考试板可看作为特殊的习题考试板可看作为特殊的习题板板,除习题板的共性外除习题板的共性外,增加了评分标准增加了评分标准.第三十五页,讲稿共七十页哦n 对于题库管理系统,对于题库管理系统,组成关系可如下确定组成关系
48、可如下确定:班与学生是组成的关系班与学生是组成的关系(1(1对对n)n)习题板与习题是组成的关系习题板与习题是组成的关系(1,0(1,0对对n)n)练习本与习题答案是组成关系练习本与习题答案是组成关系(1(1对对n)n)第三十六页,讲稿共七十页哦(4)找出并建立每个对象及其相互之间的联系。找出并建立每个对象及其相互之间的联系。即以应用为基础来标识对即以应用为基础来标识对象,定义对象的内部特征(属性和方法),建立实例连接和消息连接。象,定义对象的内部特征(属性和方法),建立实例连接和消息连接。消息连接体现了对象间的通信关系和接口协议形式。消息连接体现了对象间的通信关系和接口协议形式。例如,对于题
49、库管理系统,实例连接关系如下例如,对于题库管理系统,实例连接关系如下:练习本与学生对象之间存在一对多的实例连接关系。由练习本中的学生练习本与学生对象之间存在一对多的实例连接关系。由练习本中的学生IDID属性体现。属性体现。练习本与考试板对象之间存在一对多的实例连接关系。练习本用快照复制答案作为考试练习本与考试板对象之间存在一对多的实例连接关系。练习本用快照复制答案作为考试板中答卷属性的体现。板中答卷属性的体现。课程与教师对象之间存在一对多的实例连接关系。由课程中负责教师课程与教师对象之间存在一对多的实例连接关系。由课程中负责教师IDID属性体现。属性体现。班班教师教师习习题题板板练练 习习本本
50、 学生学生考试板考试板习题课程课程习题解答1nnnnnnn11110,10,1第三十七页,讲稿共七十页哦 对于题库管理系统,对象之间消息连接可以如下确定:对于题库管理系统,对象之间消息连接可以如下确定:教师向习题发消息教师向习题发消息:调用调用编写习题编写习题,编写答案编写答案,习题入库习题入库等方法等方法。教师向习题板发消息教师向习题板发消息,可调用可调用选题选题,公布答案公布答案,查询答案查询答案,查询习题查询习题等等方法。例如方法。例如:习题板习题板.select(),.select(),习题板习题板.answer(),.answer(),教师向考试板发消息可调用教师向考试板发消息可调用