面向对象的分析与设计课件-基础篇.ppt
《面向对象的分析与设计课件-基础篇.ppt》由会员分享,可在线阅读,更多相关《面向对象的分析与设计课件-基础篇.ppt(91页珍藏版)》请在三一办公上搜索。
1、第一部分:基础篇,面向对象的分析与设计,2,从程序设计方法的角度看,面向对象是一种新的程序设计范型(paradigm),其基本思想是使用对象、类、继承、封装、聚合、关联、消息、多态性等基本概念来进行程序设计。,自20世纪80年代以来,面向对象方法已深入到计算机软件领域的几乎所有分支。它不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并进行问题求解,以及如何进行系统构造的软件方法学。从这个意义上讲:,面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。,1.1 什么是面向对象,第1章 面向对
2、象方法概论,3,面向对象方法的基本思想,一、从现实世界中客观存在的事物出发来构造系统强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象为系统中的对象,作为系统的基本构成单位。这可以使系统直接映射问题域,保持问题域中事物及其相互关系的本来面貌。,二、充分运用人类日常的思维方法强调运用人类在日常的逻辑思维中经常采用的思想方法与原则,例如抽象、分类、继承、聚合、封装、关联等等。这使得软件开发者能更有效地思考问题,并以其他人也能看得懂的方式把自己的认识表达出来。,4,主要特点:,用类和对象作为系统的基本构成单位。对象对应问题域中的事物,其属性和操作刻画
3、了事物的静态特征和动态特征,它们之间的继承关系、聚合关系、关联和消息如实地表达了问题域中事物之间实际存在的各种关系。因此,无论系统的构成成分,还是通过这些成分之间的关系而体现的系统结构,都可直接地映射问题域。,5,对问题域的认识(人),客观世界(问题域),计算机,自然语言,语言的鸿沟,编程语言,语言的过渡(人),编程(人),程序的理解和执行(机器),软件开发:对事物的认识和描述问题语言的鸿沟,1.2 从认识论看面向对象方法的形成,6,计算机,自然语言,客观世界(问题域),语言的鸿沟,语言的发展鸿沟变窄,程序的指令、数据、地址,都是由二进制的“0”和“1”构成的。离机器最近,能够直接地执行,然而
4、没有丝毫形象的意义,离人类的思维最远。,7,问题域,测试,编程,计算机,编程语言,自然语言,需求分析,总体设计,详细设计,软件工程学的作用传统的软件工程方法,8,问题域,OOA,计算机,自然语言,面向对象编程语言,OOD,OOP,OOT,软件工程学的作用面向对象的软件工程方法,9,1.3 面向对象方法的基本概念与原则,对象,类属性,操作封装继承,一般-特殊结构聚合,整体-部分结构关联消息多态持久对象,主动对象,10,对象是现实世界中某个实际存在的事物,它可以是有形的,比如一辆汽车,也可以是无形的,比如一项计划。对象是构成世界的一个独立单位。它具有自己的静态特征和动态特征。,属性是用来描述对象静
5、态特征的一个数据项。操作是用来描述对象动态特征的一个动作序列。对象标识就是对象的名字,有“外部标识”和“内部标识”之分。,对象,属性,操作,11,抽象,类,一般类,特殊类,抽象与分类:忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,叫做抽象。抽象是形成概念的基本手段。把具有共同性质的事物划分为一类,叫做分类。,类是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分。类的作用是用来创建对象,对象是类的一个实例。,12,不同程度的抽象可得到不同层次的分类,较多地忽略事物之间的差别可得到较一般的类,较多地注意
6、事物之间的差别可得到较特殊的类,运输工具,火车,汽车,飞机,卡车,轿车,轮船,车辆,13,定义1:如果类A具有类B的全部属性和全部操作,而且具有自己特有的某些属性或操作,则A叫做B的特殊类,B叫做A的一般类。一般类与特殊类又称父类与子类。,定义2:如果类A的全部对象都是类B的对象,而且类B中存在不属于类A的对象,则A是B的特殊类,B是A的一般类。可以证明,以上两种定义是等价的,一般类和特殊类的定义,14,封装:把对象的属性和操作结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。,封装的重要意义:使对象能够集中而完整地描述并对应一个具体的事物。体现了事物的相对独立性,使对象外部不能随意存取对
7、象的内部数据,避免了外部错误对它的“交叉感染”。对象的内部的修改对外部的影响很小,减少了修改引起的“波动效应”。,封装带来的问题:编程的麻烦执行效率的损失 解决办法:不强调严格封装,实行可见性控制。(混合型OOPL)例如:C+,15,继承:,特殊类拥有其一般类的全部属性与操作,称作特殊类对一般类的继承。,继承意味着自动地拥有,或曰隐含地复制,继承简化了人们对事物的认识和描述,非常有益于软件复用,是OO技术提高软件开发效率的重要原因之一。,由继承机制保证,由一组具有继承关系的类所组成的结构称作一般-特殊结构。它是一个以类为结点,以继承关系为边的连通的有向图。,继承关系的语义:“is a kind
8、 of”,16,多继承:允许一个特殊类具有一个以上一般类的继承方式称作多继承,17,聚合:,是两个类之间的一个二元关系,它表示一个类的对象实例以另一个类的对象实例作为其组成部分。聚合刻画了现实事物之间的构成关系或者拥有关系。,聚合关系的语义:“has a”或“is a part of”,紧密、固定的聚合方式又称为组合,18,整体-部分结构:,聚合关系又称整体-部分关系。由一组具有聚合关系的类所形成的结构称为整体-部分结构。它是一个以类为结点,以聚合关系为边的连通有向图。,19,关联:,两个或者多个类上的一个关系(即这些类的对象实例集合的笛卡儿积的一个子集合),其中的元素提供了被开发系统的应用领
9、域中一组有意义的信息。,20,用集合论的观点和系统需求讨论关联概念,关联是两个或者多个类上的一个关系,其中的元素提供了被开发系统的应用领域中一组有意义的信息。,例:设A和B是两个类,它们的对象实例集合是A=a1,a2,anB=b1,b2,bm,A和B的笛卡儿积AB=,这个笛卡儿积集合中有n m个元素,它们可以组合成2(n m)个子集合。但是只有某个子集合中的元素提供了被开发系统的应用领域中一组有意义的信息时,才有必要把它定义为系统中的一个关联。,21,例如:在一个教学管理系统中有教师、学生、教务员课程等类。系统中需要表明每一门课程由哪位教师承担、有哪些学生选修,因此需要在教师和课程之间定义一个
10、关联,在学生和课程之间也定义一个关联。该系统的教务员要为学生做注册、登记成绩等工作,但是不需要区别是哪个教务员为哪个学生做的,因此就不需要在教务员和学生这两个类之间定义关联。,教师,课程,学生,1,*,*,*,教务员,22,消息:消息是向对象发出的服务请求,目前在大部分面向对象的编程语言中,消息其实就是函数(或过程)调用。,但是,函数调用只是实现消息的方式之一,上述理解只适合于顺序系统,更一般的定义:消息是对象之间在一次交互中所传送的信息,23,教师,课程,学生,1,*,*,*,纠正一种误解认为在任何两个类之间只有存在关联才可能存在消息。实际上,关联和消息是两个截然不同的概念,二者是相互独立的
11、。,教务员,call,24,多态:,多态是指同一个命名可具有不同的语义。OO方法中,常指在一般类中定义的属性或操作被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。,实现机制:重写(override)在特殊类中对继承来的属性或操作重新定义其实现;动态绑定(dynamic binding)在运行时根据对象接收的消息动态地确定要连接哪一段操作代码;类属(generic)操作参量的类型可以是参数化的。百度讨论,25,其他:,持久对象:在程序运行结束后仍能继续保存的对象超出了程序运行时间,跨越了内外存空间实现途径:支持持久对象的OOPL,OO-DBMS,主动对象:至少有一个操作不需要接收消息
12、就能主动执行的对象。描述具有主动行为的事物描述并发执行的多个控制流,26,面向机器面向代数面向过程面向数据面向人面向文件面向信息面向应用面向功能面向数据流,面向对象是软件方法学的返朴归真,软件科学的发展历程中出现过许多“面向”,软件开发从过分专业化的方法、规则和技巧中回到了客观世界,回到了人们的日常思维,是软件理论的返朴归真。,面向对象,27,1.雏形阶段60年代挪威计算中心开发的Simula67面向对象语言的先驱和第一个里程碑(首先引入了类的概念和继承机制)。70年代CLU、并发Pascal、Ada和Modula-2等语言对抽象数据类型理论的发展起到重要作用(支持数据与操作的封装)。犹他大学
13、的博士生Alan Kay设计了一个实验性的语言Flex。从Simula 67中借鉴了许多概念,如类、对象、继承等。1972年Palo Alno研究中心(PARC)发布了Smalltalk-72,其中正式使用了“面向对象”这个术语。Smalltalk的问世标志着面向对象程序设计方法的正式形成。但是这个时期的Smalltalk语言还不够完善,1.4 OO(面向对象)方法的发展历史与现状,28,PARC先后发布了Smalltalk-72,76,78等版本,直至1981年推出该语言最完善的版本Smalltalk-80。Smalltalk-80的问世被今认为是面向对象语言发展史上最重要的里程碑。迄今绝大
14、部分面向对象的基本概念及其支持机制在Smalltalk-80中都已具备。它是第一个完善的、能够实际应用的面向对象语言。但是,Smalltalk开始几年的应用不够广泛,原因是:一种新的软件方法学被广泛接受需要一定的时间。商品化软件开发工作到87年才开始进行。追求纯OO的宗旨使许多软件开发人员感到不便。,2.完善阶段,29,3.繁荣阶段自80年代中期到90年代,是面向对象语言走向繁荣的阶段。其主要表现是大批比较实用的OOPL的涌现,例如 C+、Objective-C、Object Pascal、CLOS(Common Lisp Object System)、Eiffel、Actor等。OO编程语言
15、分为纯OO语言和混合型OO语言混合型语言是在传统的过程式语言基础上增加OO语言成分,在实用性方面具有更大的优势。此时的纯OO语言也比较重视实用性。,30,4、发展到软件生存周期前期阶段,计算机软件领域的很多新的方法与技术都有这样的发展经历,例如:结构化方法,形式化方法,软件复用。与其他方法相比,面向对象的方法与技术发展到软件生命期的前期阶段有着更为深刻的意义。,面向对象方法从编程发展到设计、分析,进而发展到整个软件生存周期。,31,5.最新发展编程语言语言+类库+可视化编程环境例如:Visual C+,Visual Basic,Delhpi分析与设计方法走向统一,形成统一建模语言UML结束各种
16、方法的概念及表示法不一致的局面,32,在软件生存周期全过程运用面向对象方法,:“尽管面向对象语言正取得令人振奋的发展,但编程并不是软件开发问题的主要根源。需求分析与设计问题更为普遍并且更值得解决。因此面向对象开发技术的焦点不应该只对准编程阶段,而应更全面地对准软件工程的其他阶段。面向对象方法真正意义深远的目标是它适合于解决分析与设计期间的复杂性并实现分析与设计的复用。面向对象的开发不仅仅是编程,必须在整个软件生存周期采用一种全新的方法,这一观点已被人们所接受。软件工程百科全书纽约,1994,33,第2章 不同的分析与设计方法,几种典型的建模方法功能分解法结构化方法信息建模法面向对象方法,本章内
17、容结构,34,历史上几种典型的建模方法,2.1 功能分解法(function decomposition)以系统需要提供的功能为中心来组织系统。首先定义各种功能,然后把功能分解为子功能对较大的子功能进一步分解,直到可给出明确的定义。根据功能子功能的需要设计数据结构。定义功能/子功能之间的接口。没有明确地区分分析与设计,建模过程:层层进行功能分解,35,功能模块,功能模块,功能模块,功能模块,功能模块,功能模块,功能模块,功能模块,功能模块,功能模块,得到的系统模型:由模块及其接口构成,优点与缺点:直接地反映用户的需求,所以工作很容易开始。不能直接地映射问题域,很难检验结果的正确性。对需求变化的
18、适应能力很差。局部的错误和修改很容易产生全局性的影响。,36,2.2 结构化方法结构化分析(structured analysis,SA)结构化设计(structured design,SD),结构化分析又称数据流法,其基本策略是跟踪数据流,即研究问题域中数据如何流动,以及在各个环节上进行何种处理,从而发现数据流和加工。得到的分析模型是数据流图(DFD),主要模型元素是数据流、加工、文件及端点,外加处理说明和数据字典。,结构化设计与功能分解法基本相同,基于模块的概念建立设计模型,分为概要设计和详细设计。概要设计:确定系统中包含哪些模块以及模块之间的调用关系,得到模块结构图(MSD)。详细设计:
19、描述每个模块内部的数据结构和操作流程。,37,数据流,加工,文件,起点,处理说明,数据词典,优点:有严格的法则,强调研究问题域。缺点:仍然是间接映射问题域;与结构化设计的概念不一致,从分析到设计的过渡比较困难;数据流和加工的数量太多,引起分析文档的膨胀。,终点,38,2.3 信息建模法(information modeling)由实体-关系法(E-R方法)发展而来。核心概念是实体和关系。实体描述问题域中的事物,关系描述事物之间在数据方面的联系,都可以带有属性。发展之后的方法也把实体称作对象,并使用了类型和子类型的概念,作为实体(对象)的抽象描述。,有人也称之为面向对象方法,但有以下差别:1.强
20、调的重点是信息建模和状态建模,而不是对象建模。2.没有把对实体属性所进行的操作封装到实体对象中。3.只有属性的继承,不支持操作的继承。4.没有采用消息通讯。,实体,属性,属性,属性,属性,关系,实体,m,n,E-R 图,信息模型,m,n,对象属性,关系属性,对象属性,39,2.4 面向对象方法面向对象的分析(OOA)面向对象的设计(OOD)运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统。把问题域中的事物抽象为对象,作为系统的基本构成单位其属性和操作刻画了事物的静态特征和动态特征完整地刻画了问题域中事物。用类作为对象的抽象描述,建立它们之间的继承、聚合、关联、消息等关系如实地
21、表达了问题域中事物之间的各种关系。封装、继承、聚合、关联、消息通讯等原则符合人类的日常思维使系统的复杂性得到控制。因此,得到的系统模型可以直接映射问题域。,40,不同的建模方法 体现于从不同的概念出发来认识问题域用不同的概念进行系统构造系统对现实世界的不同映射,41,审批,不同的方法对同一应用实例(电话安装业务系统)的不同效果结构化分析数据流和加工,登记,安装,开通,问题:不是直接映射问题域,与问题域事物相关的数据和操作不是围绕这些事物来组织的,而是分散在数据流和加工中;经常发生信息膨胀模型中的多个数据流,实现中其实只是一项数据;分析模型难以与设计模型及源程序对应。,用户登记表,用户登记表,用
22、户登记表,用户登记表,文件,用户信息,42,面向对象方法对象及其关系,用户登记表用户名登记人审批人施工队号码登记审批安装开通,用户,营业员,主管人,施工队,机房,1,*,1,*,1,*,call,call,call,call,直接映射了问题域中的实际事物;能够与程序形成良好的对应。,43,顾名思义,面向对象的分析(OOA),就是运用面向对象方法进行系统分析。首先,OOA是分析,是软件生存周期的一个阶段,具有一般分析方法共同具有的内容、目标及策略;但是,它强调运用面向对象方法进行分析,用面向对象的概念和表示法表达分析结果。基本任务:运用面向对象的概念对问题域进行分析和理解,将问题域中与系统责任有
23、关的事物抽象为系统中的类和对象,定义这些类和对象的属性与操作,以及它们之间所形成的各种关系。最终目标:建立一个满足用户需求、直接映射问题域的OOA模型及其规约。,2.4.1 什么是OOA,问题:OOA是需求分析还是系统分析?,44,2.4.2 什么是OOD不同时期有不同内容及特点,早期(80年代末期之前)OOD的特点:1、不是基于OOA的大多基于结构化分析结果(数据流图)2、是OO编程方法的延伸多数方法与编程语言有关,特别受Ada影响很大3、不是纯OO的对某些OO概念(如继承)缺少支持,搀杂一些非OO 概念(如数据流、包、模块等)4、不是只针对软件生存周期的设计阶段OOD中的“D”指的是Des
24、ign 或 Development多少涉及分析问题(如识别问题域的对象),但很不彻底早期的OOD可看作现今OOA&D方法的雏形,45,定义:面向对象的设计(OOD)就在是OOA模型基础上运用面向对象方法进行系统设计,目标是产生一个符合具体实现条件的OOD模型。,现今(90年代以后)OOD的特点:1.以面向对象的分析为基础,一般不依赖结构化分析。2.与相应的OOA方法共同构成一种OOA&D方法体系。OOA和OOD采用一致的概念与原则,但属于软件生存周期的不同阶段,有不同的目标及策略。3.较全面地体现面向对象方法的概念与原则。4.大多数方法独立于编程语言,通过面向对象的分析与设计所得到的系统模型可
25、以由不同的编程语言实现。,46,软件建模面临的挑战,1、问题域和系统责任复杂性日益增长问题域(problem domain):被开发系统的应用领域,即在现实世界中由这个系统进行处理的业务范围。系统责任(system responsibilities):所开发的系统应该具备的职能。随着硬件性能的提高和价格的下降,软件系统所面临的问题域和系统责任越来越复杂,因此系统也越来越庞大。,2、交流问题软件系统的开发需要各类人员之间频繁交流。领域的多样性使软件工程中的交流问题比与其他工程更为突出。有效的交流需要一种彼此都能理解的共同语言,否则将使彼此的思想难以沟通,很容易隐藏下许多错误。,2.4.3 OO方
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 分析 设计 课件 基础
链接地址:https://www.31ppt.com/p-6213406.html