软件工程 - 第8章 面向对象建模 - 2 静态建模

静态建模(类和对象建模)

类和对象模型的基本模型元素有类、对象以及它们之间的关系。系统中的类和对象模型描述了系统的静态结构,在UML中用类图和对象图来表示。
类图由系统中使用的类以及它们之间的关系组成。类之间的关系有关联、依赖、泛化、实现等。类图是一种静态模型,它是其他图的基础。一个系统可以有多张类图,一个类也可出现在几张类图中。

什么是类

在这里插入图片描述

  • 类图的核心组成
    类:类名,属性,操作
    类之间的关系:关联(聚集、组合)、依赖、泛化、实现
    多样性(多重性):通常在关联、聚合、组合中使用,代表有多少个关联对象存在。使用数字…星号(数字)表示
  • 类分为:
    实体类,如学生、商品,来自需求说明中的名词;
    控制类,如增加商品类、用户注册类;
    边界类,如对话框、窗体、菜单

如何用UML表示一个类

• 名称:每个类都有一个惟一的名称,通常采用CamelCase(俗称驼峰格式,每个单词的首字母都要大写,其他均以小写字母出现。)格式表示
• 属性:是已被命名的类的特性,它描述该类实例中包含的信息
• 操作:是类所提供的服务,它可以由类的任何对象请求以影响其行为
• 属性名和操作名也通常采用
CamelCase
格式表示,只不过首字母通常为小写。
在这里插入图片描述

UML对属性的描述
  • UML中,描述一个属性的语法如下:
    • visibilityopt /opt attribute-name ⌊ : type ⌋optmultiplicityopt ⌊= initial-value⌋opt⌊ {property-string}⌋opt
      其中带下标opt或⌊ ⌋opt的部分表示该部分是任选的
    • 类属性的语法(重要)
      在这里插入图片描述
    • visibility(可见性):表示该属性在哪个范围内可见(即可使用),见下表
      在这里插入图片描述
    • attribute-name:表示属性名。
    • type(类型):用来指明属性值的类型
    • multiplicity(重数):用来指出该属性可能的值的个数以及它们的排列次序和唯一性。值的个数写在方括号([ ])中,其形式是:[minimum…maximum]。maximum可以是“ * ”,表示“无限”。当值的个数是单一值(如值的个数是3)时,可写成[3…3]或简写成[3]。典型的写法有:[0…1],[1](表示[1…1]),[ * ](表示[0… * ]),[1… * ],[1…3]。当重数缺省时,隐含表示重数为1。当一个属性有多个值时,可在值的个数后面指明值元素的排列次序和唯一性,排列次序和唯一性写在花括号({ })中,可使用的关键字如下表所示,其默认值是set,即无序且值元素唯一
      在这里插入图片描述
    • initial-value(初值):在创建一个类的实例对象时,应对其属性赋值,如果类中对某属性定义了初值,那么该初值可作为创建对象时该属性的默认值。
    • property-string(特征字符串):用来明确地指明该属性可能的候选值,如{红,黄,绿}指出该属性可枚举的值只能是红、黄、绿。
      属性还可以定义为类属性(class attribute) ,表示被这个类的所有实例对象共享该属性的值。类属性是这个类的名字空间中的全局变量。类属性用下划线来指明。
      在这里插入图片描述
UML对操作的描述
  • UML中描述一个操作的语法如下:
    visibilityopt operating-name(parameter-list) ⌊ : return-type ⌋opt ⌊ { property-string }⌋opt
    操作可见性的含义与属性中的含义相同。
    参数表是用逗号分隔的形式参数序列,描述一个参数的语法如下:
    directionopt parameter-name :type ⌊ multiplicity⌋opt ⌊ = default -value⌋opt
    其中:direction(方向):用来指明参数信息流的方向
    在这里插入图片描述
    在这里插入图片描述
  • 类也可以定义类操作(class operation)。通常操作是在该类的对象实例上被调用的,而类操作可以在没有对象实例的情况下被调用,但此时只允许访问类属性.
    在这里插入图片描述

类之间的关系

  • 对象并非遗世独立,对象间存在千丝万缕的联系
  • UML中,关注以下几种类型的关系:
    • 关联关系(Association)
      • 聚合与组合关系(Aggregation and Composition)
    • 泛化关系(Generalization)
    • 依赖关系(Dependency)
    • 实现关系(Realization)
  • 类图描述类和他们之间的关系
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 关联
    关联描述了系统中对象之间或其他实例之间的连接。关联的种类主要有二元关联,多元关联,受限关联,聚集(aggregation)和组合(composition)
  • (1)二元关联
    - 二元关联表示为在两个类之间用一条直线连接,直线上可写上关联名
    在这里插入图片描述
    • 关联的两端可加上重数(multiplicity) ,表示该类有多少个对象可与对方的一个对象关联
      在这里插入图片描述
    • 重数
      在一个类的关联端点附加的重数表示这个类的多少个实例对象可以与另一个类(该关联的另一端)的一个实例相关。
    • 允许一个类与自身关联
      在这里插入图片描述
      在这里插入图片描述
  • (2)多元关联
    三个或三个以上的类之间可以互相关联
    在这里插入图片描述
    在这里插入图片描述
  • (3)受限关联(qualified association):受限关联用于一对多或多对多的关联。限定符(qualifier)用来区分关联“多”端的对象集合,它指明了在关联“多”端的某个特殊对象
    在这里插入图片描述
    (4)聚合
    【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。**聚合关系是关联关系的一种,是强的关联关系;**关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
    在这里插入图片描述
    (5)组合(composition)
    【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
    在这里插入图片描述
  1. 泛化
    泛化:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。比如老虎是动物的一种,既有老虎的特性也有动物的共性。具体画法有:有共享表示法和分离表示法两种。
    在这里插入图片描述
  • 泛化共享表示法:多个类共享一个泛化箭头
    在这里插入图片描述
  • 泛化分离表示法:每个类有自己的泛化箭头
    在这里插入图片描述
  1. 实现
    类与接口的关系,表示类是接口所有特征和行为的实现。
    在这里插入图片描述
  2. 依赖
    是一种使用的关系,即一个类的实现需要另一个类的协助。
    可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖。
    在这里插入图片描述

在这里插入图片描述

如何阅读类图

  • 先看清有哪些类,然后看看类之间存在的关系,并结合多重性来理解类图的结构特点以及各个属性和方法的含义
    在这里插入图片描述
    • 读出类:图中共有7个类,Order(订单)、OrderItem(订单项目)、Customer(客户)、Consignee(收货人)、DeliverOrder(提货单)、Peddlery(商家)、Prodcut(产品)
    • 读出关系:从图中关系最复杂(也就是线最密集)的类开始阅读,本图中最复杂的就是Order类。
      1)OrderItem和Order之间是组合关系
      2)Order类和Customer、Consignee、DeliverOrder是关联关系。也就是说,一个订单和客户、收货人、送货单是相关的。
    • 多重性:用来说明关联的两个类之间的数量关系
      在这里插入图片描述
    • Order类,有两个方法:dispatch()和close(),从名字中可以猜出它们分别实现“分拆订单生成送货单”和“完成订单”。而在DeliveOrder()类中则有一个Close()方法,同理它应该表示“完成送货”。而在OrderItem中有一个stateChange()方法和deliverState,不难猜出它就是用来改变其“是否交给收货人”标志位的
    • 先调用Order的dispatch()方法,它将根据其包含的OrderItem中产品信息,来按供应商户分拆成若干个DeliverOrder。商户登录系统后就可以获取其DeliverOrder,并在执行完后调用close()方法。这时,就将调用OrderItem的stateChange()方法来改为其状态。同时再调用Order的close()方法,判断该Order的所有的OrderItem是否都已经送到了,如果是就将其真正close()掉

其他高级概念(自学)

接口与抽象类

• 抽象类是一种不能够被直接实例化的类,也就是说不能够创建一个属于抽象类的对象
在这里插入图片描述
• 接口则是一种类似于抽象类的机制,它是一个没有具体实现的类
在这里插入图片描述

关联类

• 关联类即是关联也是类,它不仅像关联那样连接两个类,而且还可以定义一组属于关系本身的特性 (Role)
在这里插入图片描述

模板类

• 可以根据占位符或参数来定义类,而不用说明属性、方法返回值和方法参数的实际类型
左边的是模板类
在这里插入图片描述

主动类与嵌套类

• 主动类的实例称为主动对象,一个主动对象拥有一个控制线程并且能够发起控制活动;它不在别的线程、堆栈或状态机内运行,具有独立的控制期。从某种意义上说,它就是一个线程
• 在诸如Java的语言中,允许你将一个类的定义放在另一个类定义的内部,这就是嵌套类,在Java中也称为内层类。嵌套类是声明在它的外层类中的,因此只能够通过外层类或外层类的对象对它进行访问
在这里插入图片描述
在这里插入图片描述

如何绘制类图

案例1:个人图书管理系统的需求描述

• 小王是一个爱书之人,家里各类书籍已过千册,而平时又时常有朋友外借,因此需要一个个人图书管理系统。该系统应该能够将书籍的基本信息按计算机类、非计算机类分别建档,实现按书名、作者、类别、出版社等关键字的组合查询功能。在使用该系统录入新书籍时系统会自动按规则生成书号,可以修改信息,但一经创建就不允许删除。该系统还应该能够对书籍的外借情况进行记录,可对外借情况列表打印。另外,还希望能够对书籍的购买金额、册数按特定时间周期进行统计

如何识别类

(1)考虑问题域:
可以启发分析员发现对象的因素包括:人员、组织、物品、设备、抽象事物、事件、文件及结构等

  • 人员:(a)需要由系统保存和管理其信息的人员,如户籍管理系统中的每个居民:(b)应该在系统中完成某些功能,提供某些服务的人员,如户籍管理员。符合上述情况之一者,应考虑用相应的人员对象来描述
    组织:在系统中发挥一定作用的组织结构。如工作班组等
    物品:需要由系统管理的各种物品。如经营的商品等。
    设备:在系统中动态地运行、由系统进行监控或供系统使用的各种设备、仪表、机器及运输工具等
    抽象事物:指没有具体的物理形态,却对用户的业务具有实际意义的逻辑上的事物。
    事件:指那些需要由系统长期记忆的事件。
    文件:泛指在人类日常的管理和业务活动中使用的各种各样的表格、档案、证件和票据等文件
    结构:通过考虑结构可以得到一种启发一一从已经发现的对象联想到其他更多的对象
识别属性
  • (1)策略与启发
    • 按常识这个对象应该有哪些属性?(例如人的姓名、职业、地址等)
    • 在当前的问题域中,对象应该有哪些属性?(例如商品的条形码)
    • 根据系统责任,这个对象应具有哪些属性?(特卡人的使用地点)
    • 建立这个对象是为了保存和管理哪些信息?
    • 对象为了实现操作的功能,需要增设哪些属性?
      (例如传感器对象,为了实现其定时采集信号的功能,需要一个“时间
    • 对象是否需要通过专设的属性描述其状态
      (例如设备对象,在关闭、待命、运行、故障等不同状态将呈现不同的行为需要为其设置一个状态”"属性)
    • 用什么属性表示聚合和关联?
      (对于关联,应该在关联一端的类中定义一个属性,来指出另一端的哪个对象与本端的对象发生关联,其数据类型是指向另一端对象的指针或对象标识),
识别操作

区分对象行为的类型
为了明确OOA应该定义对象的哪些操作,首先区分对象行为的不同类型:
(1)系统行为
例:创建、删除、复制、转存
(2)对象自身的行为—算法简单的操作
例:读、写属性值
(3)对象自身的行为—算法复杂的操作计算或监控

发现类

小王是一个爱书之家里各类书籍已过千册,而平时又时常有朋友外借,因此需要一个个人图书管理系统。该系统应该能够将书籍的基本信息计算机类非计算机类分别建档,实现按书名作者类别出版社关键字的组合查询功能。在使用该系统录入新书籍系统会自动按规则生成书号,可以修改信息,但一经创建就不允许删除。该系统还应该能够对书籍的外借情况进行记录,可对外借情况列表打印。另外,还希望能够对书籍的购买金额册数特定时间周期进行统计

筛选备选类

• “小王”、“人”、“家里”很明显是系统外的概念,无须对其建模;
• 而“个人图书管理系统”、“系统”指的就是将要开发的系统,即系统本身,也无须对其进行建模;
• 很明显“书籍”是一个很重要的类,而“书名”、“作者”、“类别”、“出版社”、“书号”则都是用来描述书籍的基本信息的,因此应该作为“书籍”类的属性处理,而“规则”是指书号的生成规则,而书号则是书籍的一个属性,因此“规则”可以作为编写“书籍”类构造函数的指南。
• “基本信息”则是书名、作者、类别等描述书籍的基本信息统称,“关键字”则是代表其中之一,因此无需对其建模;
• “功能”、“新书籍”、“信息”、“记录”都是在描述需求时使用到的一些相关词语,并不是问题域的本质,因此先可以将其淘汰掉;

筛选修选类

• “计算机类”、“非计算机类”是该系统中图书的两大分类,因此应该对其建模,并改名为“计算机类书籍”和“非计算机类书籍”,以减少歧义;
• “外借情况”则是用来表示一次借阅行为,应该成为一个候选类,多个外借情况将组成“外借情况列表”,而外借情况中一个很重要的角色是“朋友”—借阅主体。虽然到本系统中并不需要建立“朋友”的资料库,但考虑到可能会需要列出某个朋友的借阅情况,因此还是将其列为候选类。为了能够更好地表述,将“外借情况”改名为“借阅记录”,而将“外借情况列表”改名为“借阅记录列表”;
• “购买金额”、“册数”都是统计的结果,都是一个数字,因此不用将其建模,而“特定时限”则是统计的范围,也无需将其建模;不过从这里的分析中,我们可以发现,在该需求描述中隐藏着一个关键类—书籍列表,也就是执行统计的主体。

得到候选类

在这里插入图片描述

• 在使用“名词动词法”寻找类的时候,很多团队会在此耗费大量的时间,特别是对于中大型项目,这样很容易迷失方向。其实在此主要的目的是对问题领域建立概要的了解,无需太过咬文嚼字

关联分析,建模,多重性分析,再建模

在这里插入图片描述

职责分析

• 书籍类:从需求描述中,可找到书名类别作者出版社;同时从统计的需要中,得知“定价”也是一个关键的成员变量。
• 书籍列表类:书籍列表就是全部的藏书列表,其主要的成员方法是新增、修改、查询(按关键字查询)、统计(按特定时限统计册数与金额)。
• 借阅记录类:借阅人(朋友)、借阅时间。
• 借阅记录列表类:主要职责就是添加记录(借出)、删除记录(归还)以及打印借阅记录
在这里插入图片描述

案例2:网上购物系统

通过相应的网址访问网上购物系统,进入系统后,客户即可通过多级分类目录逐级浏览商品的名称、规格、单价、图片等信息,直至阅浏览某个商品的详细技术指标。浏览过程中,客户可随时将需要的商品放到购物车内,系统可显示购物车内已选购的商品、单价、数量及价格,客户还可随时删去购物车内尚未结账的任何商品。

当客户选择好所需的商品后,可要求结账,此时,系统首先要求客户注册/登录(对新客户需先注册,填写客户信息,然后登录;对老客户只需通过用户名和密码直接进行登录即可),然后根据购物车中所选的商品形成初始的订单,同时选择支付方式,填写相关的派送信息,如送货地址、建议的送货时间段等,此时即可提交订单,系统向客户返回一个订单号。
系统提供网上在线支付和货到现金支付两种支付方式。网上在线支付方式由专门的网上支付系统实现在线支付,需根据网上支付系统的要求填写相关的账户信息,如账号、密码等,并进行扣款,网上在线支付的结果或者是付款成功,或者是付款失败。货到现金支付方式由送货员在送达商品时向客户收取现金。客户还可通过订单号查询自己订单的当前状态,如已提交未付款、已发货已付款等,并允许取消尚未发货的订单。
系统业务员将客户提交的订单交由物流系统或快递公司向客户发货,又称派送,物流系统或快递公司送达商品后对未付款的客户收款,并将客户签收单返回给系统业务员,系统业务员负责更新订单的状态,以便跟踪和了解订单的执行情况。

静态建模实例
  1. 标识候选对象
  • 外部实体:客户,系统业务员,网上购物系统,物流系统,网上支付系统,客户信息管理系统,商品信息管理系统
  • 需要存储、处理的信息:商品的名称、规格、单价,购物车中的物件,订单的订单项(即选购的商品)、支付信息、送货信息。由此可导出候选对象是商品,购物车,订单
  1. 筛选候选对象
  • 物流系统:未出现在用况图中,删除
  • 网上支付系统:仅作为外部执行者完成网上在线支付功能,删除
  • 客户信息管理系统和商品信息管理系统:只是作为外部执行者参与创建和维护客户信息和商品信息,本案例并不关心这些外部系统的具体细节,删除
  • 系统业务员:在本案例中主要作为修改订单状态的输入者,其自身没有属性,删除
  • 网上购物系统:代表本案例的完整系统,所有信息的显示、操作界面等都由网上购物系统来展示,保留,称为“网上商城”
  • 客户、商品、购物车、订单:有明确的属性和操作,保留
  • 考虑到一份订单可以由多个订单项组成,一辆购物车可以放多件物品,因此增加订单项和物件两个对象
  1. 标识属性和操作
    在这里插入图片描述
    在这里插入图片描述
    4.确定类之间的关系
  • 网上商城拥有多件商品和购物车,并能从网上商城查到所有的商品信息
  • 任意多个客户可以到网上商城订购商品,网上商城能查到所有的注册客户信息
  • 一个客户可以拥有多份订单,客户可以查看自己的全部未到货订单
  • 一份订单由多个订单项组成
  • 一个客户只有一辆购物车
  • 一辆购物车可以放多件物件,从购物车可以查到车内所有的物件
  • 一个订单项或物件对应一个商品,但一个商品可对应多个订单项或购物车中的多个物件
网上购物系统的类图

在这里插入图片描述

总结建立类图的步骤

1.研究分析问题领域,确定系统的需求。
2.发现对象与类,明确它们的含义和责任,确定属性和操作。
3.发现类之间的关系。把类之间的关系用关联、泛化、聚集、组合、依赖等关系表达出来。
4.设计类与关系。调整和细化已得到的类和类之间的关系,解决诸如命名冲突、功能重复等问题。
5.绘制类图并编制相应的说明。

静态建模——对象图

对象的概念与特性
• 对象代表一个单独的、可确认的物体、单元或实体,它可以是具体的也可以是抽象的,在问题领域里有确切定义的角色。换句话说,对象是边界非常清楚的任何事物
• 状态:对象的状态包括对象的所有属性(通常是静态的)和这些属性的当前值(通常是动态的)
• 行为:没有一个对象是孤立存在的,对象可以被操作,也可以操作别的对象。而行为就是一个对象根据它的状态改变和消息传送所采取的行动和所做出的反应
• 标识:为了将一个对象与其它所有对象区分开来,我们通常会给它起一个“标识”

对象 vs 类

• 对象是一个存在于时间和空间中的具体实体,而类仅代表一个抽象,抽象出对象的“本质”。
• 类是共享一个公用结构和一个公共行为对象集合
• 类是静态的,对象是动态的;类是一般化,对象是个性化;类是定义,对象是实例;类是抽象、对象是具体

对象图的表示法

• 对象名:由于对象是一个类的实例,因此其名称的格式是“对象名:类名”,这两个部分是可选的,但如果是包含了类名,则必须加上“:”,另外为了和类名区分,还必须加上下划线
• 属性:由于对象是一个具体的事物,因此所有的属性值都已经确定,因此通常会在属性的后面列出其值
在这里插入图片描述

阅读对象图

• 首先找出所有的类,即在“:”之后的名称
• 整理完之后,就可以通过对象的名字来了解其含义
• 按类来归纳属性,然后再通过关联来确定含义
在这里插入图片描述

绘制对象图的过程

• 先找出类和对象,通常类在“class”、“new”、“implements”等关键字之后的,而对象名则通常是在类名之后的
• 然后对其进行细化的关联分析,绘制出相应的对象图
• 论证类模型的设计:当设计了类模型时,你可以通过对象图来模拟出一个运行时的状态,这样就可以研究在运行时设计的合理性。同时,也可以作为开发人员讨论的一个基础。
• 分析和说明源代码:由于类图只是展示了程序的静态类结构,因此通过类图看懂代码的意图是很困难的。因此在分析源代码时,可以通过对象图来细化分析。而对于开发人员,对于逻辑较复杂的类交互时,可以考虑画出一些对象图来做补充说明

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
序   前言   第1篇面向过程的软件工程   第1软件危机、 软件工程   11软件工程的发展史   111程序设计时代   112程序系统时代   113软件工程时代   12软件危机主要表现形式   13产生软件危机的原因及解决途径   131产生软件危机的原因   132解决软件危机的途径   14软件和软件工程   141软件   142软件工程   15软件质量   16软件的生存周期及开发模型   161软件生存周期   162软件开发模型   17习题   第2可行性研究   21可行性研究的目的与任务   22可行性研究的步骤   23系统流程图   231系统流程图的符号   232系统流程图示例   24成本-效益分析   241货币的时间价值   242投资回收期   243纯收入   25可行性研究报告的主要内容   26习题   第3软件需求分析   31需求分析的任务和步骤   311需求分析的任务   312需求分析的步骤   32需求获取的常用方法   321常规的需求获取方法   322快速建立软件原型来获取需求   33需求分析的方法   331功能分解方法   332结构化分析方法   333信息建模方法   334面向对象的分析   34结构化分析方法   341自顶向下逐层分解的分析策略   342结构化分析描述工具   343数据流图   344数据字典   345加工逻辑的描述   35需求分析图形工具   351层次方框图   352Warnier图   353IPO图   36SA 方法的应用   37习题   第4软件总体设计   41软件总体设计的目标和任务   42软件设计的概念和原理   421模块和模块化   422抽象   423信息隐蔽和局部化   424模块独立性及其度量   43软件结构设计准则   44软件结构设计的图形工具   441软件结构图   442层次图   443HIPO图   45结构化设计方法   451数据流图的类型   452结构化设计方法的步骤   453变换型分析设计   454事务型分析设计   46习题   第5软件详细设计   51详细设计的目的与任务   52结构化程序设计   53详细设计工具   531程序流程图   532NS图   533PAD图   534过程设计语言   54习题   第6软件编码   61程序设计语言的分类   611基础语言   612结构化语言   613面向对象的语言   62程序设计语言的选择   63程序设计风格   631程序内部文档   632数据说明   633语句构造   634输入/输出   635效率   64习题   第7软件测试   71软件测试的目标   72软件测试的原则   73软件测试方法   731静态测试与动态测试   732黑盒测试法与白盒测试法   74软件测试用例的设计   741白盒技术   742黑盒技术   75软件测试过程   751单元测试   752集成测试   753确认测试   754系统测试   76调试   761调试的目的   762调试技术   77习题   第8软件维护   81软件维护的分类   82软件维护的特点   821结构化维护与非结构化维护   822维护的代价   823软件维护中存在的问题   83软件可维护性   831软件可维护性的定义   832软件可维护性的度量   833提高软件可维护性的方法   84维护的副作用   85软件再工程   851软件再工程与逆向工程的概念   852实施软件再工程的原因   853软件再工程技术   86习题   第2篇UML与面向对象软件工程   第9UML简介   91UML概述   911UML的组成   912UML的特点和用途   913UML的模型视图简介   92UML软件开发工具简介   921Rational Rose   922Visio简介   93习题   第10面向对象的概念   101面向对象的方法学   1011面向对象建模   1012面向对象的方法与传统软件方法的比较   102对象与类及其UML表示   1021对象   1022类与实例   1023对象属性与操作   1024对象类的关联   103聚集、 组合、 继承和多态   1031聚集与组合   1032抽象与继承   1033多态   104习题   第11对象设计模式   111对象设计模式概念   1111历史背景   1112对象设计模式   1113设计模式的分类   112几种典型的对象设计模式及应用   1121行为型模式中的职责键模式及应用   1122结构型模式中的外观模式及应用   1123创建型模式中的抽象工厂模式及应用   113对象类的高级概念   1131抽象类、 参数对象类、型与实现对象类   1132接口   1133版型   114组件、 包和结点   1141组件   1142包和包图   1143结点   115习题   第12面向对象的软件开发过程   121RUP概述   1211RUP的历史   1212RUP的特色   122RUP软件开发生命周期和建模   1221RUP软件开发的生命周期   1222RUP的动态结构   1223RUP的静态结构   1224RUP的建模   123面向对象软件开发过程的案例分析   1231系统需求   1232系统的静态结构模型   1233顺序图和协作图   1234状态图和活动图   1235组件图和部署图   124习题   第13软件开发工具Rose   131Rose的用例图与类图   1311用例图   1312类图   132Rose的交互图与状态机图   1321交互图   1322状态机图   133包、 组件图与部署图   1331包   1332组件图   1333部署图   134Rose的代码生成和逆向工程   1341代码生成   1342逆向工程   135Rose应用举例   136习题   第14Rose及其应用   141Rose的主要功能   142Rose的使用   1421Rose主菜单窗口   1422模型与工作方式的组织   143教学管理系统的分析与设计   1431系统需求分析   1432系统问题领域分析   1433静态结构模型的建立   1434动态行为模型的建立   1435物理模型的建立   144UML类图与VB代码的转换   1441VB代码生成属性   1442Rose模型—VB代码的生成   1443VB代码的逆向工程   145UML类图与Java代码的转换   1451UML类图—Java代码的生成   1452Java代码的逆向工程   146习题   第15面向对象的软件体系结构   151软件体系结构概述   152流程处理与客户机/服务器体系结构   1521流程处理   1522客户机/服务器体系结构   153三层和多层体系结构   1531三层体系结构   1532浏览器/服务器体系结构风格   1533多层体系结构   1534团聚与串行   154公共对象请求代理体系结构   155基于层次消息总线的体系结构风格   156异构结构风格   157习题   第16软件工程新技术   161软件复用技术   1611软件复用概念及分类   1612软件复用的关键技术和复用粒度   162中间件技术   1621中间件概念及特点   1622中间件的分类   163组件技术   1631组件与组件化   1632组件模型及描述语言   1633组件的检索与组装   164计算机辅助软件工程技术   1641CASE的基本概念   1642CASE工具与集成CASE环境   165软件产品线技术   1651软件产品线基本概念   1652软件产品线方法   1653北大青鸟工程   166软件过程与标准化   1661软件过程及其改进   1662ISO 9000标准   1663软件能力成熟度模型   167习题   第3篇软件工程实验   第17软件工程实验大纲   171面向过程的软件工程实验   1711实验1图书馆图书管理系统的可行性分析   1712实验2图书馆图书管理系统的项目开发计划   1713实验3图书馆图书管理系统的需求分析   1714实验4图书馆图书管理系统的总体设计   1715实验5图书馆图书管理系统的详细设计及编码实现   1716实验6图书馆图书管理系统的系统测试   1717实验7图书馆图书管理系统用户手册的撰写   1718实验8图书馆图书管理系统项目开发总结报告的撰写   172面向对象软件工程实验   1721实验1浏览器系统的可行性分析   1722实验2浏览器系统的项目开发计划   1723实验3浏览器系统的需求分析   1724实验4浏览器系统的体系结构设计   1725实验5采用面向对象方法进行浏览器系统的详细设计   1726实验6利用Rational Rose正向工程功能完成编码的实验   1727实验7利用Rational Rose逆向工程完成修改设计的实验   1728实验8浏览器系统的测试   1729实验9浏览器系统用户手册的撰写   17210实验10浏览器系统项目开发总结报告的撰写   附录   附录AUML图总结   附录BUML中定义的常用版型、 约束和标记   附录CGOF给出的软件设计模式
软件工程(原书第9版)》是系统介绍软件工程理论的经典教材,自1982年初版以来,随着软件工程学科的不断发展,不断更新版本,影响了一代又一代软件工程人才,对学科本身也产生了重大影响。本版保留了上一版中的软件工程的基本材料,但对各都进行了修改和更新,并增加了很多有关其他主题的新材料。 《软件工程(原书第9版)》包含四个部分:第一部分是对软件工程的一般性介绍,包括软件工程过程和敏捷开发,以及面向对象的设计和设计模式的使用;第二部分介绍可依赖性和信息安全性问题;第三部分介绍高级软件工程;第四部分介绍软件管理,重点介绍技术管理问题。 《软件工程(原书第9版)》适合作为软件和系统工程专业本科生或研究生教材,同时也是软件工程师难得的优秀参考书籍。 目录编辑 《软件工程(原书第9版)》 出版者的话 译者序 前言 第一部分软件工程导论 第1概述 1.1专业化软件开发 1.1.1软件工程 1.1.2软件工程的多样性 1.1.3软件工程和web 1.2软件工程人员的职业道德 1.3案例研究 1.3.1胰岛素泵控制系统 1.3.2用于心理健康治疗的患者信息系统 1.3.3野外气象站 要点 进一步阅读材料 练习 参考书目 第2软件过程 .2.1软件过程模型 2.1.1瀑布模型 2.1.2增量式开发 2.1.3面向复用的软件工程 2.2过程活动 2.2.1软件描述 2.2.2软件设计和实现 2.2.3软件有效性验证 2.2.4软件进化 2.3应对变更 2.3.1原型构造 2.3.2增量式交付 2.3.3boehm的螺旋模型 2.4rational统一过程 要点 进一步阅读材料 练习 参考书目 第3敏捷软件开发 3.1敏捷方法 3.2计划驱动开发和敏捷开发 3.3极限编程 3.3.1极限编程中的测试 3.3.2结对编程 3.4敏捷项目管理 3.5可扩展的敏捷方法 要点 进一步阅读材料 练习 参考书目 第4需求工程 4.1功能需求和非功能需求 4.1.1功能需求 4.1.2非功能需求 4.2软件需求文档 4.3需求描述 4.3.1自然语言描述 4.3.2结构化描述 4.4需求工程过程 4.5需求导出和分析 4.5.1需求发现 4.5.2采访 4.5.3脚本 4.5.4用例 4.5.5深入实际 4.6需求有效性验证 4.7需求管理 4.7.1需求管理规划 4.7.2需求变更管理 要点 进一步阅读材料 练习 参考书目 第5系统建模 5.1上下文模型 5.2交互模型 5.2.1用例建模 5.2.2时序图 5.3结构模型 5.3.1类图 5.3.2泛化 5.3.3聚合 5.4行为模型 5.4.1数据驱动的建模 5.4.2事件驱动模型 5.5模型驱动工程 5.5.1模型驱动体系结构 5.5.2可执行uml 要点 进一步阅读材料 练习 参考书目 第6体系结构设计 6.1体系结构设计决策 6.2体系结构视图 6.3体系结构模式 6.3.1分层体系结构 6.3.2容器体系结构 6.3.3客户机-服务器体系结构 6.3.4管道和过滤器体系结构 6.4应用体系结构 6.4.1事务处理系统 6.4.2信息系统 6.4.3语言处理系统 要点 进一步阅读材料 练习 参考书目 第7设计与实现 7.1利用uml进行面向对象设计 7.1.1系统上下文与交互 7.1.2体系结构的设计 7.1.3对象类识别 7.1.4设计模型 7.1.5接口描述 7.2设计模式 7.3实现问题 7.3.1复用 7.3.2配置管理 7.3.3宿主机-目标机开发 7.4开源开发 要点 进一步阅读材料 练习 参考书目 第8软件测试 8.1开发测试 8.1.1单元测试 8.1.2选择单元测试案例 8.1.3组件测试 8.1.4系统测试 8.2测试驱动开发 8.3发布测试 8.3.1基于需求的测试 8.3.2情景测试 8.3.3性能测试 8.4用户测试 要点 进一步阅读材料 练习 参考书目 第9软件进化 9.1进化过程 9.2程序进化的动态特性 9.3软件维护 9.3.1维护预测 9.3.2软件再工程 9.3.3通过重构进行预防性维护 9.4遗留系统管理 要点 进一步阅读材料 练习 参考书目 第二部分可依赖性和信息安全性 第10社会技术系统 10.1复杂系统 10.1.1系统总体特性 10.1.2系统非确定性 10.1.3成功标准 10.2系统工程 10.3系统采购 10.4系统开发 10.5系统运行 10.5.1人为错误 10.5.2系统进化 要点 进一步阅读材料 练习 参考书目 第11可依赖性与信息安全性 11.1可依赖性特征 11.2可用性和可靠性 11.3安全性 11.4信息安全性 要点 进一步阅读材料 练习 参考书目 第12可依赖性与信息安全性描述 12.1风险驱动的需求描述 12.2安全性描述 12.2.1危险识别 12.2.2危险评估 12.2.3危险分析 12.2.4风险降低 12.3可靠性描述 12.3.1可靠性度量 12.3.2非功能性的可靠性需求 12.3.3功能可靠性描述 12.4信息安全性描述 12.5形式化描述 要点 进一步阅读材料 练习 参考书目 第13可依赖性工程 13.1冗余性和多样性 13.2可依赖的过程 13.3可依赖的系统体系结构 13.3.1保护性系统 13.3.2自监控系统体系结构 13.3.3n-版本编程 13.3.4软件多样性 13.4可依赖的编程 要点 进一步阅读材料 练习 参考书目 第14信息安全工程 14.1信息安全风险管理 14.1.1生存期风险评估 14.1.2运行风险评估 14.2面向信息安全的设计 14.2.1体系结构设计 14.2.2设计准则 14.2.3部署设计 14.3系统生存能力 要点 进一步阅读材料 练习 参考书目 第15可依赖性与信息安全保证 15.1静态分析 15.1.1检验和形式化方法 15.1.2模型检测 15.1.3自动静态分析 15.2可靠性测试 15.3信息安全性测试 15.4过程保证 15.5安全性和可依赖性案例 15.5.1结构化论证 15.5.2结构化的安全性论证 要点 进一步阅读材料 练习 参考书目 第三部分高级软件工程 第16软件复用 16.1复用概览 16.2应用框架 16.3软件产品线 16.4cots产品的复用 16.4.1cots解决方案系统 16.4.2cots集成系统 要点 进一步阅读材料 练习 参考书目 第17基于组件的软件工程 17.1组件和组件模型 17.2cbse过程 17.2.1面向复用的cbse 17.2.2基于复用的cbse 17.3组件合成 要点 进一步阅读材料 练习 参考书目 第18分布式软件工程 18.1分布式系统的问题 18.1.1交互模型 18.1.2中间件 18.2客户机-服务器计算 18.3分布式系统的体系结构模式 18.3.1主从体系结构 18.3.2两层客户机-服务器结构 18.3.3多层客户机-服务器结构 18.3.4分布式组件体系结构 18.3.5对等体系结构 18.4软件作为服务 要点 进一步阅读材料 练习 参考书目 第19面向服务的体系结构 19.1服务作为可复用的组件 19.2服务工程 19.2.1可选服务的识别 19.2.2服务接口设计 19.2.3服务实现和部署 19.2.4遗留系统服务 19.3使用服务的软件开发 19.3.1工作流设计和实现 19.3.2服务测试 要点 进一步阅读材料 练习 参考书目 第20嵌入式软件 20.1嵌入式系统设计 20.1.1实时系统建模 20.1.2实时编程 20.2体系结构模式 20.2.1观察和反应 20.2.2环境控制 20.2.3处理管道 20.3时序分析 20.4实时操作系统 要点 进一步阅读材料 练习 参考书目 第21面向方面的软件工程 21.1关注点分离 21.2方面、连接点和切入点 21.3采用方面的软件工程 21.3.1面向关注点的需求工程 21.3.2面向方面的设计和编程 21.3.3检验和有效性验证 要点 进一步阅读材料 练习 参考书目 第四部分软 件 管 理 第22项目管理 22.1风险管理 22.1.1风险识别 22.1.2风险分析 22.1.3风险规划 22.1.4风险监控 22.2人员管理 22.3团队协作 22.3.1成员挑选 22.3.2小组的结构 22.3.3小组的沟通 要点 进一步阅读材料 练习 参考书目 第23项目规划 23.1软件报价 23.2计划驱动的开发 23.2.1项目计划 23.2.2规划过程 23.3项目进度安排 23.4敏捷规划 23.5估算技术 23.5.1算法成本建模 23.5.2cocomo Ⅱ模型 23.5.3项目的工期和人员配备 要点 进一步阅读材料 练习 参考书目 第24质量管理 24.1软件质量 24.2软件标准 24.3复查与审查 24.3.1复查过程 24.3.2程序审查 24.4软件度量和量度 24.4.1产品量度 24.4.2软件组件分析 24.4.3度量歧义 要点 进一步阅读材料 练习 参考书目 第25配置管理 25.1变更管理 25.2版本管理 25.3系统构建 25.4发布版本管理 要点 进一步阅读材料 练习 参考书目 第26过程改善 26.1过程改善过程 26.2过程度量 26.3过程分析 26.4过程变更 26.5cmmi过程改善框架 26.5.1分阶段的cmmi模型 26software engineering,9e 出版者的话 译者序 前言 第一部分软件工程导论 第1概述 1.1专业化软件开发 1.1.1软件工程 1.1.2软件工程的多样性 1.1.3软件工程和web 1.2软件工程人员的职业道德 1.3案例研究 1.3.1胰岛素泵控制系统 1.3.2用于心理健康治疗的患者信息系统 1.3.3野外气象站 要点 进一步阅读材料 练习 参考书目 第2软件过程 2.1软件过程模型 2.1.1瀑布模型 2.1.2增量式开发 2.1.3面向复用的软件工程 2.2过程活动 2.2.1软件描述 2.2.2软件设计和实现 2.2.3软件有效性验证 2.2.4软件进化 2.3应对变更 2.3.1原型构造 2.3.2增量式交付 2.3.3boehm的螺旋模型 2.4rational统一过程 要点 进一步阅读材料 练习 参考书目 第3敏捷软件开发 3.1敏捷方法 3.2计划驱动开发和敏捷开发 3.3极限编程 3.3.1极限编程中的测试 3.3.2结对编程 3.4敏捷项目管理 3.5可扩展的敏捷方法 要点 进一步阅读材料 练习 参考书目 第4需求工程 4.1功能需求和非功能需求 4.1.1功能需求 4.1.2非功能需求 4.2软件需求文档 4.3需求描述 4.3.1自然语言描述 4.3.2结构化描述 4.4需求工程过程 4.5需求导出和分析 4.5.1需求发现 4.5.2采访 4.5.3脚本 4.5.4用例 4.5.5深入实际 4.6需求有效性验证 4.7需求管理 4.7.1需求管理规划 4.7.2需求变更管理 要点 进一步阅读材料 练习 参考书目 第5系统建模 5.1上下文模型 5.2交互模型 5.2.1用例建模 5.2.2时序图 5.3结构模型 5.3.1类图 5.3.2泛化 5.3.3聚合 5.4行为模型 5.4.1数据驱动的建模 5.4.2事件驱动模型 5.5模型驱动工程 5.5.1模型驱动体系结构 5.5.2可执行uml 要点 进一步阅读材料 练习 参考书目 第6体系结构设计 6.1体系结构设计决策 6.2体系结构视图 6.3体系结构模式 6.3.1分层体系结构 6.3.2容器体系结构 6.3.3客户机-服务器体系结构 6.3.4管道和过滤器体系结构 6.4应用体系结构 6.4.1事务处理系统 6.4.2信息系统 6.4.3语言处理系统 要点 进一步阅读材料 练习 参考书目 第7设计与实现 7.1利用uml进行面向对象设计 7.1.1系统上下文与交互 7.1.2体系结构的设计 7.1.3对象类识别 7.1.4设计模型 7.1.5接口描述 7.2设计模式 7.3实现问题 7.3.1复用 7.3.2配置管理 7.3.3宿主机-目标机开发 7.4开源开发 要点 进一步阅读材料 练习 参考书目 第8软件测试 8.1开发测试 8.1.1单元测试 8.1.2选择单元测试案例 8.1.3组件测试 8.1.4系统测试 8.2测试驱动开发 8.3发布测试 8.3.1基于需求的测试 8.3.2情景测试 8.3.3性能测试 8.4用户测试 要点 进一步阅读材料 练习 参考书目 第9软件进化 9.1进化过程 9.2程序进化的动态特性 9.3软件维护 9.3.1维护预测 9.3.2软件再工程 9.3.3通过重构进行预防性维护 9.4遗留系统管理 要点 进一步阅读材料 练习 参考书目 第二部分可依赖性和信息安全性 第10社会技术系统 10.1复杂系统 10.1.1系统总体特性 10.1.2系统非确定性 10.1.3成功标准 10.2系统工程 10.3系统采购 10.4系统开发 10.5系统运行 10.5.1人为错误 10.5.2系统进化 要点 进一步阅读材料 练习 参考书目 第11可依赖性与信息安全性 11.1可依赖性特征 11.2可用性和可靠性 11.3安全性 11.4信息安全性 要点 进一步阅读材料 练习 参考书目 第12可依赖性与信息安全性描述 12.1风险驱动的需求描述 12.2安全性描述 12.2.1危险识别 12.2.2危险评估 12.2.3危险分析 12.2.4风险降低 12.3可靠性描述 12.3.1可靠性度量 12.3.2非功能性的可靠性需求 12.3.3功能可靠性描述 12.4信息安全性描述 12.5形式化描述 要点 进一步阅读材料 练习 参考书目 第13可依赖性工程 13.1冗余性和多样性 13.2可依赖的过程 13.3可依赖的系统体系结构 13.3.1保护性系统 13.3.2自监控系统体系结构 13.3.3n-版本编程 13.3.4软件多样性 13.4可依赖的编程 要点 进一步阅读材料 练习 参考书目 第14信息安全工程 14.1信息安全风险管理 14.1.1生存期风险评估 14.1.2运行风险评估 14.2面向信息安全的设计 14.2.1体系结构设计 14.2.2设计准则 14.2.3部署设计 14.3系统生存能力 要点 进一步阅读材料 练习 参考书目 第15可依赖性与信息安全保证 15.1静态分析 15.1.1检验和形式化方法 15.1.2模型检测 15.1.3自动静态分析 15.2可靠性测试 15.3信息安全性测试 15.4过程保证 15.5安全性和可依赖性案例 15.5.1结构化论证 15.5.2结构化的安全性论证 要点 进一步阅读材料 练习 参考书目 第三部分高级软件工程 第16软件复用 16.1复用概览 16.2应用框架 16.3软件产品线 16.4cots产品的复用 16.4.1cots解决方案系统 16.4.2cots集成系统 要点 进一步阅读材料 练习 参考书目 第17基于组件的软件工程 17.1组件和组件模型 17.2cbse过程 17.2.1面向复用的cbse 17.2.2基于复用的cbse 17.3组件合成 要点 进一步阅读材料 练习 参考书目 第18分布式软件工程 18.1分布式系统的问题 18.1.1交互模型 18.1.2中间件 18.2客户机-服务器计算 18.3分布式系统的体系结构模式 18.3.1主从体系结构 18.3.2两层客户机-服务器结构 18.3.3多层客户机-服务器结构 18.3.4分布式组件体系结构 18.3.5对等体系结构 18.4软件作为服务 要点 进一步阅读材料 练习 参考书目 第19面向服务的体系结构 19.1服务作为可复用的组件 19.2服务工程 19.2.1可选服务的识别 19.2.2服务接口设计 19.2.3服务实现和部署 19.2.4遗留系统服务 19.3使用服务的软件开发 19.3.1工作流设计和实现 19.3.2服务测试 要点 进一步阅读材料 练习 参考书目 第20嵌入式软件 20.1嵌入式系统设计 20.1.1实时系统建模 20.1.2实时编程 20.2体系结构模式 20.2.1观察和反应 20.2.2环境控制 20.2.3处理管道 20.3时序分析 20.4实时操作系统 要点 进一步阅读材料 练习 参考书目 第21面向方面的软件工程 21.1关注点分离 21.2方面、连接点和切入点 21.3采用方面的软件工程 21.3.1面向关注点的需求工程 21.3.2面向方面的设计和编程 21.3.3检验和有效性验证 要点 进一步阅读材料 练习 参考书目 第四部分软 件 管 理 第22项目管理 22.1风险管理 22.1.1风险识别 22.1.2风险分析 22.1.3风险规划 22.1.4风险监控 22.2人员管理 22.3团队协作 22.3.1成员挑选 22.3.2小组的结构 22.3.3小组的沟通 要点 进一步阅读材料 练习 参考书目 第23项目规划 23.1软件报价 23.2计划驱动的开发 23.2.1项目计划 23.2.2规划过程 23.3项目进度安排 23.4敏捷规划 23.5估算技术 23.5.1算法成本建模 23.5.2cocomo Ⅱ模型 23.5.3项目的工期和人员配备 要点 进一步阅读材料 练习 参考书目 第24质量管理 24.1软件质量 24.2软件标准 24.3复查与审查 24.3.1复查过程 24.3.2程序审查 24.4软件度量和量度 24.4.1产品量度 24.4.2软件组件分析 24.4.3度量歧义 要点 进一步阅读材料 练习 参考书目 第25配置管理 25.1变更管理 25.2版本管理 25.3系统构建 25.4发布版本管理 要点 进一步阅读材料 练习 参考书目 第26过程改善 26.1过程改善过程 26.2过程度量 26.3过程分析 26.4过程变更 26.5cmmi过程改善框架 26.5.1分阶段的cmmi模型 26.5.2连续cmmi模型 要点 进一步阅读材料 练习 参考书目 术语表5.2连续cmmi模型 要点 进一步阅读材料 练习 参考书目 术语表
习 题 答 案 习题一答案 一、选择题 1. 软件的主要特性是(A B C)。 A) 无形 B) 高成本 C) 包括程序和文档   D) 可独立构成计算机系统 2. 软件工程三要素是(C D)。 A) 技术、方法和工具  B) 方法、工具和过程  C) 方法、对象和类  D) 过程、模型、方法 3. 包含风险分析的软件工程模型是(A)。 A) 螺旋模型 B) 瀑布模型 C) 增量模型 D) 喷泉模型 4. 软件工程的主要目标是(C)。 A) 软件需求  B) 软件设计  C) 风险分析  D) 软件实 现 5. 下列属于面向对象开发方法的是(A B C D)。 A) Booch   B) UML   C) Coad   D) OMT 6. 软件危机的主要表现是(B D)。 A) 软件成本太高 B) 软件产品的质量低劣 C) 软件开发人员明显不足 D) 软件生产率低下 7. 软件开发方法的主要工作模型有(A B C) A) 螺旋模型 B) 循环模型 C) 瀑布模型 D) 专家模型 8. 软件工程的目标有(A B C)。 A) 易于维护 B) 低的开发成本 C) 高性能 D) 短的开发期 9. 软件工程学的目的和意义是( )。 A) 应用科学的方法和工程化的规范管理来指导软件开发 B) 克服软件危机 C) 作好软件开发的培训工作 D) 以较低的成本开发出高质量的软件 二、 判断题 1. 软件就是程序,编写软件就是编写程序。(×) 2. 瀑布模型的最大优点是将软件开发的各个阶段划分得十分清晰。(×) 3. 结构化方法的工作模型是使用螺旋模型进行开发。(×) 4. 结构化方法和JSP方法都不适合于大型软件的开发。(√) 5. 原型化开发方法包括生成原型和实现原型两个步骤。(×) 6. 面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。( √) 7. 软件危机的主要表现是软件的需求量迅速增加,软件价格上升。(×) 8. 软件工具的作用是为了延长软件产品的寿命。(×) 9. 软件工程过程应该以软件设计为中心,关键是编写程序。(×) 10. RCP法与RSP法的主要区别是前者采用循环渐进的开发方式,原型将成为最终的产品,而后者将被废弃。(√) 三、简答题 1. 软件产品的特性是什么? 答: ● 软件是一种逻辑产品,具有无形性;  ● 软件产品的生产主要是研制;  ● 软件不存在磨损和老化问题,但存在退化问题;  ● 软件产品的生产主要是脑力劳动;  ● 软件产品的成本非常昂贵,其开发方式目前尚未完全摆脱手工生产方式; ● 软件具有“复杂性”,其开发和运行常受到计算机系统的限制。 2. 软件发展有几个阶段?各有何特征? 答: ① 程序设计阶段。    硬件特征:价格贵、存储容量小、运行可靠性差。    软件特征:只有程序、程序设计概念,不重视程序设计方法。   ② 程序系统阶段。    硬件特征:速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长 。    软件特征:程序员数量猛增,开发人员素质低。   ③ 软件工程阶段。    硬件特征:向超高速、大容量、微型化及网络化方向发展。    软件特征:开发技术有很大进步,但未获得突破性进展,软件价格不断上升,未完全摆脱软件危机。 3. 什么是软件危机?其产生的原因是什么? 答:“软件危机”(Software Crisis)的出现是由于软件的规模越来越大,复杂度不断增 加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术 不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力、财力, 而在开发过程中就夭折。软件危机主要表现在两个方面: (1) 软件产品质量低劣,甚至开发过程就夭折。 (2) 软件生产率低,不能满足需要。 4. 什么是软件生存周期模型?它有哪些主要模型? 答:软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。 主要模型包括:瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型。 5. 有哪些主要的软件开发方法? 答:主要的软件开发方法有:结构化开发方法、Jackson(JSP、JSD)方法、原型化开发方 法、维也纳开发方法(VDM)和面向对象的开发方法。 6. 软件生命期各阶段的任务是什么? 答:软件生命期瀑布模型分为六个阶段: ● 可行性研究与计划(确定系统的目标和规模,分析项目的可行性); ● 需求分析与规格说明(明确系统的规格和要求); ● 设计(包括概要设计和详细设计,将系统分解为模块); ● 编程(用程序语言实现每个模块,简单容易); ● 测试(发现并改正错误,分为模块测试、集成测试和系统联调三级); ● 运行维护(扩充功能、纠错等)。 习题二答案 一、 选择题 1. 需求分析的主要目的是(B C)。 A) 系统开发的具体方案 B) 进一步确定用户的需求 C) 解决系统是“做什么的问题” D) 解决系统是“如何做的问题” 2. 需求分析的主要方法有(C D)。 A) 形式化分析方法 B) PAD图描述 C) 结构化分析(SA)方法 D) OOA法 3. 面向对象的分析方法主要是建立三类模型,即(D)。 A) 系统模型、ER模型、应用模型 B) 对象模型、动态模型、应用模型 C) E-R模型、对象模型、功能模型 D) 对象模型、动态模型、功能模型 4. SA法的主要描述手段有(B)。 A) 系统流程图和模块图 B) DFD图、数据词典、加工说明 C) 软件结构图、加工说明 D) 功能结构图、加工说明 5. 画分层DFD图的基本原则有(A C D)。 A) 数据守恒原则 B) 分解的可靠性原则 C) 子、父图平衡的原则 D) 数据流封闭的原则 6. 在E-R模型中,包含以下基本成分(C)。 A) 数据、对象、实体 B) 控制、联系、对象 C) 实体、联系、属性 D) 实体、属性、联系 7. 画DFD图的主要目的是(A D)。 A) 作为需求分析阶段用户与开发者之间交流信息的工具 B) 对系统的数据结构进行描述 C) 对目标系统的层次结构进行描述 D) 作为分析和设计的工具 8. 数据字典是数据流图中所有元素的定义的集合,一般由以下四类条目组成(C)。 A) 数据说明条目、控制流条目、加工条目、数据存储条目 B) 数据流条目、数据项条目、文件条目、加工条目 C) 数据源条目、数据流条目、数据处理条目、数据文件条目 D) 数据流条目、数据文件条目、数据池条目、加工条目 9. 在需求分析阶段主要采用图形工具来描述的原因是(B C)。 A) 图形的信息量大,便于描述规模大的软件系统 B) 图形工具能够极好地概括描述一个系统的信息,比文字叙述能够更好地表达重 要的细节 C) 图形能够更加直观地描述目标系统,便于用户理解和交流,有利于开发者与用 户之间达成一致的需求 D) 图形比文字描述简单、形象 二、 判断题 1. 在进行了可行性分析后,需求分析就只需要解决目标系统的设计方案。(×) 2. SA法是面向数据流,建立在数据封闭原则上的需求分析方法。(√) 3. HIPO法既是需求分析方法,又是软件设计方法。(√) 4. 在面向对象的需求分析方法中,建立动态模型是最主要的任务。(×) 5. 加工小说明是对系统流程图中的加工进行说明。(×) 6. 判定表的优点是容易转换为计算机实现,缺点是不能够描述组合条件。(×) 7. 需求分析的主要方法有SD法、OOA法及HIPO法等。(×) 8. 分层的DFD图可以用于可行性分析阶段,描述系统的物理结构。(×) 9. 信息建模方法是从数据的角度来建立信息模型的,最常用的描述信息模型的方法是E-R 图。(√)  10. 用于需求分析的软件工具,应该能够保证需求的正确性,即验证需求的一致性、完整性、现实性和有效性。(√) 三、 问答题 1. 什么是需求分析?需求分析阶段的基本任务是什么? 答: 需求分析是当前软件工程中的关键问题,需求分析阶段的任务是:在可行性分析的基础上,进一步了解、确定用户需求。准确地回答 “系统必须做什么?” 的问题。获得需求规格说 明书。还涉及到软件系统的目标、软件系统提供的服务、软件系统的约束和软件系统运行的环境。它还涉及到这些因素和系统的精确规格说明,以及系统进化之间的关系。 需求分析的基本任务包括: (1) 抽取需求 分析现行系统存在需要解决的问题。获取足够多的问题领域的知识,需求抽取的方法一般有问卷法、面谈法、数据采集法、用例法、情景实例法以及基于目标的方法等;还有知识工程方法,例如,场记分析法、卡片分类法、分类表格技术和基于模型的知识获取等 。 (2) 模拟和分析需求 需求分析和模拟又包含三个层次的工作。首先是需求建模。需求模型的表现形式有自然语言、半形式化(如图、表、结构化英语等)和形式化表示等三种。需求概念模型的要求包括实现的独立性:不模拟数据的表示和内部组织等;需求模拟技术又分为企业模拟、功能需求模拟和非功能需求模拟等。 (3) 传递需求 传递需求的主要任务是书写软件需求规格说明。 (4) 认可需求 就是对需求规格说明达成一致,其主要任务是冲突求解,包括定义冲突和冲突求解两方面。常用的冲突求解方法有:协商、竞争、仲裁、强制、教育等,其中有些只能用人的因素去控制。 (5) 进化需求 客户的需要总是不断(连续)地增长,但是一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化(变化)就成为软件进化的首要问题。对于传统的变化管理过程来说,其基本成分包括软件配置、软件基线和变化审查小组。当前的发展是软件家族法 ,即产品线方法。多视点方法也是管理需求变化的一种新方法,它可以用于管理不一致性, 并进行关于变化的推理。 2. M公司的软件产品以开发实验型的新软件为主。用瀑布模型进行软件开发已经有近十年了,并取得了一些成功。若你作为一名管理员刚加入M公司,你认为快速原型法对公司的软件开发更加优越,请向公司副总裁写一份报告阐明你的理由,切记:副总裁不喜欢报告长度 超过一页(B5)。 参考答案提示: 应先简述瀑布模型的缺点,它已不适宜开发实验型的软件。根据快速原型法的特点,说明它特别适合于开发探索型、实验型的软件。 3. 如何画分层数据流图? 答: 总的原则是:至顶而下,逐层分解(画分层数据流图)。 比较复杂的系统不能画在一张纸上,逐层分解的画法可以控制每一层的复杂度。 顶层:将整个系统作为一个加工,描述系统边界(输入与输出)。 中间层:表示某个加工分解为一组子加工,其中的子加工还需进一步分解。 底层:由不再进行分解的基本加工组成。 4. 加工小说明有哪些描述方法? 答: ● 结构化语言:介于自然语言和形式语言(如谓词逻辑)之间。 ● 结构化英语:通常由外层和内层结构组成。 ● 汉语的情况:精确、简明扼要、文体可以灵活。 ● 判定表:适用于表述比较复杂的加工逻辑,如具有多项选择条件的操作。 ● 判定树:本质上与判定表相同,图形表示更易于理解。 5. 考察下图中子图、父图的平衡。 图1 图2 参考答案: 图1中子图与父图不平衡。子图是父图中加工2的分解,加工2 有输入数据流M和N,输出数据流T,而子图则只有一个输入数据N,却有两个输出数据流T与S。 图2中子图是父图中加工3的分解,虽然表面上加工3只有一个输入数据流“订货单”,而子图却有三个输入数据流,但是如果“订货单”是由“客户”、“账号”和“数量”三部分组成,即有如下数据条目,订货单=客户+账号+数量(2.2.5数据词典),则子、父图平衡。 6. 画出银行取款过程的DFD图。问题描述为:储户用存折取款,首先填写取款单,根据“ 账卡”中的信息检验取款单与存折,如有问题,将问题反馈给储户,否则,登录“储户存款 数据库”,修改相应数据,并更新“账卡”,同时发出付款通知,出纳向储户付款。 参考答案: 7. 常用的软件需求分析方法有哪些? 答: 结构化分析方法(SA)、功能分解法、信息建模法、面向对象的分析方法(OOA)。 习题三答案 一、 选择题 1. 模块的基本特征是(A C)。 A) 外部特征(输入/输出、功能) B) 内部特征(输入/输出、功能) C) 内部特征(局部数据、代码) D) 外部特征(局部数据、代码 ) 2. SD方法的设计总则是(C D)。 A) 程序简洁、操作方便 B) 结构清晰、合理 C) 模块内聚性强 D) 模块之间耦合度低 3. 软件设计的主要任务是(A B D)。 A) 将分析阶段获得的需求说明转换为计算机中可实现的系统 B) 完成系统的数据结构和程序结构设计 C) 完成模块的编码和测试 D) 对模块内部的过程进行设计 4. 设计阶段应达到的目标有(A D)。 A) 提高可靠性和可维护性 B) 提高应用范围 C) 结构清晰 D) 提高可理解性和效率 5. 从工程管理的角度来看,软件设计分两步完成(D)。 A) ①系统分析②模块设计 B) ①详细设计②总体设 计 C) ①模块设计②详细设计 D) ①总体设计②详细设 计 6. 模块独立性准则由以下定性指标来衡量(BD)。 A) 分解度    B) 耦合度    C) 屏蔽性    D) 内聚性 7. 用户界面设计的任务包括(A B C)。 A) 确定用户界面类型 B) 建立任务模型 C) 建立用户模型 D) 建立功能模型 8. 程序设计语言可以分为(B C D)。 A) 面向过程的语言    B) 机器语言 C) 高级语言    D) 汇编语言  9. 程序效率包括(A C D)几个方面的内容。 A) 代码效率     B) 运行效率    C) 存储效率     D) I/O效率 10. SP方法中的基本控制结构有(A B C)。 A) 顺序结构 B) 选择结构 C) 重复结构 D) GOTO结构 11. 内部文档可用注释语言书写,注释语言分为(A B C D)。 A) 序言性注释 B) 描述性注释 C) 功能性注释 D) 状态性注释 12. 为使程序中数据说明更易于理解和维护,必须遵循以下原则(A B C) 。 A) 数据说明的次序应当规范化 B) 一个语句说明多个变量时,各变量名按字母顺序排列 C) 对于复杂的数据结构,要加注释,说明在程序实现时的特点 D) 定义变量名应按字母顺序排列 13. 源程序的效率与(D)阶段确定的算法的效率直接有关。 A) 概要设计 B) 总体设计 C) 单元设计 D) 详细设计 14. 在详细设计翻译转换成源程序代码后,算法效率反映为对程序的哪几个方面的要求 (C D)。 A) 读写速度 B) 代码长度 C) 存储容量 D) 执行速度 15. 提高程序效率的根本途径在于(B C)。 A) 编程时对程序语句进行调整 B) 选择良好的设计方法 C) 使程序最大限度的简洁 D) 选择良好的数据结构与算法 二、判断题 1. 划分模块可以降低软件的复杂度和工作量,所以应该将模块分得越小越好。 (×) 2. 在网状结构中任何两个模块都是平等的,没有从属关系,所以在软件开发过程中常常被使用。(×) 3. 信息隐蔽原则有利于提高模块的内聚性。(√) 4. 中心变换型的DFD图可看成是对输入数据进行转换而得到输出数据的处理,因此可以使 用事务分析技术得到初始的模块结构图。(×) 5. SD法是一种面向数据结构的设计方法,强调程序结构与问题结构相对应。 (×) 6. 所谓结构冲突,是指输入数据与输出数据之间很少或没有结构上的对应关系。通常解决 的办法是:构造一个或者多个中间结构,在输入和输出结构之间进行转换。(√) 7. 当模块的控制范围是其作用范围的子集时,模块之间的耦合度较低。(×) 8. JACKSON方法是以数据流、数据封闭性准则逐层分解的。(×) 9. 程序设计语言的工程特性包括:可移植性、可重用性、可维护性、局部性和顺序性。(×) 10. 项目应用领域是选择语言的关键因素。(√) 11. FORTRAN、Pascal、C语言、PL/1和汇编语言都是科学工程计算可选用的语言。(×) 12. 要用快速原型法开发软件,应选用4GL语言。(√) 13. 提高程序效率的根本途径是选择良好的设计方法、数据结构与算法。(×) 14. 良好的程序设计风格简单说就是高的编程技巧。(√) 三、简答题 1. 模块内联系和模块间联系有哪些种类? 答:块间联系的各种类型的划分,从以下3方面考虑: ● 按块间联系的方式(可分为直接引用与过程调用); ● 按块间共用信息的作用(可分为数据型、控制型与混合型); ● 按块间共用的信息数量多少(信息多联系紧密)。 (1) 块间联系的类型,按照耦合度由大到小分为: 内容型:直接引用另一模块的内部信息; 公共型:两个模块引用共同的全程数据区; 控制型:模块间传送的信息用于控制模块的内部逻辑; 复合型:模块间传送复合的数据结构; 数据型:模块间传送单个数据项。 (2) 块内联系的类型,按照内聚性从小到大分为: 偶然型:模块内部没有必然联系; 逻辑型:逻辑上相似的功能放进一个模块; 瞬时型:将同时执行的语句放在一个模块; 通信型:模块中的各部分引用共同的数据; 顺序型:模块中一部分的输出是另一部分的收入; 功能型: 模块中刚好包含了完成一个基本任务所必需的成分。 2. 分析以下DFD图,说明属于哪种类型的DFD图,并按照相应的变换将其转换为初始的模块 结构图。 参考答案:(略) 3. 下图是修改文件记录的DFD图,请确定其主加工。 解:主加工为:账号、修改、写记录。 4. 按照“降低块间联系,提高块内联系”的设计总则对模块进行修改,具体从哪些方面进 行改进? 解: (1) 尽可能建立功能模块; (2) 消除重复功能; (3) 模块的作用范围与控制范围,即当作用范围为控制范围的子集时,才能获得较低的块间 联系; (4) 模块的大小适当; (5) 模块的扇入扇出数不宜太多。 5. 根据模块的作用范围与控制范围的原则,判定a、b两图的正确性。 解:显然,图a不满足作用范围应与控制范围的原则,模块F的作用范围不在控制范围之内。 图b的模块设计合理。 6. 图a中,模块G为判定,判断涉及到模块B、F、G,请指出设计中的错误,再根据改进模 块图的基本原则,画出1~2个改进方案(不改变模块G的判断关系),并说明是按照哪条基本 原则进行改进的。 解:图b为一个改进方案,将模块G的位置提高,使其作用范围为控制范围的子集,减少模块 之间的联系。 7. 编码阶段的主要任务是什,应交付的结果是什么? 答:编码阶段的主要任务是为每个模块编写程序。即是:将详细设计的结果转换为用某种计 算机语言写的程序——源程序代码。编码阶段应交付的结果是带有“程序内部文档”的、不 再含有语法错误的程序。 8. SP法的自顶向下,逐步求精方法的优点有哪些? 答:此法符合人们解决复杂问题的普遍规律,可提高软件开发的成功率和生产率;而且用先 全局后局部、先整体后细节、先抽象后具体的逐步求精过程,开发出来的程序具有清晰的层 次结构,因此程序容易阅读和理解。这样,程序自顶向下,逐步细化,分解成一个树型结构 。 因此,在同一层次的节点上做细化工作,相互之间没有联系,它们之间的细化工作相互独立 ;在任何一步发生错误,一般只影响它下层的节点,同一层其他节点不受影响;在以后的测试中,也可以先独立地一个节点一个节点地做,最后再集成。这样,程序清晰和模块化,使 得在修改和重新设计一个软件时,可复用的代码量最大。 9. 为了使程序具有良好的设计风格,应注意哪些方面的问题? 答:(1) 标识符应按意取名。 标识符即符号名,包括:模块名、常量名、标号名、子程序名、数据区名、缓冲区名等。 这些名字应能反映它所代表的实际东西,应有一定实际意义,使其能够见名知意,有助于对 程序功能的理解。 (2) 程序应加注释,它分为两类:序言性注释和功能性注释。 序言性注释应置于每个模块的起始部分,主要内容有:①说明每个模块的用途,功能;②说明模块的接口即调用格式、参数描述及从属模块的清单;③数据描述;④开发历史 。 功能性注释是嵌在源程序体中的,用于说明其后的程序段或语句的功能以及数据的状态;也就是解释下面要“做什么”,或是执行下面的语句会发生什么情况;而不是解释下面“怎么做”,因为怎么做常常是与程序重复的,且对读者理解程序没有什么帮助。 10. 样评价程序的执行效率?它与程序清晰性的关系是怎样的? 答:许多程序员往往片面追求效率,其实程序系统的成本不仅包括运行所需的机时,同时还应把程序员及操作员所花费的人力考虑进去。在编程时为追求效率而损害可读性或可靠性,会给以后的维护工作带来困难,所以从整体上看来是不值得的。 此外,还应该认识到,提高程序效率的根本途径在于:选择良好的设计方法、良好的数据结构与算法,而不是靠编程时对程序语句进行调整。 (1) 追求建立在不损害程序可读性或可靠性基础上,要先使程序正确、清晰,再提高程序 效率。 (2) 不能因为贪图效率上的小利,而破坏程序的清晰性。 (3) 让编译程序去作简单的优化。 (4) 提高程序效率的根本途径在于:选择良好的设计方法和良好的数据结构与算法,而不是靠编程时对程序语句做调整。 11. 假定:需要编一个求解一元二次方程根的子程序,加入到现有的子程序库中,供其他程序员使用。要求: (1) 为该子程序写一个序言性注释; (2) 用PASCAL语言或其他语言写出这个子程序(要把根的性质,如:实根、复根、降为一次方程等有区别地通知调用者),并加上描述性注释。 答案:(略) 习题四答案 一、选择题 1. 面向对象程序设计的基本机制(ABC)。 A) 继承 B) 消息 C) 方法 D) 结构 2. 下列属于面向对象的要素有(BCD)。 A) 分类性 B) 抽象 C) 共享 D) 封装 3. 下列选项中属于面向对象开发方法的有(ACD)。 A) Booch B) CAD C) Coad D) OMT 4. 下列属于Coad方法中面向对象的分析模型的层次有(AB)。 A) 主题层 B) 对象层 C) 应用层 D) 接口层 5. 一个类属性依其特征划分,其类型有(ABCD)。 A) 描述型 B) 定义型 C) 派生型 D) 参考型 6. 在进行面向对象分析时,所采用的模型有(ABD)。 A) 对象模型 B) 动态模型 C) 静态模型 D) 功能模型 7. 状态是对象属性的值的一种抽象,它的性质有(AB)。 A) 时间性 B) 持续性 C) 有序性 D) 有穷性 8. 数据流图中的处理必须用对象中的操作来实现常见的操作有(ABCD)。 A) 查询 B) 动作 C) 活动 D) 访问 9. 建立继承关系时所采用的方式有(AC)。 A) 自顶向下 B) 从内到外 C) 自底向上 D) 从复杂到简单 10. 对象是人们要研究的任何事物主要的对象类型有(ABCD)。 A) 有形实体 B) 作用 C) 事件 D) 性能说明 二、判断题 1. 面向对象的的方法是以类作为最基本的元素,它是分析问题解决问题的核心。(×) 2. 类是指具有相同或相似性质对象的抽象,对象是抽象的类,类的具体化就是对象。(√) 3. 继承性是父类和子类之间共享数据结构和消息的机制,这是类之间的一种关系(×)。 4. 多态性增强了软件的灵活性和重用性,允许用更为明确、易懂的方式去建立通用软件, 多态性和继承性相结合使软件具有更广泛的重用性和可扩充性。(×) 5. 面向对象分析,就是抽取和整理用户需求并建立问题域精确模型的过程。(√) 6. 面向对象的设计的主要目标是提高生产效率,提高质量和提高可维护性。(√) 7. 对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。(√) 8. 面向对象的分析是用面向对象的方法对目标系统的问题空间进行理解、分析和反映。通过对象层次结构的组织确定解空间中应存在的对象和对象层次结构。(√) 9. 类的设计过程包括:确定类,确定关联类,确定属性,识别继承关系。(√) 10. 复用也叫重用或再用,面向对象技术中的“类”,是比较理想的可重用软构件。有三种重用方式:实例重用、继承重用、多态重用。(√) 11. 主题是一种关于模型的抽象机制,它是面向对象模型的概貌,也是关于某个模型要同时考虑和理解的内容,主题起一种控制作用。(√) 12. 面向对象的分析由对象、结构、继承性和基于消息的通信构成。(×) 13. 支持继承性是面向对象程序设计语言和传统程序设计语言在语言机制方面的根本区别。(√) 14. 面向对象的分析过程主要包括三项内容:理解、表达和验证。(√) 15. 面向对象的设计的主要目标是提高生产效率、提高质量和提高可维护性。(√) 三、 简答题 1. 与传统程序设计模式中的过程调用相比,消息传递机制有何本质区别? 答: (1) 消息传递必须给出信道的信息,通常要指出明显的接受方。 (2) 由于接受方是一通信实体,具有保持状态的能力,所以同一发送方在不同时刻向同一 接受方发送同样的信息,可因接受方的当前状态不同而得到不同的结果。 (3) 消息传递可以是异步的,发送方可以不必等待接受方返回信息就可以继续执行后面的操作,因而支持程序的并发和分布执行,而过程调用只能是同步的,本质上是串行的。 2. 阐述面向对象的特征,并做简要的解释。 答: (1) 对象惟一性。 每个对象都有自身惟一的标识,通过这种标识,可找到相应的对象。 (2) 分类性。 是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。 (3) 继承性。 是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系。 (4) 多态性。 是指相同的操作或函数,过程作用于多种类型的对象上,并获得不同的结果。 3. Coad方法主要由面向对象分析OOA和面向对象设计OOD。OOA方法分析过程和构造OOA概念模型的顺序由5个层次组成,请简述这5个层次。 答: (1) 发现类及对象。描述如何发现类及对象。从应用领域开始识别类及对象,形成整 个应用的基础,然后,据此分析系统的责任。 (2) 识别结构。该阶段分为两个步骤。第一,识别“一般-特殊”结构,该结构捕获了识别出的类的层次结构;第二,识别“整体-部分”结构,该结构用来表示一个对象如何成为另一个对象的一部分,以及多个对象如何组装成更大的对象。 (3) 定义主题。主题由一组类及对象组成,用于将类及对象模型划分为更大的单位,便于理解。 (4) 定义属性。其中包括定义类的实例(对象)之间的实例连接。 (5) 定义服务。其中包括定义对象之间的消息连接。 4. 面向对象程序设计有哪些优点? 解:开发时间短、效率高、可靠性高,所开发的程序更强壮。由于面向对象编程的可重用性 ,可以在应用程序中大量采用成熟的类库,从而缩短开发时间,这样程序更易于维护、 更新和升级。继承和封装使得应用程序的修改带来的影响更加局部 化。 5.比较面向对象方法与结构化方法的特点。 解:分析是问题抽象 (做什么),设计是问题求解 (怎么做),实现是问题的解 (结果)。任 何方法学对客观世界的抽象和求解过程都是如此。在问题抽象阶段,结构化方法面向过程, 按照数据变换的过程寻找问题的结点,对问题进行分解。因此,与面向对象方法强调的对象 模型不同,描述数据变换的功能模型是结构化方法的重点。如果问题世界的功能比数据更复 杂或者更重要,那么结构化方法仍然应是首选的方法学。如果数据结构复杂且变换不多, 那么如果以过程主导分析和设计,一旦有系统变更就会给下游开发带来极大混乱。 由于对过程的理解不同,面向过程的功能细分所分割出的功能模块有时会因人而异。而面向 对象的对象细分,从同一问题领域的对象出发,不同人得出相同结论的比率较高。 在设计上,结构化方法学产生自顶向下、结构清晰的系统结构。每个模块有可能保持较强的独立性,但它往往与数据库结构相独立,功能模块与数据库逻辑模式间没有映射关系,程序与数据结构很难封装在一起。如果数据结构复杂,则模块独立性很难保证。面向对象方法抽象的系统结构往往并不比结构化方法产生的系统结构简单,但它能映射到数据库结构中,很容易实现程序与数据结构的封装。 在软件工程基本原则中有一条“形式化原则”,即对问题世界的抽象结论应该以形式化语言 (图形语言、伪码语言等)表述出来。结构化方法可以用数据流图、系统结构图、数据辞典、状态转移图、实体关系图来进行系统逻辑模型的描述;而面向对象方法可以使用对象模型图、数据辞典、动态模型图、功能模型图。其中对象模型图近似系统结构图与实体关系图的结合,动态模型图类似状态迁移图,功能模型图类似数据流图。 6.当重要的对象被发现后,通过一组互相关联的模型详细表示类之间的关系和对象的行为,这些模型从四个不同的侧面表示了软件的体系结构、静态逻辑、动态逻辑、静态物理和动态物理。试描述一下这四种特性。 解:静态逻辑模型描述实例化(类成员关系)、关联、聚集(整体/部分)、和一般化(继承)等关系。这被称为对象模型。一般化关系表示属性和方法的继承关系。定义对象模 型的图形符号体系通常是从用于数据建模的实体关系图导出的。对设计十分重要的约束,如 基数(一对一、一对多、多对多),也在对象模型中表示。 动态逻辑模型描述对象之间的互相作用。互相作用通过一组协同的对象,对象之间消 息的有序的序列,参与对象的可见性定义,来定义系统运行时的行为。 静态物理模型通过模块描述代码的布局。动态物理模型描述软件的进程和线程体系结 构。 习题五答案 一、选择题 1. 下列不是模型元素的是(D)。 A) 关联 B) 聚合 C) 依赖 D) 笔记 2. UML具有扩展性,常见的扩展机制有(BCD)。 A) 修饰 B) 版类 C) 加标签值 D) 约束 3. UML语言支持的建模方式有(ABD)。 A) 静态建模 B) 动态建模 C) 模块化建模 D) 功能建模 4. 下列各种图可用于动态建模的有(ACD)。 A) 状态图 B) 类图 C) 序列图 D) 活动图 5. 下列属于状态的组成部分的有(AB)。 A) 名称 B) 活动 C) 条件 D) 事件 6. UML中包括的事件有(ABCD)。 A) 条件为真 B) 收到另一对象的信号 C) 收到操作调用 D) 时间表达式 7. 属性的可见性有(ABD)。 A) 公有的 B) 私有的 C) 私有保护的 D) 保护的 8. 用例之间的关系有(BCD)。 A) 友元 B) 扩展 C) 使用 D) 组合 9. 应用于通用化约束的方式有(ABCD)。 A) 完整 B) 不相交 C) 不完整 D) 覆盖 10. 消息的类型有(ABC)。 A) 同步 B) 异步 C) 简单 D) 复杂 二、 判断题 1. UML建模语言是由视图、图、模型元素和通用机制构成的层次关系来描述的。 (√) 2. UML是一种建模语言,是一种标准的表示,是一种方法。 (×) 3. 泳道是一种分组机制,它描述了状态图中对象所执行的活动。 (×) 4. 同步消息和异步消息的主要区别是:同步消息的发送对象在消息发送后,不必等待消息处理,可立即继续执行,而异步消息则发送对象必须等待接收对象完成消息处理后,才能继续执行。 (×) 5. 类图中的角色是用于描述该类在关联中所扮演的角色和职责的。 (√) 6. 类图用来表示系统中类和类与类之间的关系,它是对系统动态结构的描述。 (×) 7. 用例模型的基本组成部件是用例、角色和用例之间的联系。 (√)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值