版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、n7.1 面向对象方法概述面向对象方法概述n7.2 用例建模用例建模第第7章章 用例分析用例分析7.1 面向对象方法概述面向对象方法概述n面向对象的软件工程面向对象的软件工程n面向对象的分析,简称:面向对象的分析,简称:OOAn面向对象的设计,简称:面向对象的设计,简称:OODn面向对象程序设计,简称:面向对象程序设计,简称:OOPn面向对象的测试,简称:面向对象的测试,简称:OOTn面向对象数据库系统,简称:面向对象数据库系统,简称:OODBMSn面向对象计算机软件辅助工程,简称:面向对象计算机软件辅助工程,简称:OOCASEn面向对象的语言面向对象的语言n1 程序设计技术的发展程序设计技术
2、的发展 n 1.1 面向机器的语言面向机器的语言n 机器语言机器语言是硬件逻辑设计所实现的机器指令的集合,也就是硬件逻辑设计所实现的机器指令的集合,也就是由硬件所能实现的语义序列集合。其表现形式为能被机器直是由硬件所能实现的语义序列集合。其表现形式为能被机器直接接收的二进制代码序列。接接收的二进制代码序列。n 汇编语言汇编语言是机器语言的直接符号映射。它用人类能够理解是机器语言的直接符号映射。它用人类能够理解的助记符号来表示机器指令、寄存器、存储器地址等物理概念的助记符号来表示机器指令、寄存器、存储器地址等物理概念,以提高程序的可读性。,以提高程序的可读性。程序设计语言的发展程序设计语言的发展
3、机器语言与汇编语言机器语言与汇编语言n由计算机硬件系统可以识别的二进制指令由计算机硬件系统可以识别的二进制指令组成的语言称为机器语言。组成的语言称为机器语言。计算机发展的初期,软件工程师们只能用机器计算机发展的初期,软件工程师们只能用机器语言来编写程序。这一阶段,在人类的自然语言和语言来编写程序。这一阶段,在人类的自然语言和计算机编程语言之间存在着巨大的鸿沟。计算机编程语言之间存在着巨大的鸿沟。n汇编语言将机器指令映射为一些可以被人汇编语言将机器指令映射为一些可以被人读懂的助记符,如读懂的助记符,如ADDADD、SUBSUB等。等。此时编程语言与人类自然语言间的鸿沟略有缩此时编程语言与人类自然
4、语言间的鸿沟略有缩小,但仍与人类的思维相差甚远。因为它的抽象层小,但仍与人类的思维相差甚远。因为它的抽象层次太低,程序员需要考虑大量的机器细节。次太低,程序员需要考虑大量的机器细节。n计算机语言的发展高级语言高级语言高级语言屏蔽了机器的细节,提高了语高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定涵言的抽象层次,程序中可以采用具有一定涵义的数据命名和容易理解的执行语句。这使义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具得在书写程序时可以联系到程序所描述的具体事物。体事物。n计算机语言的发展面向对象的语言面向对象的语言n出发点:出发点:n更直接
5、地描述客观世界中存在的事物更直接地描述客观世界中存在的事物( (对象对象) )以及它们之间的关系。以及它们之间的关系。n特点:特点:n是高级语言。是高级语言。n将客观事物看作具有属性和行为的对象。将客观事物看作具有属性和行为的对象。n通过抽象找出同一类对象的共同属性和行为通过抽象找出同一类对象的共同属性和行为,形成类。,形成类。n通过类的继承与多态实现代码重用通过类的继承与多态实现代码重用n计算机语言的发展面向对象的语言面向对象的语言n优点:优点:使程序能够比较直接地反映问题域的使程序能够比较直接地反映问题域的本来面目,软件开发人员能够利用人类认本来面目,软件开发人员能够利用人类认识事物所采用
6、的一般思维方法来进行软件识事物所采用的一般思维方法来进行软件开发。开发。n计算机语言的发展 早期的计算机应用以问题求解为主要目标,算早期的计算机应用以问题求解为主要目标,算法的设计和实现是程序设计活动的焦点。注重追求法的设计和实现是程序设计活动的焦点。注重追求算法的效率,并不特别注意算法与数据结构的依赖算法的效率,并不特别注意算法与数据结构的依赖关系,算法和数据处于相对独立的状态。关系,算法和数据处于相对独立的状态。n1.2 面向问题的语言面向问题的语言nFORTRAN语言语言 引入了程序设计语言中程序控制程序控制结构、符号命名机制结构、符号命名机制等一些最重要的基本概念。例如:命命名子程序、
7、变量作为存储单元的抽象以及数组的概念等。名子程序、变量作为存储单元的抽象以及数组的概念等。n随着编译技术的突破产生的随着编译技术的突破产生的高级语言高级语言用接近人用接近人类习惯的自然语言或数学语言表达问题、编制程序。类习惯的自然语言或数学语言表达问题、编制程序。n高级语言通过引入一些抽象概念,屏蔽机器底层高级语言通过引入一些抽象概念,屏蔽机器底层的差异,使它独立于机器,不但有效地提高了程序设计的差异,使它独立于机器,不但有效地提高了程序设计的效率,也带来了程序的可移植性。的效率,也带来了程序的可移植性。n 由于算法总是以过程(子程序)的形式由于算法总是以过程(子程序)的形式出现,面向问题的程
8、序也叫做过程化程序出现,面向问题的程序也叫做过程化程序设计。设计。n模块化程序设计模块化程序设计n FORTRAN语言还引入了语言还引入了独立编译的模块独立编译的模块和和可重用可重用子程序库子程序库的概念,这种技术后来被称为的概念,这种技术后来被称为模块化程序设计。模块化程序设计。n模块化的思想是将应用程序划分若干个模块化的思想是将应用程序划分若干个规模适度的模块,每个模块独立命名、独立规模适度的模块,每个模块独立命名、独立编译,最后通过连接程序形成可招待的应用编译,最后通过连接程序形成可招待的应用程序。程序。 n模块化程序设计带来了以下一些重要概念:模块化程序设计带来了以下一些重要概念:n模
9、块内信息隐藏,模块内信息隐藏,一个模块中的变量可以与其它模块一个模块中的变量可以与其它模块中的变量同名而不至于产生混淆;中的变量同名而不至于产生混淆;n模块间通过全局环境共享数据;模块间通过全局环境共享数据;n模块间通过外部变量、公共变量实现通信。模块间通过外部变量、公共变量实现通信。n 模块化程序设计倡导的这些概念被证明是程序组织和模块化程序设计倡导的这些概念被证明是程序组织和管理有效的基本手段,在以后程序设计技术发展的各个阶段管理有效的基本手段,在以后程序设计技术发展的各个阶段得以延续和发展得以延续和发展。n1.3 面向数据结构的程序设计面向数据结构的程序设计n研究证明,仅用研究证明,仅用
10、顺序,分支,循环三种顺序,分支,循环三种基本控制结构基本控制结构即能构造出任何单入口、单出即能构造出任何单入口、单出口的程序块。口的程序块。n这些研究结果与模块化的概念相结合,这些研究结果与模块化的概念相结合,形成了采用形成了采用自顶向下、逐步求精自顶向下、逐步求精的设计步骤的设计步骤和和单入口单出口单入口单出口基本控制结构的基本控制结构的结构化程序结构化程序设计设计方法。方法。nPascal语言和语言和C语言都是结构化程序语言都是结构化程序设计语言。同时它们也是过程化程序设计设计语言。同时它们也是过程化程序设计语言。语言。n Pascal语言用过程来组织程序。语言用过程来组织程序。nC语言用
11、函数来组织程序。语言用函数来组织程序。n 过程过程(Procedure)和函数和函数(Function)是子是子程序程序(Subroutine)的两种具体形式。的两种具体形式。过程没有返过程没有返回值。函数函数有且只有一个返回值。回值。函数函数有且只有一个返回值。 结构化程序设计的研究中有一个重要的结论,结构化程序设计的研究中有一个重要的结论,表示为公式:表示为公式:程序程序=算法算法+数据结构数据结构,强调算法对数,强调算法对数据结构的依赖性,体现了一种数据结构为中心的观据结构的依赖性,体现了一种数据结构为中心的观念。念。 大多数结构化语言都具有大多数结构化语言都具有定义新的数据类型定义新的
12、数据类型的的功能,如功能,如C语言中枚举语言中枚举(enum) 、结构、结构(struct)类型类型等。这有利于比较准确地描述待求解问题中的实体等。这有利于比较准确地描述待求解问题中的实体,并保证数据的一致性。,并保证数据的一致性。 数据库技术和数据库管理语言也体现了程序设数据库技术和数据库管理语言也体现了程序设计以数据结构为中心的鲜明特色。计以数据结构为中心的鲜明特色。n以数据结构为中心的蔽端:以数据结构为中心的蔽端:n整个程序中许多重要的过程和函数的实现依整个程序中许多重要的过程和函数的实现依赖于一个或几个关键数据结构,如果关键数据结构赖于一个或几个关键数据结构,如果关键数据结构中的一个或
13、几个数据有所改变,则会波及到整个系中的一个或几个数据有所改变,则会波及到整个系统,许多过程和函数必须重写。这是不利于程序的统,许多过程和函数必须重写。这是不利于程序的维护和扩展的。维护和扩展的。n 1.4 面向对象的程序设计面向对象的程序设计n 面向对象的程序设计方法继承了结构化、过程化、模块化等方法的所有积极成分,创造性地引入了“对象”这一构建程序的基本构件。n对象对象是由是由数据结构数据结构和对数据和对数据结构的结构的操作或运算操作或运算封装而成的一封装而成的一个整体。个整体。n封装使得算法和数据结构的关系由算法对数由算法对数据结构单方面的依赖变成了相互依存据结构单方面的依赖变成了相互依存
14、的关系。n面向对象方法采用数据抽象与隐藏、面向对象方法采用数据抽象与隐藏、层次结构体系,动态绑定等概念和措施,层次结构体系,动态绑定等概念和措施,提供一种提供一种模拟人类认知方式的软件系统建模拟人类认知方式的软件系统建模方法模方法,带来了系统的安全性、可扩充性,带来了系统的安全性、可扩充性、代码重用、易维护等人们期待的特性。、代码重用、易维护等人们期待的特性。 nOOPL的来源与发展的来源与发展nOOPL(Object Oriented Programming Language 面向对象程序设计语言)面向对象程序设计语言)n20世纪世纪60年代年代, 由挪威计算中心由挪威计算中心Ole Dah
15、l和和Krysten Nygaard.主持开发的主持开发的Simula 67 被公认为是面被公认为是面向对象语言的先驱。向对象语言的先驱。n20世纪世纪70年代,由美国国防部资助开发的年代,由美国国防部资助开发的Ada语言语言,以它对抽象数据类型的支持,而在面向对象语言发展中占,以它对抽象数据类型的支持,而在面向对象语言发展中占有重要地位。有重要地位。n Simula 67 和和Ada被看作是被看作是OOPL的两个直接的两个直接的的“祖先祖先”,一个引入,一个引入“模拟模拟”,一个引入,一个引入“抽抽象象”。nn20世纪世纪70年代到年代到80年代年代, 美国美国Xerox公司,公司,Palo
16、 Alto研究中心(研究中心(PARC)的)的Alan Kay, Adale Goldberg和和Dan Ingans等人主持开发的等人主持开发的Smalltalk语言正式使用了语言正式使用了“面向对象面向对象”这个术语。它的问世标志着面向对象程序设计方这个术语。它的问世标志着面向对象程序设计方法的正式形成。法的正式形成。nn1981年推出的年推出的Smalltalk-80是是Smalltalk语言最完语言最完善的版本。它是第一个能够实际应用的纯的面向对象语言。善的版本。它是第一个能够实际应用的纯的面向对象语言。在在Smalltalk_80中类和对象不仅仅是语言成分,而且是交中类和对象不仅仅是
17、语言成分,而且是交互式程序设计环境的组成部分。互式程序设计环境的组成部分。n80年代中期,年代中期,Simular 67、Smalltalk_80等语言的影响仅仅等语言的影响仅仅局限在学术界。面向对象语言对计算平台的特殊要求使这些语言难于被局限在学术界。面向对象语言对计算平台的特殊要求使这些语言难于被软件开发商和程序员接受。软件开发商和程序员接受。n贝尔实验室的贝尔实验室的Bjarne Stroustrup 及其研究小组在及其研究小组在当时最受欢迎的当时最受欢迎的C语言基础上开发的语言基础上开发的C+语言,引入了对面语言,引入了对面向对象概念的支持。向对象概念的支持。nC+语言以其与语言以其与
18、C语言兼容、高运行效率等优良特性,语言兼容、高运行效率等优良特性,使面向对象程序设计技术受到软件工业界的广泛关注,使之使面向对象程序设计技术受到软件工业界的广泛关注,使之进入一个全面发展的时期。尽管进入一个全面发展的时期。尽管C+只能算作一种混合式只能算作一种混合式面向对象语言面向对象语言。但是正是由于大量。但是正是由于大量C程序员通过程序员通过C+的帮助的帮助才迅速掌握了面向对象的概念和方法,全面促进了面向对象才迅速掌握了面向对象的概念和方法,全面促进了面向对象技术的应用,从而使技术的应用,从而使C+成为最有影响的面向对象语言,成为最有影响的面向对象语言,甚至许多人把甚至许多人把C+当作当作
19、面向对象的代名词。面向对象的代名词。n面向对象技术的流行进一步促进了面向对象语言的繁荣。面向对象技术的流行进一步促进了面向对象语言的繁荣。90年年代涌现出了一大批实用的面向对象语言,如代涌现出了一大批实用的面向对象语言,如Object Pascal、Eiffel、Java等等。等等。nJava语言是由语言是由Sun Microsystem公司推出的一种公司推出的一种纯面向对象纯面向对象语言语言。Java从从C+语言中继承了大量的语言成分,抛弃了语言中继承了大量的语言成分,抛弃了C+语言中语言中冗余的和容易引起问题的功能,它将面向对象、平台无关性、稳定性、冗余的和容易引起问题的功能,它将面向对象
20、、平台无关性、稳定性、安全性等集于一身,提供了一个良好的程序设计环境,因而成为适合于安全性等集于一身,提供了一个良好的程序设计环境,因而成为适合于分布式计算的程序设计语言。分布式计算的程序设计语言。nnJava语言于语言于90年代中期的迅速流行与它定位于当时迅速发展的年代中期的迅速流行与它定位于当时迅速发展的Internet的的WWW应用开发有关。展示了面向对象技术与分布式计算应用开发有关。展示了面向对象技术与分布式计算结合的重大前景。结合的重大前景。n程序设计语言程序设计语言: C+, Javan脚本语言脚本语言: Java Script , VBScriptn标记语言标记语言: SGML,
21、 HTML, XMLn样式语言样式语言: CSS, XSLn建模语言建模语言: UMLn2 面向对象的基本概念面向对象的基本概念 n 2.1 面向对象的目标面向对象的目标 n n建立一个既能在计算机系统中自然地表示客观世界的建立一个既能在计算机系统中自然地表示客观世界的问题、又能够超越程序复杂性障碍的程序设计模型。问题、又能够超越程序复杂性障碍的程序设计模型。 n面向对象方法通过对客观世界和问题世界的直接模拟,面向对象方法通过对客观世界和问题世界的直接模拟,建立较为准确、自然的程序设计模型,从而获得信息处建立较为准确、自然的程序设计模型,从而获得信息处理的更高性能。理的更高性能。n计算机世界n
22、(程序空间)n主观世界n(问题空间)n客观世界n(真实空间)n图 1 客观世界、主观世界和计算机世界n n从计算机软件设计的角度,引入类和对象的概念,将客观世界和主观世界中的实体和问题直接映射到计算机世界的程序空间。这就是面向对象方法的基本出发点。对象具有的特征对象具有的特征n万物皆为对象万物皆为对象n每个对象都有自己的惟一标识每个对象都有自己的惟一标识n对象具有属性和行为对象具有属性和行为n对象具有状态对象具有状态n对象之间依靠消息实现通信对象之间依靠消息实现通信n分类:从大量相似的实体中归纳、抽象出相同特征,为辨识新的个体形成参照模式。n 对象和类的概念是面向对象技术中最重要的概念。对象和
23、类分别对应认识论中实体和对实体的分类。n实体:客观世界或问题世界中可直接或间接观察的个体。n物理实体:一本书,一辆汽车n观念实体:一笔帐,2008北京奥运会n抽象是对具体事物简化描述的过程,它强调了系统的某些主要特性面而忽略了其它特性。 n一个分类至少应抽象出两个方面的特征,一是数据特征,一是行为特征。nn比如人类,有年龄、性别、身高、体重,健康状态、所属工作单位等特征,这些特征可以用一些具体的数值来描述,属于数据特征。数据特征又称属性或状态,是区分不同个体的依据。nn人类还有行为特征,如吃饭、走路、学习、成长等。行为特征是同一个类的所有个体共有的。 n 2.2 面向对象语言中的类和对象面向对
24、象语言中的类和对象n 在面向对象语言中通常以下面描述的方式来定义类在面向对象语言中通常以下面描述的方式来定义类:类定义:类定义: 类名类名1 私有数据:私有数据: 数据类型数据类型1: 属性数据属性数据1; 数据类型数据类型2: 属性数据属性数据2; 数据类型数据类型3: 属性数据属性数据3; 公有方法:公有方法: 方法(行为)方法(行为)1; 方法(行为)方法(行为)2; ;类类是一个形体形体定义,它对一个数据特性和方法特性的封装体进行说明。类定义中包含两类成员:数据成员和方法成员。类的定义为该类的对象提供了创建的模式。n 根据已定义的类,可以按下述方式创建对象:根据已定义的类,可以按下述方
25、式创建对象:类名类名1:对象名:对象名1,对象名,对象名2;类名类名2:对象名:对象名3;对象对象是类的实例实例。对象是按照类提供的模板进行的实体定义,它将为对象在内存中分配实际的存储空间。在程序中对象间相互通信和作用,共同完成程序功能。 类与对象的关系就是数据类型和该类型变量的关系。如: int x. y; float f1, f2; clock t1, t2; Complex c1, c2, c3;n 数据类型数据类型是不同形式的信息在内存中分配方式的基本约是不同形式的信息在内存中分配方式的基本约定,是构造程序的基础。定,是构造程序的基础。n 每种程序设计语言中都定义了自己的基本数据类型集
26、合每种程序设计语言中都定义了自己的基本数据类型集合和利用基本数据类型定义的扩展数据类型。和利用基本数据类型定义的扩展数据类型。n 常量、变量甚至函数都有自己的数据类型。常量、变量甚至函数都有自己的数据类型。n C语言等结构化程序设计语言还为用户提供了自定义数语言等结构化程序设计语言还为用户提供了自定义数据类型的手段。据类型的手段。n从抽象数据类型的观点看类和对象从抽象数据类型的观点看类和对象n 一个数据类型的定义包括一个值集和一个作用于该值集的操作集。n 如C语言中的int型(整型),n 其值集为A= n| nN, -32768n+32767 , n 其操作集是加、减、乘、整除、取模等等。n
27、面向对象语言中的类是一种新的用户自定义数据类型面向对象语言中的类是一种新的用户自定义数据类型“类类”类型。类型。n 类的所有数据成员形成类类型的值集,类的所有方法类的所有数据成员形成类类型的值集,类的所有方法成员形成类类型的操作集。成员形成类类型的操作集。n 以这个观点来看,对象就是“类类型”的一个实例,通常以变量的形式出现。如果定义了一个类名为book的类,则创建book类的对象b1, b2的语法形式:book b1, b2;和声明基本数据类型变量的语法形式:int a, b; double x;完全一样。可以像使用整型变量a、b,双精度型变量x一样使用book型变量b1、b2。 类类型能像
28、内部数据类型一样工作。区别在于程序员定义的类是为了描述具体问题,模拟问题空间中的对象。实际上,程序员通过增添自己所需要的新类对程序设计语言本身进行了扩展。n对象中所包含的方法实际上就是过程或函数,方法一定属于某个特定类的对象,是实现对象功能算法的代码块。n在编写方法实现代码时仍应遵循结构化的原则,使用单入口单出口的几种基本控制结构。n关于“方法”n 在结构化程序设计中,过程是由使用在结构化程序设计中,过程是由使用者显式调用的独立实体,对于相同的输者显式调用的独立实体,对于相同的输入参数,每次过程调用有相同的结果。入参数,每次过程调用有相同的结果。n 而在面向对象程序计中,过程作为对而在面向对象
29、程序计中,过程作为对象的方法,不再是独立存在的实体,而象的方法,不再是独立存在的实体,而是对象功能的体现。这使得对象可以理是对象功能的体现。这使得对象可以理解为一台自动机。对象的私有数据可以解为一台自动机。对象的私有数据可以看作自动机的状态。对象的状态只能由看作自动机的状态。对象的状态只能由对象的方法改变。对象的方法改变。n 对象状态的改变是通过向对象发送消息来实现的。所谓发送消息,就是从对象外部调用对象的公有方法。n 发送消息不同于一般的过程调用,发送消息不同于一般的过程调用,发送消息只是触发自动机,同样的输发送消息只是触发自动机,同样的输入参数时,可能因为自动机状态不同入参数时,可能因为自
30、动机状态不同而有不同的输出结果。而有不同的输出结果。n2. 3 类的基本特性类的基本特性 n 2.3.1 封装性封装性 (Encapsulate)n n类的三大基本特性:n封装性、继承性和多态性n类是数据成员和方法成员的封装体。封装不仅仅是将数据和方法这两种不同的语言成分捆绑在一起,它还具有数据隐藏的机制。n数据隐藏是通过限制数据的访问权限实现的数据隐藏是通过限制数据的访问权限实现的。一个类中的数据通常被声明为私有的。不允许从。一个类中的数据通常被声明为私有的。不允许从类的外部直接访问。类的外部直接访问。n封装和数据隐藏封装和数据隐藏不仅防止了数据从外部破坏的可能性,更保证了对象对于其边界以外
31、的外部世界作为一个自足的、透明的实体存在。 n引入对象的封装机制的目的是将对象的使用者和设计者区分开来。nn类的公有方法是对象向对象的使用者开放的接口(Interface)。n 从对象与其外部世界的关系来看,对象是一个在系统中负有一定责任的服务器。n 外部世界的事件,如人机交互、其它对象的状态改变等等,可以看作请求对象服务的客户。n 对象通过公有方法,向外部声明自己提供哪些服务,每个方法的参数说明了怎样使用这些服务。 n 2.3.2 继承继承性性 (Inheritance)n n 人类对于客观事物的认识过程是没有止境的。在分类问题上也是这样,随着认识水平的提高,原有的类需要划分成若干个子类,子
32、类又可以划分子类的子类,。这种划分最终形成一个树状层次体系结构。n面向对象程序设计中通过类的继承性,能够很好地模拟这种分类方式。n面向对象中类的继承性描述两个类之间的一种特殊面向对象中类的继承性描述两个类之间的一种特殊关系,即上面所说的关系,即上面所说的“父父- -子关系子关系”。面向对象语言中允许。面向对象语言中允许利用一个已定义的类来定义一个新类,通过这种利用,形利用一个已定义的类来定义一个新类,通过这种利用,形成两个类之间的成两个类之间的继承关系继承关系。这个已定义的类称为。这个已定义的类称为基类基类,新,新定义的类则称为它的定义的类则称为它的子类子类。子类除了包含基类的所有成员。子类除
33、了包含基类的所有成员之外,又增加了自己特有的新成员。之外,又增加了自己特有的新成员。n特殊类n一般类n一般类n特殊类n(b)类的特征集合n(a)类的实例集合n图 1.2 一般类与特殊类的关系n 在由一个类划分出子类的过程中,子类必须具有其父类的所有特征,同时又具有父类中其它成员所没有的新特征。从成员集合来看,父类包含了子类的所有成员。从各自信息量从成员集合来看,父类包含了子类的所有成员。从各自信息量的多少来看,有的多少来看,有“子大于父子大于父”的特点,的特点,因为要描述一个子类,必须添加有别于父类中其它成员的新的信息。类间的这种类间的这种“父子父子关系关系”反映了类的一般性和特殊性,也称为反
34、映了类的一般性和特殊性,也称为“一般一般- -特殊关系特殊关系”。n 子类定义的伪代码形式如下:子类定义的伪代码形式如下:n 新类声明:子类名新类声明:子类名1 1 继承自:继承自: 基类名基类名1 1n n 数据成员;数据成员;n n 方法成员;方法成员;n n n 子类对象在内存中所占的存储空间一定大于其父类。继承机制使得子类对象创建时首先要拷贝父类对象的所有成员,既包括数据成员也包括方法成员,不管是公有的还是私有的。在为拷贝而来的成员分配内存储空间之后,再为子类的特有成员分配存储空间。一个子类对象的封装实体,在程序运行时与其父类对象是完全独立的。子类对象在创建时对父类对象子类对象在创建时
35、对父类对象的拷贝提供了一种高效的源代码级的的拷贝提供了一种高效的源代码级的软件重用方法。软件重用方法。 n继承又分为单继承和多继承。继承又分为单继承和多继承。n单继承指子类只由一个基类继承而来。单继承指子类只由一个基类继承而来。当一个子类有不止一个基类时则称为多继承。当一个子类有不止一个基类时则称为多继承。nn多继承的例子在生活中并不少见。比如一个医学院的在职研究生可能既是医生又是学生,他既是医生类的实例又是学生类的实例。 n 2.3.1 多态多态性性 (Polymorphism)n n多态多态性性是面向对象技术真正的优势所在。关于多态是面向对象技术真正的优势所在。关于多态性有以下几种等价描述
36、:性有以下几种等价描述:n多态性:指程序对同一名字或符号在不同情况下做出不同解释的能力。n多态性:为同一个函数和运算符定义多个不同的执行版本。n不同对象可以调用相同名称的函数,并导致完全不同的行为(behavior)的现象称为多态性。7.1 面向对象分析方法概述面向对象分析方法概述一、引例一、引例用结构化方法对某餐馆主要业务建模:业务流程设计模型,自上而下、基于功能分解提供就餐服务点菜做菜上菜结账备菜炒菜n若用处理此例则要考虑的是: n1. 完成顾客就餐常会涉及哪些人或物(即对象)?n2. 每个对象有哪些职责?顾客就餐()服务员点菜()上菜()结账()面点师制作主食()厨师炒菜()帮厨备菜()
37、餐馆业务静态模型(类图): 服务员: 厨师: 帮厨: 面点师: 顾客点菜结账炒菜备菜制作主食上菜餐馆业务动态模型(顺序图)二、面向对象方法的发展二、面向对象方法的发展n面向对象编程面向对象编程(OOP)n面向对象设计面向对象设计(OOD)n面向对象分析面向对象分析(OOA)合理的软件开发过程:OOAOOD OOPn 对象对象(object)n 类类(class)n 封装封装(encapsulation)n 消息消息(message)n 继承继承(inheritance)和多态性和多态性(polymorphism)n 关系关系(relationship)三、面向对象方法的主要概念三、面向对象方法
38、的主要概念 对象对象n在在OO方法中,对象是一些属性及专用服务的封装体,它是问方法中,对象是一些属性及专用服务的封装体,它是问题空间中一些事物的抽象。对象具有一组属性和一组操作。题空间中一些事物的抽象。对象具有一组属性和一组操作。这些属性的值刻画一个对象的状态;这些操作是对象的行为这些属性的值刻画一个对象的状态;这些操作是对象的行为(即服务即服务),通过它们改变对象的状态,通过它们改变对象的状态(即属性值即属性值)n系统中的对象在生命周期的不同阶段有不同的表示形式:系统中的对象在生命周期的不同阶段有不同的表示形式:nOOA提供的对象概念比较接近现实世界的客观事物提供的对象概念比较接近现实世界的
39、客观事物,模型模型较粗略较粗略nOOD进行细化并转化为软件对象进行细化并转化为软件对象nOOP需要写出具体的程序代码需要写出具体的程序代码countervalueinit()decrease()increase()n 例如,一个对象计数器:n OOA过程发现计数器有一个属性用以保存计数值,计数器可提供递增/减服务n OOD则据分析模型提供设计模型,如右图n OOP阶段,计数器对象将定义为类,依具体语言的语法定义数据结构并写代码,其它程序可创建并使用counter实例n 描述对象行为的服务、操作和方法这几个概念,在OO方法中是同义词,使用时存在细微差别。n 从对象外部看,对象可接受其它对象提出的
40、服务(service)请求,执行某些行为为外界提供某项服务。服务的概念一般用于分析阶段n 操作(operation)是指为实现某些行为的算法抽象,这些算法对外以函数接口的方式提供。操作一般用于设计阶段n 方法(method)常侧重于算法的具体实现,一般用于详细设计和编程阶段nOO方法中类的定义:具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,包括对所有属性和操作的声明。类也称为对象类(object class)n类是用来创建对象的模板。一个对象是该对象所在类的一个实例(instance),即实例是以类为模板创建的一个特定对象。类是抽象虚无的,实例是具体存在的n在
41、OOP中,类是静态的,类的存在、语义和关系在程序执行前就已定好;对象是动态的,在程序运行过程中根据类的定义来创建或删除对象实例。每个对象实例有自己独立的运行空间,保存自己特有的属性 类类n抽象类(abstract class):若一个类中没有包含足够的信息来描绘具体的对象,这样的类就是抽象类n接口(interface)是一些方法的集合,但所有方法都是抽象的,只有声明而没有程序体两种特殊的类:抽象类两种特殊的类:抽象类和接口和接口 封装封装n 消息消息n继承n多态性:相同的操作可作用于多种类型的对象并获得不同的结果。在OOP中多态的实现有两种方法:n由覆盖(override)实现动态多态n由重载
42、(overload)实现的静态多态 继承和多态性继承和多态性 关系关系n类关系:存在于两个类之间,或者类与接口之间n继承/泛化(generalization)n实现(realization)n对象关系:是存在于两个或两个以上对象之间的联系n关联(association)表达对象与对象的静态联系,是一种长期关系。特例:整体和部分关系n依赖(dependency)表达对象与对象的动态联系,是一种短期关系四、面向对象方法的优势四、面向对象方法的优势n对问题空间的理解更直接,更符合人们认识客观事物的思维规律n系统分析和系统设计使用同一模型,不存在过渡困难n开发出来的信息系统从本质上具有更强的生命力n易
43、于扩充和维护五、统一建模语言五、统一建模语言UMLUML基于基于UML面向对象的分析与设计面向对象的分析与设计n功能需求:描述系统预期应提供的功能或服务,包括系统需要哪些输入、对输入作出何反应以及对系统具体行为的描述n非功能需求(也称技术需求):指那些除功能以外的系统性能和系统特性的需求,包括可用性、可靠性、响应时间、吞吐率、可移植性等等7.2 用例建模用例建模一、基于用例的需求分析一、基于用例的需求分析n列出候选需求n理解系统的语境n系统分析人员需要了解用户的业务模型。业务模型详细说明了系统将支持哪些业务过程,通过业务过程可以确定完成该过程需要哪些工作人员、他们的职责以及他们要执行操作n捕获功能性需求n使用用例来确定功能性需求。在理解系统语境之后,收集所有人员和系统可能的交互就能提取系统功能性需求n捕获非功能性需求获取需求的一些常用步骤获取需求的一些常用步骤n用例是对于一组动作序列的描述,系统执行这些动作会对特定的参与者(actor)产生可观测的、有价值的结果I. Jacobsonn用例是各种系统受益人(stakehol
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金融业务介绍
- 生涯规划书高中
- 施工方案方法及技术措施、保证措施
- 金融企业培训订制方案
- 酒店营销策划方案范文
- 32.安全生产保障措施方案-恶劣作业环境条件下机械设备保护及保障措施
- 安全生产保障措施方案-临时施工用电及外电安全防护措施
- 重大手术报告审批制度与流程
- 电力安全警示课件
- 护理管理质量
- 国家开放大学电大《建筑制图基础》机考三套标准题库及答案3
- 降低故障工单回复不合格率
- 可涂色简笔画打印(共20页)
- 灯光架介绍及使用说明
- 十一学校行动纲要
- GB 1886.6-2016 食品安全国家标准 食品添加剂 硫酸钙(高清版)
- 关于房屋征收及土地收储过程中的税收政策(仅供参考)
- 唯一住房补贴申请书(共2页)
- 单面多轴钻孔组合机床动力滑台液压系统课程设计
- 中医养生脾胃为先PPT文档
- 门窗工程成品保护方案(附图)
评论
0/150
提交评论