780 likes | 965 Views
软件工程. 周志钊 zhouzhizhao08@163.com. 传统方法学. 结构分析与结构设计技术的本质是功能分解,是围绕实现处理功能的过程来构造系统的。结构化方法强调过程抽象和模块化,是以过程(或操作)为中心来构造系统和设计程序的。 然而用户需求的变化大部分是针对加工的,因此这种变化对基于过程的设计来说是灾难。. 面向对象的开发方法. 面向对象方法从现实世界中客观存在的事物出发来构造软件系统,强调在软件开发过程中面向客观事物,在系统构造中尽可能运用人类的自然思维方式。
E N D
软件工程 周志钊 zhouzhizhao08@163.com
传统方法学 • 结构分析与结构设计技术的本质是功能分解,是围绕实现处理功能的过程来构造系统的。结构化方法强调过程抽象和模块化,是以过程(或操作)为中心来构造系统和设计程序的。 • 然而用户需求的变化大部分是针对加工的,因此这种变化对基于过程的设计来说是灾难。
面向对象的开发方法 • 面向对象方法从现实世界中客观存在的事物出发来构造软件系统,强调在软件开发过程中面向客观事物,在系统构造中尽可能运用人类的自然思维方式。 • 从80年代后期开始,进行了面向对象分析(OOA)、面向对象设计(OOD)和面向对象程序设计(OOP)等新的系统开发方式模型的研究,在有些文献中统称为OO范型。
是现实世界事物或个体的抽象表示,对象包括事物个体的属性,还包括事物的操作。是现实世界事物或个体的抽象表示,对象包括事物个体的属性,还包括事物的操作。 对象属性值表示了对象的内部状态, 操作(服务)表示了对象可以完成的职责。 1.对象 在分析阶段,对象的操作是对象展现给外部的服务。 对象状态的改变是由对象的操作引起的。 对于民航机场的指挥控制系统,MU9114航班就是该问题域中的对象, 该对象的属性可以包含但不限于:航班号、起飞机场、降落机场、起飞时间、 降落时间,位置等;可能的操作包括离港、到港等。 当对MU9114航班对象进行离港操作时,对象的状态将从停靠状态改变成 飞行状态。对于学生管理系统,06-2班也是一个问题域内的对象, 其属性包括班级成员、班长、固定教室等,其操作可包括分配教室等等。 面向对象的基本概念
类是对具有共同特征的对象(属性和操作)的表示。类是对具有共同特征的对象(属性和操作)的表示。 类通常被认为是对象的模板,通过该模板可以创建特性一致的对象。对象是类的实例。 使用类创建对象的过程实际上是类的实例化过程。 2.类 民航机场的指挥控制系统中,从众多的航班对象可抽象出一个航班类, 通过这个类,反过来可以实例化很多的对象:MU9114、MU9115等等。 而在学生管理系统中,通过对04-2、05-1等对象的抽象,形成班级类。 一旦有了班级类,又可以实例化出更多班级,如07-1、08-2等等。 面向对象的基本概念
面向对象的基本概念 • 对象类的表示方法: 用三个区域的矩形框表示,从顶到底包括类名、属性表和操作表。
关系用于表达相关事物之间的关联 3.关系 考虑一个家庭,以及家庭内部所有成员之间的关联, 关系表示了事物之间语义上的联系。 比如父亲和孩子之间就有语义上的联系,这就是关系。 关系可以按照语义分很多种, 经常涉及到的就是继承、关联、依赖等。 面向对象的基本概念
继承关系模拟了现实世界的一般与特殊的关系(遗传关系)。它表示类之间的内在联系以及对属性和操作的共享,即子类可以沿用父类(被继承类)的某些特征。继承关系模拟了现实世界的一般与特殊的关系(遗传关系)。它表示类之间的内在联系以及对属性和操作的共享,即子类可以沿用父类(被继承类)的某些特征。 4.继承 面向对象的基本概念 例如,飞行器、汽车和 轮船可归于交通工具类, 飞行器类可以继承交通 工具类某些属性和操作。 继承性是面向对象程序设计语言的最主要的特点,是其他语言(如面向过程语言)所没有的。
面向对象的基本概念 继承使对象能够直接获得已有的性质和特征,而不必重复定义它们。 在面向对象的软件技术中,继承是表达类之间相似性的一种机制,即在已有的类的基础之上增量构造新的类。前者称为父类(或超类),后者称为子类。子类除自动拥有父类的全部属性和服务外,还可以进一步定义新的属性和服务。
下面给出用C++写的在日期表示形式上的类继承。下面给出用C++写的在日期表示形式上的类继承。 Class DATE { //用于表示亚洲日期的类 DATE (int yy=0; int mm=0; int dd=0 ; ) voide set_date ( intyy , int mm , int dd ); void get_date(int &yy, int&mm, int&dd); void printed (); protected: int year , month,day;} class E-DATE : public DATE {//用于表示欧洲日期的类,继承了用于表示亚洲日期的类 void printed-de ( );}
除遗传关系外,现实世界中还普遍存在着部分与整体的关系。除遗传关系外,现实世界中还普遍存在着部分与整体的关系。 5.聚合 聚合关系允许利用现有的类组成新类。 例如,飞机可由发动机、机身、机械控制系统、电子控制系统等构成。 汽车,它是由发动机、变速箱、底盘等组成, 那么我们就可以利用发动机、变速箱、底盘等类聚合成一个 新的类:汽车。 因为聚合是部分与整体的关系,因此, 不能像继承关系那样说汽车是发动机,正确的说法应该是: 发动机是汽车的组成部分。 面向对象的基本概念
消息是对象之间交互的唯一途径,一个对象要想使用其他对象的服务,必须向该对象发送服务请求消息。而接收服务请求的对象必须对请求做出响应。消息是对象之间交互的唯一途径,一个对象要想使用其他对象的服务,必须向该对象发送服务请求消息。而接收服务请求的对象必须对请求做出响应。 6.消息 当我们向银行系统的帐号对象发送取款消息时, 帐号对象将根据消息中携带的取款金额对客户的帐号 进行取款操作: 验证帐号余额,如果帐号余额足够,并且操作成功, 对象将把执行成功的消息返回给服务请求的发送对象, 否则发送交易失败消息。 面向对象的基本概念
在一般类中定义的属性或操作(服务)被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。在一般类中定义的属性或操作(服务)被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。 7.多态 多态性使得不同对象收到同一消息可产生完全不同的结果 例如:几何图形类的特殊类有“椭圆”、“多边形”等,其定义的服务“绘图”可被子类继承,但其功能却不同,分别是画出椭圆和多边形。进而多边形的子类“矩形”中绘图服务是画出一个矩形。 多态使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。 面向对象的基本概念
面向对象的基本概念 • 封装 • 封装是面向对象方法的一个重要原则。它有两个涵义:第一个涵义是把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象);第二个涵义也称作“信息隐蔽”,即尽可能隐蔽对象的内部细节,对外形成一个边界(或者说形成一道屏障),只保留有限的对外接口使之与外部发生联系。 • [定义]:封装就是把对象的属性、服务结合成为一个独立的系统单位,并尽可能隐蔽对象的内部细节。
面向对象方法学核心概念 [定义]:面向对象方法是一种运用对象、类、继承、 封装、聚合、消息传送、多态性等概念来构造系统 的软件开发方法。 简而言之: 面向对象=对象+类+继承+消息
面向对象的分析方法 • 面向对象分析(OOA)包括使用基本需求作为指南来选择类和对象。 • 为对象标识属性和操作。 • 定义、组织类的结构和层次。 • 建造对象-关系模型和对象-行为模型。 • 结合多种OOA方法,联合提出了统一建模语言UML(Unified Modeling Language)。
统一建模语言 • UML是一种标准的软件建模语言,是用图形符号来表达面向对象设计,它是一种用于对软件系统的产品进行可视化描述、详细描述、构造以及文档化的标准语言。
统一建模语言 • UML具备以下三种结构: (1)静态对象结构(Static Object Structure)看到同一时刻、同时发生的同步操作。 (2)动态行为(Dynamic Behavior)。 静态对象按照时间顺序的活动。 (3)系统部署(System Deployment) 整个控制流程的系统状况。
模型的建立 • 模型的目的有以下几个: • (1)了解问题。 • (2)介入的工作者相互沟通。 • (3)找出错误。 • (4)规划和设计。 • (5)产生程序代码。
UML的基本图标 UML提供了不同的模型图用来表示系统相关角色(如用户、分析员等)对系统的看法。 需求确认、系统分析、系统设计、系统编码、系统测试是软件工程的5个重要阶段。 UML中的用例图、序列图可以用来描述系统需求: 类图、对象图、协作图可以用来分析系统; 类图、对象图、序列图、状态图、活动图可以用来设计系统; 构件图、序列图可以用来帮助系统编码; 部署图、序列图可以用来规划系统实施。
UML的基本图标 • 1. 类图
UML的基本图标 • 2. 对象图 对象是类的一个实例, 具体实例的名字位于冒号左边, 该实例所属的类名位于冒号右边。
UML的基本图标 • 3. 用例图(use case diagram) 用例从执行者的观点描述系统的行为。用例描述的行为也被称为外部行为。一个用例把系统提供的一个功能描述为一组事件,这组事件对执行者产生一个可见的结果。执行者启动一个用例来访问系统功能。然后,用例能启动其它的用例并从执行者处收集更多的信息。当执行者和用例交换信息时,它们被称为交流。
UML的基本图标 • 用例图说明如何使用系统,可了解系统的需求,并表达用例与角色之间的关系。如图描述了用户使用洗衣机这个需求。
UML的基本图标 • 电话卡功能的UML用例图,用例使用椭圆表示,系统界限用包围用例的方框表示。
UML的基本图标 • 4. 状态图
UML的基本图标 • 5. 顺序图 顺序图用来反映若干个对象之间的动态协作关系,也就是随着时间的流逝,对象之间是如何交互的。 顺序图由若干个对象组成,每个对象用一个垂直的虚线表示(线上方是对象名),每个对象的正下方有一个矩形条,它与垂直的虚线相叠,矩形条表示该对象随时间流逝的过程(从上至下),对象之间传递的消息用消息箭头表示,它们位于表示对象的垂直线条之间,说明和其他的注释作为脚本放在图的边缘。
UML的基本图标 • 6. 构件图 构件图主要用在规划系统整合开发结构时,定义的实现视图,描述系统构件间的结构和依赖关系。
UML的基本图标 • 7. 部署图 部署图强调系统结构的静态视图。描述计算机和设备,展示其连接关系,以及驻留在每台机器的软件。
UML的基本图标—总结 • UML中,功能模型由用例图表示,对象模型由类图表示,而动态模型用状态图和顺序图表示。
其他特征图 • ⑴ 包。当你需要将图中的组织元素分组,或者在图中说明一些类或构件是某个特定子系统的一部分时,可以将这些元素组织成包。
其他特征图 • ⑵ 注释。可以作为图中某部分的解释,其图标是一个带折角的矩形,矩形框中是解释性文字。
面向对象分析 • 主动对象: 主动对象是至少有一个服务不需要接收消息就能主动执行的对象。不需要接收消息就能主动执行的服务可称为主动服务,在编程时它将对应一个并发执行的程序单位。 • 永久对象: 生存期可以超越程序的执行时间而长期存在的对象。
面向对象分析 • 在OOA中运用主动对象需要注意以下两点: • (1)不提倡脱离系统开发的实际需要漫无目标地去发掘每个对象的主动行为。 • (2)往往由设计决策决定是否应该把一个对象定义为主动对象,设计者可以为提高或减低系统的并发难度而人为的增加或减少主动对象的种类与数量。
面向对象分析 • 表示法: 普通对象的类符号 主动对象的类符号
面向对象分析 • 1、研究问题域和用户需求 OOA的基本出发点是问题域和用户要求,分析员的主要工作就是:通过不断地研究问题域,建立一个能满足用户需求的系统模型。 • 研究用户需求包括以下活动: • (1)阅读有关文档:阅读用户提交的需求文档等一切与用户需求有关的书面材料。
面向对象分析 • (2)与用户交流:了解用户的需求,搞清有关用户需求的疑点。 • (3)进行实地调查:有些需求问题,通过以上途径仍然不能完全明确,则需要到现场作适当的调查,因为以上资料可能表达得不够准确、清晰。 • (4)记录所得认识:随时记录通过阅读、交流和调查所得到的认识,更要记录所存在的疑点。 • (5)整理相关资料:纠正初始需求文档中不符合的内容,整理出一份确切表达系统责任的需求文档。
面向对象分析 • 问题域:被开发的应用系统所考虑的整个业务范围。 • 确定系统边界: 明确系统是什么以及系统的环境是什么,划出被开发的系统和与该系统打交道的人或物之间的明确界限,并确定它们之间的接口。
面向对象分析 • 2、对象的发现和标识 没有一个建立对象的规范的方法。对一个具体的系统而言,如何发现对象,缺少形式化的步骤。 • 可以用传统的三种系统分析工具:数据流图、实体-关系图和状态-变迁图。将这些工具应用于软件分析中,称为三视图。
面向对象分析 • 方法: 发现对象的过程
面向对象分析 • 三视图模型(3VM) 1. 实体-关系模型 2. 数据流模型 上下文图标识的外部实体表示数据流的源头和目的地,因此,外部实体就是候选对象。上下文图的数据代表了系统的输入/输出。 3. 状态-变迁模型
面向对象分析 上下文图
电梯控制系统OOA • 功能需求: 总的需求就是要设计和实现一个能对一座40层楼的建筑物内的4部电梯进行调度和控制的程序,这些电梯能以常规的方式将乘客从某一层楼送到另一层楼。 目的地按钮、目的地按钮指示灯、楼层传感器、到达指示灯、召唤按钮、召唤按钮指示灯、电梯马达控制(上、下、停)、目标机。
电梯控制系统OOA • 发现对象: 通过考查该系统的问题域及系统责任可以发现如下对象: (1)到达事件(ARRIVAL EVENT): (2)到达面板(ARRIVAL PANEL): (3)目的地事件(DESTINATION EVENT): (4)目的地面板(DESTINATION PANEL): (5)电梯(ELEVATOR):
电梯控制系统OOA (6)电梯马达(ELEVATOR MOTOR): (7)楼层(FLOOR): (8)超载传感器(OVERWEIGHT SENSOR): (9)召唤事件(SUMMONS EVENT): (10)召唤面板(SUMMONS PANEL):
电梯控制系统OOA • 对象层表示: