1、软件工程导论课件第9章 面向对象方法学引论pptConvertor第9章 面向对象方法学引论9.1 面向对象方法学概述9.2 面向对象的概念9.3 面向对象建模9.4 对象模型9.5 动态模型9.6 功能模型9.7 3种模型之间的关系目标了解面向对象方法学了解面向对象基本概念了解面各向对象模型建立建立系统对象模型建立系统功能模型建立系统动态模型9.1面向对象方法学概述 9.1.1 传统方法学缺点9.1.2 面向对象开发方法9.1.3 面向对象方法要点9.1.4 面向对象方法组成9.1.5 面向对象方法过程9.1.6 面向对象方法优点9.1.1 传统方法的缺点结构化分析方法:面向功能 软件结构严
2、重依赖于功能,而功能是软件开发中最不稳定的因素。数据和操作相分离9.1.2 面向对象开发方法OOSD (Object-Oriented Software Development)是一种 把面向对象的思想应用于软件开发过程,指导开发活动的系统方法。 面向对象=对象 (objects) +类 (classes) +继承(inheritance) +通信 (communication with messages)9.1.3 面向对象方法的要点认为客观世界是由各种对象组成的,任何事物都是对象。 把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。 按照子类(或称
3、为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。 对象彼此之间仅能通过传递消息互相联系。9.1.4 面向对象方法组成OOSD由三部分组成: OOA(Object-Oriented Analysis)面向对象的分析 OOD(Object-Oriented Design)面向对象的设计 OOP (Object-Oriented Program)面向对象的程序设计OOA强调的是对一个系统中的对象特征和行为的定义。建立系统的三类模型。OOD与OOA密切配合顺序实现对现实世界的进一步建模。OOP是面向对象的技术中发展最快的,使用面向对象的程序设计语言,进行编码
4、。9.1.5 面向对象开发过程(I)9.1.5 面向对象开发过程(II)9.1.5 面向对象开发过程(III)9.1.5 面向对象开发过程(IV)9.1.6 面向对象方法的优点1.与人类习惯的思维方式一致2.稳定性好3.可重用性好4.可维护性好9.2 面向对象的概念9.2.1 对象9.2.2 类9.2.3 实例9.2.4 消息9.2.5 方法9.2.6 属性9.2.7 封装9.2.8 继承9.2.9 多态性9.2.1 对象(I)是客观事物或概念的抽象表述,即对客观存在的事物的描述统称为对象对象可以是事、物、或抽象概念 ,是将一组数据和使用该数据的一组基本操作或过程封装在一起的实体。9.2.1
5、对象(II)对象的特点(1) 以数据为中心。 (2) 对象是主动的。(3) 实现了数据封装。(4) 本质上具有并行性。(5) 模块独立性好。9.2.2 类类又称对象类(Object Class),是一组具有相同属性和相同操作的对象的集合。在一个类中,每个对象都是类的实例(instance) ,它们都可以使用类中提供的函数。9.2.3 实例实例就是由某个特定的类所描述的一个具体的对象。类是对具有相同属性和行为的一组相似的对象的抽象,类在现实世界中并不能真正存在。9.2.4 消息消息就是向对象发出的服务请求(互相联系、协同工作等)。一个消息包含3个部分:接收消息的对象,消息名,消息变元。例如,My
6、Circle是Circle类的一个实例,发送消息如下: MyCircle.show(GREEN);9.2.5 方法方法就是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。在C+语言中把方法称为成员函数。9.2.6 属性属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。9.2.7 封装对象封装了对象的数据以及对这些数据的操作。9.2.8 继承(I)继承是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。单重继承:子类仅从一个父类继承属性和方法多重继承:子类可从多个父
7、类继承属性和方法9.2.8 继承(II)9.2.9 多态性在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要来实现这个行为。当对象接收到发送给它的消息时,根据该对象所属于的类动态选用在该类中定义的实现算法9.3 面向对象建模(I)面向对象方法最基本的原则,是按照人们习惯的思维方式,用面向对象观点建立问题域的模型,开发出尽可能自然地表现求解方法的软件。OMT( Object Model Technology)是一种软件工程方法学,支持整个面向对象软件生命周期,它覆盖了问题构成、分析、设计和实现等阶段。9.3 面向对象建模(II)面向对象开发软件,
8、需要建立3种形式的模型。对象模型。描述系统数据结构数据结构。动态模型。描述系统控制结构执行操作。功能模型。描述系统功能数值变化。这三种模型从不同侧面描述了对系统的需求。在面向对象的分析(OOA)阶段,这三种模型是必不可少的。9.4 对象模型对象模型描述了系统的静态结构。OO方法强调围绕对象而不是功能来构造系统。使用统一建模语言UML (Unified Modeling Language)提供的类图来建立对象模型。UML用例图是建立功能模型的有力工具。9.3 面向对象建模UML(Unified Modeling Language)产生于90年代中期。它不仅统一了Booch、OMT和OOSE方法中
9、的概念和表示法,而且对其作了进一步扩展,最终成为在面向对象技术领域占主导地位的、并被大众所接受的标准建模语言。1、UML概述UML的发展历程(下图)UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行可视化建模。UML不是一个开发过程,也不是一个方法,但允许任何一种开发过程和面向对象方法使用它。 统一建模语言UML9.3 面向对象建模UML事物关系图结构事物行为事物组织事物辅助事物静态图实现关系泛化关系依赖关系关联关系动态图交互状态机包注释顺序图活动图用例图实施图类图构件图对象图状态图协作图节点组件活动类协作接口类用例3030(1) 统一标准 UML统一了Booch、OM
10、T和OOSE等方法中的基本概念,已成为OMG的正式标准,提供了标准的面向对象的模型元素的定义和表示。(2) 面向对象 UML还吸取了面向对象技术领域中其他流派的长处。UML符号表示考虑了各种方法的图形表示,删掉了大量易引起混乱的、多余的和极少使用的符号,也添加了一些新符号。 (3) 可视化、表示能力强 系统的逻辑模型或实现模型都能用UML模型清晰的表示,可用于复杂软件系统的建模。(4) 独立于过程 UML是系统建模语言,独立于开发过程。 (5) 易掌握、易用 由于UML的概念明确,建模表示法简洁明了,图形结构清晰,易于掌握使用。面向对象建模31319.4.1类图的基本符号(I)1. 定义类UM
11、L中类的图形符号为长方形,用两条横线把长方形分成上、中、下3个区域,3个区域分别放类的名字、属性和服务9.4.1类图的基本符号(II)属性用来描述类的特征,表示需要处理的数据。定义如下:2. 定义属性visibility attribute-name : type = initial-value property-string 可见性 属性名 :类型 = 缺省值 性质串其中:可见性(visibility)表示该属性对类外的元素是否可见。分为: public(+) 公有的,即模型中的任何类都可以访问该属性。 private(-) 私有的,表示不能被别的类访问。 protected(#) 受保护的
12、,表示该属性只能被该类及其子类访问。 如果可见性未申明,表示其可见性不确定。9.4.1类图的基本符号(III)3. 定义操作对数据的具体处理方法的描述则放在操作部分,操作说明了该类能做些什么工作。UML描述操作的语法格式如下:操作可见性的定义方法与属性相同。参数表是用逗号分隔的形式参数的序列。描述一个参数的语法如下:参数名: 类型名=默认值visibility operating-name(parameter-list): return-type property- string 可见性 操作名(参数表):返回类型性质串9.4.2 表示关系的符号(I)类与类之间关系有:关联聚集泛化(继承)依赖
13、细化9.4.2.1 关联(I)关联表示两个类的对象之间存在某种语义上的联系。(1) 普通关联普通关联示例9.4.2.1 关联(II)在表示关联的直线两端可以写上重数(multiplicity),它表示该类有多少个对象与对方的一个对象连接。重数的表示方法通常有:01 表示0到1个对象0*或* 表示0到多个对象1+或1* 表示1到多个对象115 表示1到15个对象3 表示3个对象如果图中未明确标出关联的重数,则默认重数是1。9.4.2.1 关联(III)(2) 关联的角色在任何关联中都会涉及到参与此关联的对象所扮演的角色(即起的作用),在某些情况下显式标明角色名有助于别人理解类图。如果没有显式标出
14、角色名,则意味着用类名作为角色名。递归关联(Recursive association)一个类与本身有关联关系9.4.2.1 关联(IV)(3) 限定关联限定关联通常用在一对多或多对多的关联关系中,可以把模型中的重数从一对多变成一对一,或从多对多简化成多对一。在类图中把限定词放在关联关系末端的一个小方框内。9.4.2.1 关联(V)(4) 关联类为了说明关联的性质可能需要一些附加信息。可以引入一个关联类来记录这些信息。关联中的每个连接与关联类的一个对象相联系。关联类通过一条虚线与关联连接。9.4.2.1 关联(VI)关联的语言实现1-1:Public class Programmer Comp
15、uter * GetUsedComputer(void)Public class ComputerProgrammer * GetQuotingProgrammer(void)9.4.2.1 关联(VI)关联的语言实现1-1:Public class Programmer Computer * GetUsedComputer(void)Public class ComputerProgrammer * GetQuotingProgrammer(void)9.4.2.1 关联(VII)1-nPublic class CompanyProduct * GetProduct();Private Pr
16、oduct * Product,;Public class ProductCompany * GetCompany();9.4.2.1 关联(VIII)限定关联Public class BookshelfBook * GetHoldingBook(int bookID);Public class BookBookShelf * GetBookShelf(void);9.4.2.2 聚集(I)聚集是一种特殊的关联,它指出类间的“整体-部分”关系。(1) 共享聚集如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。9.4.2.2 聚集(II)(2) 组合聚集如
17、果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失,则该聚集称为组合聚集。9.4.2.3 泛化(I)UML中的泛化关系就是通常所说的继承关系。(1) 普通泛化附加标记注释普通泛化9.4.2.3 泛化(II)(2) 受限泛化可以给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称为受限泛化。预定义的约束有4种: 多重、不相交、完全和不完全。下图:多重继承9.4.2.3 泛化(III)完全继承指的是父类的所有子类都已在类图中穷举出来了,图示符号是指定完全约束。不完全继承与完全继承恰好相反,父类的子类并没有都穷举出来,不完全继承是一般情况下默认的继
18、承关系。图9.13 复杂类图示例组合聚集组合聚集抽象类组合聚集抽象操作泛化具体实现9.4.2.4 依赖依赖关系表示: 其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。9.4.2.5 细化当对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系。假设两个模型元素A和B描述同一个事物,它们的区别是抽象层次不同,如果B是在A的基础上的更详细的描述,则称B细化了A,或称A细化成了B。注意是虚线,实线就成了泛化习题。现有一医院病房监护系统,病症监视器安置在每个病房,将病人的病症信号实时传送到中央监视系统进行分析处理。在
19、中心值班室里,值班护士使用中央监视系统对病员的情况进行监控,根据医生的要求随时打印病人的病情报告,定期更新病历,当病症出现异常时,系统会立即自动报警, 并实时打印病人的病情报告,立及更新病历。 建立相应的对象模型,用类图表示。首先给出类的名称及相应的属性和方法动态模型描述系统控制结构。通常用状态图表示。9.5 动态模型下降状态在第一层上升状态向第一层下降空闲状态上升到达到达上升超时下降到达第一层功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,通常,功能模型由一组数据流图组成。UML提供的用例图也是进行需求分析和建立功能模型的强有力工具。9.6 功能模型9.7 3种模型之间的关系三种模型描述了系统的不同方面对象模型动态模型功能模型对象的静态结构及相互关系与时间和顺序有关的系统性质与值的变化有关的系统性质描述系统的数据结构控制结构系统的功能“干事的主体”“什么时候干”“干什么”功能模型与对象模型的关系-对象模型描述了功能模型中的动作对象,数据存储以及数据流结构-功能模型中的处理对应于对象模型中的操作动态模型与对象模型的关系-状态转换驱使行为发生,这些行为在DFD中被映射成处理,它们同时与对象模型的操作相对应-针对每个建立的动态模型描述了类实例的生命周期或运行周期动态模型与功能模型的关系-功能模型中的处理可能产生动态模型中的事件。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1