《面向对象的分析和设计》由会员分享,可在线阅读,更多相关《面向对象的分析和设计(187页珍藏版)》请在金锄头文库上搜索。
1、软件工程,面向对象的分析和设计,2,内容摘要,面向对象的基本概念 面向对象的分析和设计过程 UML概述 用况建模 静态建模 动态建模 物理体系结构建模,3,内容摘要,面向对象的基本概念 面向对象的分析和设计过程 UML概述 用况建模 静态建模 动态建模 物理体系结构建模,4,Peter Coad和Edward Yourdon提出用下列等式识认面向对象方法: 面向对象 = 对象(object)+ 分类(classification)+ 继承(inheritance)+ 通过消息的通信(communication with messages) 可以说,采用这四个概念开发的软件系统是面向对象的,5,
2、面向对象方法的出现很快受到计算机软件界的青睐,并成为20世纪90年代的主流开发方法。我们可以从下列几个方面来分析其原因: 从认知学的角度来看,面向对象方法符合人们对客观世界的认识规律。 面向对象方法开发的软件系统易于维护,其体系结构易于理解、扩充和修改。 面向对象方法中的继承机制有力支持软件的复用。,6,面向对象的基本概念,1. 对象(object)对象是指一组属性以及这组属性上的专用操作的封装体。属性(attribute)通常是一些数据,有时它也可以是另一个对象。每个对象都有它自己的属性值,表示该对象的状态。对象中的属性只能通过该对象所提供的操作来存取或修改。操作(operation)(也称
3、方法或服务)规定了对象的行为,表示对象所能提供的服务。,7,封装(encapsulation)是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。封装的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。一个对象通常可由对象名、属性和操作三部分组成。,8,2. 类(class)类是一组具有相同属性和相同操作的对象的集合。一个类中的每个对象都是这个类的一个实例(instance)。 类是创建对象的模板,从同一个类实例化的每个对象都具有相同的结构和行为。,9,10,3. 继承(inheritance)继承是类间的基本关系,它是基于层次关系的不同类共享数据和操作
4、的一种机制。父类中定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,可以继承其父类(或祖先类)的属性和操作,还可以对父类(或祖先类)中的操作重新定义其实现方法。,11,12,有时,我们定义一个类,它把一些类组织起来,提供一些公共的行为,但并不需要使用这个类的实例,而仅使用其子类的实例。我们把这种没有实例的类称为抽象类(abstract class)。在抽象类中可以定义抽象操作,抽象操作指:只定义这个类的操作接口,不定义它的实现,其实现部分由其子类定义。抽象操作操作名用斜体字表示,也可以在操作特征(signature)后面加上特征字符串abstract。,13,14,如果
5、一个子类只有唯一一个父类,这个继承称为单一继承。如果一个子类有一个以上的父类,这种继承称为多重继承。,15,4. 消息(message)消息传递是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其服务。一个消息通常包括接收对象名、调用的操作名和适当的参数(如果有必要的话)。消息只告诉接收对象需要完成什么操作,但并不指示接收者怎样完成操作。消息完全由接收者解释,接收者独立决定采用什么方法完成所需的操作。,16,5. 多态性(polymorphism)多态性是指同一个操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。例如“画”操作,作用在“矩形”对象上,则在屏幕上画一个矩形,作
6、用在“圆”对象上,则在屏幕上画一个圆。也就是说,相同操作的消息发送给不同的对象时,每个对象将根据自己所属类中定义的这个操作去执行,从而产生不同的结果。,17,6. 动态绑定(dynamic binding)动态绑定是指在程序运行时才将消息所请求的操作与实现该操作的方法连接起来。传统的程序设计语言的过程调用与目标代码的连接(即调用哪个过程)放在程序运行前(即编译时)进行(称为静态绑定),而动态绑定则是把这种连接推迟到运行时才进行。动态绑定是一种在运行时确定被执行代码的技术。,18,在一般与特殊关系中,子类是父类的一个特例,所以父类对象可以出现的地方,也允许其子类对象出现。因此在运行过程中,当一个
7、对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。,19,if 条件 then p := t ;else p := r ; area := p.getarea ;,Var p : polygon ; Var t : triangle := triangle.new ; Var r : rectangle := rectangle.new ;,20,内容摘要,面向对象的基本概念 面向对象的设计过程 UML概述 用况建模 静态建模 动态建模 物理体系结构建模,21,面向对象的设计过程,面向对象设计的一般步骤如下: 系统设计 将子系统分配到处理器 选择实现
8、数据管理、界面支持和任务管理的设计策略 为系统设计合适的控制机制 复审并考虑权衡(折衷),22,对象设计 在过程级别(procedural lavel)设计每个操作,即设计每个操作的实现细节 定义内部类 为类属性设计内部数据结构 消息设计使用对象间的协作和对象-关系模型,设计消息模型 复审复审设计模型并在需要时迭代。,23,1. 系统设计 1) 将分析模型划分成子系统在OO系统设计中,我们把分析模型中紧密相关的类、关系等设计元素包装成子系统。通常,子系统的所有元素共享某些公共的性质,它们可能都涉及完成相同的功能;它们可能驻留在相同的产品硬件中;或者它们可能管理相同的类和资源。子系统由它们的责任
9、所刻画,即,一个子系统可以通过它提供的服务来标识。在OOD中,这种服务是完成特定功能的一组操作。,24,子系统的设计准则是: (1) 子系统应具有定义良好的接口,通过接口和系统的其它部分通信; (2) 除了少数的“通信类” 外,子系统中的类应只和该子系统中的其它类协作; (3) 子系统的数量不宜太多; (4) 可以在子系统内部再次划分,以降低复杂性。,25,2) 标识问题本身的并发性,并为子系统分配处理器通过对对象-行为模型的分析,可发现系统的并发性。如果对象(或子系统)不是同时活动的,则它们不需并发处理,此时这些对象(或子系统)可以在同一个处理器上实现。反之,如果对象(或子系统)必须对一些事
10、件同时异步地动作,则它们被视为并发的,此时,可以将并发的子系统分别分配到不同的处理器,或者分配在同一个处理器,而由操作系统提供并发支持。,26,3) 任务管理设计 Coad和Yourdon提出如下管理并发任务对象的设计策略: (1) 确定任务的类型; (2) 必要时,定义协调者任务和关联的对象; (3) 将协调者任务和其它任务集成。通常可通过了解任务是如何被启动的来确定任务的类型,如事件驱动任务,时钟驱动任务。每个任务应该定义其优先级,并识别关键任务。当有多个任务时还可以考虑增加一个协调者任务,以控制这些任务协同工作。,27,4) 数据管理设计通常数据管理设计成层次模式,其目的是将数据的物理存
11、储及操纵与系统的业务逻辑加以分离。数据管理的设计包括设计系统中各种数据对象的存储方式(如内部数据结构、文件、数据库),以及设计相应的服务,即为要储存的对象增加所需的属性和操作。,28,5) 资源管理设计OO系统可利用一系列不同的资源(如磁盘驱动器、处理器、通信线路等外部实体或数据库、对象等抽象资源),很多情况下,子系统同时竞争这些资源,因此要设计一套控制机制和安全机制,以控制对资源的访问,避免对资源使用的冲突。6)人机界面设计对大多数应用系统而言,人机界面本身是一个非常重要的子系统。人机界面主要强调人如何命令系统,以及系统如何向人提交信息。它包括窗口、菜单、报告的设计。,29,7) 子系统间的
12、通信子系统之间可以通过建立客户/服务器连接进行通信,也可以通过端对端(peer to peer)连接进行通信。我们必须确定子系统间通信的合约(contract),合约提供了一个子系统和另一个子系统交互的方式。,30,2. 对象设计对象设计是为每个类的属性和操作作出详细的设计,并设计连接类与它的协作者之间的消息规约。 1) 对象描述对象的设计描述可以采取以下形式之一: (1) 协议描述:描述对象的接口,即定义对象可以接收的消息以及当对象接收到消息后完成的相关操作; (2) 实现描述:描述传送给对象的消息所蕴含的每个操作的实现细节,实现细节包括有关对象私有部分的信息,即关于描述对象属性的数据结构的
13、内部细节和描述操作的过程细节。对对象的使用者来说,只需要协议描述就够了。,31,2)设计算法和数据结构为对象中的属性和操作设计数据结构和实现算法。,32,内容摘要,面向对象的基本概念 面向对象的分析和设计过程 UML概述 用况建模 静态建模 动态建模 物理体系结构建模,33,统一建模语言UML,Unified Modeling Language,34,模型元素模型元素指模型中的实体以及实体间相互连接的关系,35,视图与图,36,静态视图 静态视图对应用领域中的概念以及与系统实现有关的内部概念建模,主要由类以及类之间的相互关系组成,在静态视图中不描述依赖于时间的系统行为。静态视图用类图来展示。
14、设计视图 设计视图对应用自身的设计结构建模,例如,将设计结构扩展成:结构化类元,为实现功能所需的协作和定义接口的构件的组装。设计视图由内部结构图、协作图和构件图实现。,37,用况视图 用况视图对被称为执行者的外部代理(他与特定视点的主题交互)所感受到的主题(如系统)功能建模。用况视图的意图是列出系统中的用况和执行者,并显示哪个执行者参与了哪个用况的执行。用况的行为用动态视图,特别是交互视图来表示。用况视图用用况图来展示。,38,状态机视图 状态机视图对一个类的对象的可能生命历程建模。一个状态机包括用迁移连接的状态,每个状态对一个对象在其生命期中满足某种条件的一个时间段建模。当一个事件发生时,它
15、会导致触发对象的一个状态向另一个新状态的迁移,附加在迁移上的动作或活动也同时被执行。状态机视图用状态机图来展示。,39,活动视图 活动展示了包含在执行计算或工作流中的计算活动的控制流。一个动作是一个基本的计算步,一个活动结点是一组动作或子活动,一个活动可描述顺序的和并发的计算。活动视图用活动图来展示。 交互视图 交互视图描述系统各部分中消息交换的顺序。交互视图提供了系统中行为的整体视图,也就是说,它展示了多个对象间交叉的控制流。交互视图用顺序图和通信图来展示。,40,部署视图 部署视图描述了运行时结点上制品的分布。制品是一个物理实现单元,如一个文件,它也可以表示一或多个构件的实现(一种表现形式
16、)。结点是运行时表示计算资源的物理对象,如,计算机、设备或内存。部署视图允许对分配的结果和资源分配进行评估。部署视图用部署图来展示。,41,模型管理视图 模型管理视图对模型自身的组织建模。一个模型由一组保存模型元素(如类、状态机、用况)的包组成。包还可以包含其它的包,因此,一个模型从一个间接包含所有模型内容的根包(root package)开始。包是操纵模型内容的单元,还是访问控制和配置控制的单元。每个模型元素可以被一个包或另一个元素拥有。模型管理信息通常展示在包图中,它是类图的变种。,42,剖面(profile) UML是用一个元模型(metamodel)定义的,元模型是指描述建模语言自身的模型。通常元模型的改变是复杂的,也是危险的。剖面机制允许在不修改基础元模型的前提下对UML作有限的变化。UML包含三个主要的可扩展结构:约束(constraints)、版型(stereotypes)和标签值(tagged values)。 约束是以自然语言或特定形式语言的正文表示的语义条件或限制,约束写在花括号中(),如value0,or。版型是在基于现有各类模型元素的外形中定义模型元素的新类型,它本质上是一种新元类(metaclass)。版型可以扩展语义,但不能扩展原元模型类的结构。用 标记版型,如signal。标签值是贴在任何模型元素上的被命名的信息片。,