文章目录

  • 第 1 章 计算机组成与体系结构
    • 1.1 计算机系统组成
      • 1.1.1 计算机硬件的组成
      • 1.1.2 计算机系统结构的分类
      • 1.1.3 复杂指令集系统与精简指令集系统
      • 1.1.4 总线
    • 1.2 存储器系统
      • 1.2.1 主存储器
      • 1.2.2 辅助存储器
      • 1.2.3 Cache 存储器
    • 1.3 流水线
      • 1.3.1 流水线周期
      • 1.3.2 计算流水线执行时间
      • 1.3.3 流水线的吞吐率(Though Put rate,TP)
      • 1.3.4 流水线的加速比
  • 第 2 章 操作系统
    • 2.1 操作系统的类型与结构
      • 2.1.2 操作系统分类
    • 2.2 操作系统基本原理
      • 2.2.1 进程管理
      • 2.2.2 存储管理
      • 2.2.3 设备管理
      • 2.2.4 文件管理
      • 2.2.5 作业管理
  • 第 3 章 数据库系统
      • 3.2.2 关系代数
      • 3.2.4 数据的规范化
      • 3.2.5 反规范化
    • 3.3 数据库设计
      • 3.3.1 数据库设计的方法
    • 3.4 事务管理
      • 3.4.1 并发控制
      • 3.4.2 故障与恢复
    • 3.6 分布式数据库系统
      • 3.6.2 分布式数据库的架构
    • 3.7 数据仓库
    • 3.8 数据挖掘
      • 3.8.3 数据挖掘常用技术
    • 3.9 NoSQL (not only sql)
    • 3.10 大数据
  • 第 4 章 计算机网络
      • 4.1.2 常见的网络协议
    • 4.1.3 IPv6
    • 4.2 局域网与广域网
      • 4.4.2 网络设计
    • 4.5 网络存储技术
    • 4.6 综合布线
  • 第 5 章 系统性能评价
      • 5.3.2 负载均衡
    • 5.4 性能评估
  • 第 6 章 开发方法
    • 6.2 软件开发模型
      • 6.2.1 瀑布模型
      • 6.2.2 演化模型
      • 6.2.3 螺旋模型
      • 6.2.4 增量模型
      • 6.2.5 构件组装模型
    • 6.3 统一过程
    • 6.4 敏捷方法
      • 6.4.1 极限编程XP
      • 6.4.2 特征驱动开发FDD
      • 6.4.3 Scrum
      • 6.4.4 水晶方法
    • 6.5 软件重用
    • 6.6 基于架构的软件设计
      • 6.6.2 基于架构的软件开发模型
    • 6.7 形式化方法
  • 第 7 章 系统规划
    • 7.4.1 遗留系统的评价方法
  • 第 8 章 系统分析与设计方法(UML相同)
  • 第 9 章:软件架构设计
      • 9.1.1 软件架构的定义
      • 9.1.2 软件架构的重要性
    • 9.2 架构需求与软件质量属性
      • 9.2.2 6 个质量属性及实现
    • 9.3 软件架构风格
      • 9.3.2 数据流风格
      • 9.3.3 调用/返回风格
      • 9.3.4 独立构件风格
      • 9.3.5 虚拟机风格
      • 9.3.6 仓库风格
    • 9.4 层次系统架构风格
      • 9.4.1 二层及三层 C/S 架构风格
      • 9.4.2 B/S 架构风格
      • 9.4.3 MVC 架构风格
      • 9.4.4 MVP 架构风格
    • 9.5 面向服务的架构
      • 9.5.2 SOA 的关键技术
      • 9.5.3 SOA 的实现方法
      • 9.5.4 微服务
    • 9.6 架构设计
    • 9.8 软件架构评估
    • 9.10 特定领域软件体系结构
  • 第 11 章:测试评审方法
    • 11.1 测试方法
      • 11.1.2 白盒测试和黑盒测试
      • 11.1.3 缺陷的分类和级别
  • 第 12 章:嵌入式系统设计
    • 12.2 嵌入式系统的组成
    • 12.3嵌入式操作系统
  • 第 13 章:开发管理
      • 13.2.3 软件文档管理
    • 13.7 软件过程改进
  • 第 14 章:信息系统基础知识
      • 14.1.2 信息系统的生命周期
      • 14.1.3 信息系统建设的原则
      • 14.1.4 信息系统开发方法
    • 14.3 政府信息化与电子政务
      • 14.4.2 企业资源规划
      • 14.4.3 客户关系管理CRM
      • 14.4.5 企业门户
      • 14.4.8 电子商务概述
    • 14.6 知识管理与商业智能
      • 14.6.2 商业智能
  • 第 15 章:基于中间件的开发
    • 15.1 面向构件的软件设计
      • 15.1.1构件的概念
      • 15.1.2 模块
      • 15.1.3 语境相关组合构件框架
      • 15.1.4 构件开发当前面临的问题
      • 15.1.5构件的来源
    • 15.2 构件平台与典型架构
      • 15.2.1 OMG的方式
      • 15.2.2 SUN公司的方式
      • 15.2.3 Microsoft的方式
      • 15.2.4 战略比较
    • 15.5 EAI(Enterprise ApplicationIntegration,企业应用集成)
    • 15.6 轻量级架构和重量级架构
      • 15.6.1 Struts 框架
      • 15.6.2 Spring 框架
      • 15.6.3 Hibernate 框架
  • 第 16 章:安全性和保密性设计
    • 16.1 加密和解密
      • 16.1.1 对称密钥加密算法
        • 16.1.2 不对称密钥加密算法
    • 16.2 数字签名与数字水印
    • 16.3 数字证书与密钥管理
      • 16.3.1 密钥分配中心KDC
      • 16.3.2 数字证书和公开密钥基础设施
    • 16.4 安全协议
      • 16.4.1 IPSec 协议简述
      • 16.4.2 SSL 协议
      • 16.4.3 PGP 协议
      • 16.5 访问控制
    • 16.6 网络安全体系
      • 16.7.1 OSI 安全架构
      • 16.8.3 入侵检测系统
    • 16.9 数据备份
    • 16.10系统安全架构设计
      • 16.10.1 鉴别框架
        • 16.10.2访问控制框架
        • 16.10.3 机密性框架
        • 16.10.4完整性框架
        • 16.10.5 抗抵赖框架
  • 第 17 章:系统的可靠性分析与设计
      • 17.1 系统的可靠性定义
    • 17.2 系统故障模型
    • 17.4 软件可靠性的设计与管理
  • 第 18 章:软件的知识产权保护
      • 18.1.3 著作权
    • 18.3 商标法及实施条例
  • 第 19 章:标准化知识
    • 19.2.1 标准分级
  • 第 20 章 架构师管理实践
    • 20.1 基于ODP的架构师管理实践
      • 20.1.2系统转换的方式
    • 20.2 架构师的管理实践
      • 20.2.1 VRAPS组织管理原则
      • 20.2.2 概念框架
  • 第 21 章 层次式架构设计
    • 20.2表现层框架设计
      • 20.2.1使用MVC模式设计表现层
      • 20.3.4 业务逻辑层框架
    • 20.4数据访问层设计(持久层架构设计)
      • 20.4.15种数据访问模式
  • 第 22 章 面向方面的编程
      • 22.1.2面向方面的原因
      • 22.1.7当前的AOP技术
    • 22.2AspectJ
      • 22.2.1AspectJ概述
  • 23.UML建模与架构文档化
    • 23.2 UML基础
      • (1).用例图
      • (2)交互图
      • (3) 类图和对象图
      • (4)状态图和活动图
      • (5)构件图
      • (6)部署图
    • 23.3基于UML的软件开发过程
      • 23.3.1开发过程概述
        • 1.初启
        • 2.细化
        • 3.构建
        • 4.部署
      • 23.3.3面向对象的设计方法
        • 1.设计用例实现方案
        • 2.设计技术支撑方案
        • 3.设计用户界面
        • 4.精化设计模型
    • 23.4 系统架构文档化
      • 23.4.1 模型概述
  • 24.设计模式
    • 24.1 设计模式概述
      • 24.1.1 设计模式的历史
      • 24.1.2 为什么要使用设计模式
      • 24.1.3 成熟的软件设计模式具有以下特性。
      • 24.1.4 设计模式的组成元素
      • 24.1.5 设计模式的分类
    • 24.2设计模式实例
      • 24.2.1创建性模式
      • 24.2.2结构性模式
      • 24.2.3 行为性模式
  • 25. XML技术
    • 25.1 XML概述
      • 25.1.1 XML基本语法
    • 25.3 DTD
      • 25.3.5实体的声明
    • 25.4 XML Schema
      • 25.4.2元素的定义

第 1 章 计算机组成与体系结构

1.1 计算机系统组成

1.1.1 计算机硬件的组成

硬件通常是指一切看得见,摸得到的设备实体。原始的冯•诺依曼(VonNeumann)计 算机在结构上是以运算器为中心的,而发展到现在,已转向以存储器为中心了。图 1-1 所示 为计算机最基本的组成框图。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Q4qUipg-1665920141256)(image/image-20221008203748591.png)]
(1)控制器。控制器是分析和执行指令的部件,也是统一指挥并控制计算机各部件协调工作的中心部件,所依据的是机器指令。控制器的组成包含如下。
① 程序计数器 PC:存储下一条要执行指令的地址;
② 指令寄存器 IR:存储即将执行的指令;
③ 指令译码器 ID:对指令中的操作码字段进行分析解释;
④ 时序部件:提供时序控制信号。
(2)运算器。运算器也称为算术逻辑单元(ArithmeticandLogicUnit,ALU),其主要功能是在控制器的控制下完成各种算术运算和逻辑运算。运算器的组成包含如下。
① 算术逻辑单元 ALU:数据的算术运算和逻辑运算;
② 累加寄存器 AC:通用寄存器,为 ALU 提供一个工作区,用在暂存数据;
③ 数据缓冲寄存器 DR:写内存时,暂存指令或数据;
④ 状态条件寄存器 PSW:存状态标志与控制标志(争议点:也有将其归为控制器的)。
(3)主存储器。主存储器也称为内存储器(通常简称为“内存”或“主存”)。存储现 场操作的信息与中间结果,包括机器指令和数据。
(4)辅助存储器。辅助存储器也称为外存储器,通常简称为外存或辅存。存储需要长期保存的各种信息。
(5)输入设备。输入设备的任务是把人们编好的程序和原始数据送到计算机中去,并 且将它们转换成计算机内部所能识别和接受的信息方式。按输入信息的形态可分为字符
(包括汉字)输入、图形输入、图像输入及语音输入等。目前,常见的输入设备有键盘、 鼠标、扫描仪等。
(6)输出设备。输出设备的任务是将计算机的处理结果以人或其他设备所能接受的 形式送出计算机。目前,最常用的输出设备是打印机和显示器。有些设备既可以是输入 设备,同时也可以是输出设备,例如,辅助存储器、自动控制和检测系统中使用的数模转换装置等。

1.1.2 计算机系统结构的分类

1966 年,Michael.J.Flynn 提出根据指令流、数据流的多倍性特征对计算机系统进行
分类(通常称为 Flynn 分类法),有关定义如下。
(1)指令流:指机器执行的指令序列;
(2)数据流:指由指令流调用的数据序列,包括输入数据和中间结果,但不包括输出
数据。
Flynn 根据不同的指令流-数据流组织方式,把计算机系统分成以下四类。
(1)单指令流单数据流(Single Instruction stream and Single Data stream,SISD):SISD 其实就是传统的顺序执行的单处理器计算机,其指令部件每次只对一条指令进行译码,并只对一个操作部件分配数据。
(2)单指令流多数据流(Single Instruction stream and Multiple Data stream,SIMD):SIMD 以并行处理机(矩阵处理机)为代表,并行处理机包括多个重复的处理单元,由单一指令部件控制,按照同一指令流的要求为它们分配各自所需的不同数据。
(3)多指令流单数据流(Multiple Instruction stream and Single Data stream,MISD):MISD
具有 n 个处理单元,按 n 条不同指令的要求对同一数据流及其中间结果进行不同的处理。一个处理单元的输出又作为另一个处理单元的输入。这类系统实际上很少见到。有文献把流水线看作多个指令部件,称流水线计算机是 MISD。
(4)多指令流多数据流(Multiple Instruction stream and Multiple Data stream,MIMD)MIMD 是指能实现作业、任务、指令等各级全面并行的多机系统。如多核处理器、多处理机属于 MIMD。

1.1.3 复杂指令集系统与精简指令集系统

复杂指令系统计算机(Complex Instruction Set Computer,CISC);
精简指令系统计算机(Reduced Instruction Set Computer,RISC)。

  1. CISC 指令系统的特点
    CISC 指令系统的主要特点如下:
    (1)指令数量众多。
    (2)指令使用频率相差悬殊。
    (3)支持很多种寻址方式。
    (4)变长的指令。
    (5)指令可以对主存单元中的数据直接进行处理。
    (6)以微程序控制为主。
  2. RISC 指令系统的特点
    (1)指令数量少。
    (2)指令的寻址方式少
    (3)指令长度固定,指令格式种类少。
    (4)以硬布线逻辑控制为主。
    (5)单周期指令执行,采用流水线技术。
    (6)优化的编译器:
    (7)CPU 中的通用寄存器数量多
1.1.4 总线

总线是一组能为多个部件分时共享的公共信息传送线路。
分时是指同一时刻只允许有一个部件向总线发送信息,如果出现两个或两个以上部件同时向总线发送信息,势必导致信号冲突。当然,在同一时刻,允许多个部件同时从总线上接收相同的信息。
按总线功能来划分,又可分为地址总线、数据总线、控制总线三类

1.2 存储器系统

传统的存储器系统一般分为高速缓冲存储器(Cache)、主存、辅存三级。
存储器中数据常用的存取方式有顺序存取、直接存取、随机存取和相联存取四种。

1.2.1 主存储器

根据工艺和技术不同,主存可分为随机存取存储器和只读存储器。
1.随机存取存储器
随机存取存储器(Random Access Memory,RAM)既可以写入也可以读出,但断电后信
息无法保存,因此只能用于暂存数据。RAM 又可分为 DRAM(Dynamic RAM,动态 RAM) 和SRAM(Static RAM,静态 RAM)两种,DRAM 的信息会随时间逐渐消失,因此需要定时对其进行刷新维持信息不丢失;SRAM 在不断电的情况下信息能够一直保持而不会丢失。DRAM 的密度大于 SRAM 且更加便宜,但 SRAM 速度快,电路简单(不需要刷新电路),然而容量小,价格高。
2.只读存储器
只读存储器(Read Only Memory,ROM)可以看作 RAM 的一种特殊形式,其特点是:存储器的内容只能随机读出而不能写入。这类存储器常用来存放那些不需要改变的信息。由于信息一旦写入存储器就固定不变了,即使断电,写入的内容也不会丢失,所以又称为固定存储器。ROM 一般用于存放系统程序 BIOS(Basic Input Output System,基本输入输出系统)。
3.内存编址方法在计算机系统中,存储器中每个单元的位数是相同且固定的,称为存储器编址单位。
不同的计算机,存储器编址的方式不同,主要有字编址和字节编址。内存一般以字节(8 位)为单位,或者以字为单位(字的长度可大可小,例如 16 位或者 32 位等,在这类试题中,一般会给出字的大小)。
例如,内存地址从 AC000H 到 C7FFFH,则共有 C7FFFFH-AC000H=1BFFFH 个地址单元(转换为十进制后,为 112KB)。如果该内存地址按字(16bit)编址,则共有 112KB*16 位。假设该内存由 28 片存储器芯片构成,已知构成此内存的芯片每片有 16KB 个存储单元,则该芯片每个存储单元存储(112KB*16)/(28*16KB)=4 位。

1.2.2 辅助存储器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eRy4UN3j-1665920141268)(image/image-20221008205631225.png)]
磁盘访问时间(存取时间) = 寻道时间+旋转延迟时间

1.2.3 Cache 存储器

1.Cache 基本原理
例如,设某计算机主存的读/写时间为 l00ns,有一个指令和数据合一的 Cache,已知该
Cache 的读/写时间为 10ns,取指令的命中率为 98%,取数的命中率为 95%。在执行某类
程序时,约有 1/5 指令需要存/取一个操作数。假设指令流水线在任何时候都不阻塞,则设
置 Cache 后,每条指令的平均访存时间约为:
(2%′100ns+98%′10ns)+1/5′(5%′100ns+95%′10ns)=14.7ns

2.映射机制
(1)直接映像
直接映像方式以随机存取存储器作为 Cache 存储器,硬件电路较简单。在进行映像时,
主存地址被分成三个部分,从高到低依次为:区号、页号以及页内地址,如图 1-3 所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YXr1tvkt-1665920141269)(image/image-20221008205937083.png)]
在本例中,内存容量为 1GB,Cache 容量为 8MB,页面的大小为 512KB。直接映像中,先分区,再分页。一个区的大小就是 Cache 容量的大小,所以一共分:1GB/8MB=128 个区,区号 7 位。每个区分:8MB/512KB=16 个页,所以页号为 4 位。在直接映像方式中,每个主存页只能复制到某一固定的 Cache 页中,如图 1-4 所示。直接映像方式的映像规律是:主存中每个区的第 0 页,只能进入到 Cache 的第 0 页。即:若当前时刻 Cache 中 0 号页已被占据,而 1-15 号页空闲,现在要将 1 区第 0 页(即内存的 16 页)调入 Cache 是会发生冲突的。所以直接映像的块冲突率非常高。
所以只需要记录区号即可。所以此时标记位的长度是 7 位。
直接映像方式的优点是比较容易实现,缺点是不够灵活,有可能使 Cache 的存储空间得不到充分利用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7c2cd4Zx-1665920141269)(image/image-20221008210121284.png)]
全相联映像使用相联存储器组成的 Cache 存储器。在全相联映像方式中,主存的每一页可以映像到 Cache 的任一页。如果淘汰 Cache 中某一页的内容,则可调入任一主存页的内容,因而较直接映像方式灵活。
在全相联映像方式中,主存地址分为两个部分,分别为地址部分(主存页标记)和数据
部分(页内地址)。数据部分用于存放数据,而地址部分则存放该数据的存储器地址。如图 1-5
所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0czQXDpe-1665920141270)(image/image-20221008210245876.png)]
全相联映像方式的 Cache 组织如图 1-6 所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pswbdkl4-1665920141271)(image/image-20221008210304590.png)]
当进行映像时,在我们给定的例子中,当程序访存时,则高 11 位给出主存页号,低
19 位给出页内地址。因为每个 Cache 页可映像到 2048 个主存页中的任一页,所以每页的
Cache 标记也需要 11 位,以表明它现在所映像的主存页号。因此,Cache 标记信息位数增
加,比较逻辑成本随之增加。
在全相联映像方式中,主存地址不能直接提取 Cache 页号,而是需要将主存页标记与
Cache 各页的标记逐个比较,直到找到标记符合的页(访问 Cache 命中),或者全部比较完
后仍无符合的标记(访问 Cache 失败)。因此这种映像方式速度很慢,失掉了高速缓存的作
用,这是全相联映像方式的最大缺点。如果让主存页标记与各 Cache 标记同时比较,则成
本又太高。全相联映像方式因比较器电路难于设计和实现,只适用于小容量 Cache。
(3)组相联映像
组相联映像(页组映像)介于直接映像和全相联映像之间,是这两种映像的一种折衷方
案。全相联映像方式以页为单位,可自由映像,没有固定的对应关系。直接映像方式中,主
存分组,主存组内的各页与 Cache 的页之间采取的是固定的映像关系,但各组均可映像到
Cache 中。在组相联映像方式中,主存与 Cache 都分组,主存中一个组内的页数与 Cache 的分组数相同,如图 1-7 所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RZDCU28G-1665920141273)(image/image-20221008210354915.png)]
在图 1-7 给出的例子中,主存分 128 个区,每个区 8 个组,每个组 2 个页。组相联映像
方式的主存地址组织如图 1-8 所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-in8V6vcq-1665920141273)(image/image-20221008210414722.png)]
组相联映像的规则是:主存中的组与 Cache 的组形成直接映像关系,而每个组内的页
是全相联映像关系。如主存 1 区 0 页,他在 0 组中,所以只能进入 Cache 的 0 组中,至于
进入到 Cache 的 0 组 0 页,还是 0 组 1 页,并无强制要求,可任意放置。
在组相联映像中,Cache 中每一页的标记位长度为 8 位,因为此时除了要记录区号,还
得记录组号,即区号 7 位加组号 1 位等于 8 位。
容易看出,如果 Cache 中每组只有一页,则组相联映像方式就变成了直接映像方式。如果 Cache 中每组页数为 16 页(即 Cache 只分一组),则就是全相联映像。因此,在具体设计
组相联映像时,可以根据设计目标选取某一折衷值。
在组相联映像中,由于 Cache 中每组有若干可供选择的页,因而它在映像定位方面较直
接映像方式灵活;每组页数有限,因此付出的代价不是很大,可以根据设计目标选择组内页

3.替换算法
Cache 已存满数据后,新数据必须替换(淘汰)Cache 中的某些旧数据。最常用的替换算法
有以下三种:
(1)随机算法。
(2)先进先出(First In and First Out,FIFO)算法。
(3)近期最少使用(Least Recently Used,LRU)算法。
4.写操作
(1)写直达(write through)。
(2)写回(write back)。标记1,在cache淘汰时写入内存,0则直接淘汰
(3)标记法。对 Cache 中的每一个数据设置一个有效位。当数据进入 Cache 后,有
效位置“1”;而当 CPU 要对该数据进行修改时,数据只需写入内存并同时将该有效位置“0”。
当要从 Cache 中读取数据时需要测试其有效位,若为“l”则直接从 Cache 中取数,否则,
从内存中取数

1.3 流水线

流水线技术把一个任务分解为若干顺序执行的子任务,不同的子任务由不同的执行机构负责执行,而这些机构可以同时并行工作。在任一时刻,任一任务只占用其中一个执行机构,这样就可以实现多个任务的重叠执行,以提高工作效率。

1.3.1 流水线周期

流水线应用过程中,会将需要处理的工作分为 N 个阶段,最耗时的那一段所消耗的时间为流水线周期。如:使用流水线技术执行 100 条指令,每条指令取指 2ms,分析 4ms,执行 1ms,则流水线周期为 4ms。

1.3.2 计算流水线执行时间

流水线执行时间=第 1 条指令的执行时间+(n-1)*流水线周期
例:某计算机系统,一条指令的执行需要经历取指(2ms)、分析(4ms)、执行(1ms)
三个阶段,现要执行 100 条指令,利用流水线技术需要多长时间?
理论上来说,1 条指令的执行时间为:2ms+4ms+1ms=7ms。
所以:理论流水线执行时间=2ms+4ms+1ms+(100-1)*4=403ms。
而实际上,真正做流水线处理时,考虑到处理的复杂性,会将指令的每个执行阶段的时间都统一为流水线周期,即 1 条指令的执行时间为:4ms+4ms+4ms=12ms。 所以:实际流水线执行时间=4ms+4ms+4ms+(100-1)*4=408ms。
注:考试时 80%以上的概率采用理论公式计算,所以考试时需要以理论公式计算,若计算的结果无正确选项才考虑采用实际公式计算。

1.3.3 流水线的吞吐率(Though Put rate,TP)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MNvdJUDy-1665920141274)(image/image-20221008213640880.png)]

1.3.4 流水线的加速比

完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线
的加速比(speedup ratio)。如果不使用流水线,即顺序执行所用的时间为 T0 ,使用流水
线的执行时间为 Tk ,则计算流水线加速比的基本公式如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jiUFThnk-1665920141274)(image/image-20221008213743661.png)]

第 2 章 操作系统

掌握操作系统原理的关键在于深入理解“一个观点、两条线索”。一个观点是以资源管理的观点来定义操作系统;两条线索是指操作系统如何管理计算机各类资源和控制程序的执行。操作系统如何实现对这些资源的管理,其内涵、设计和实现是本章的主要内容

2.1 操作系统的类型与结构

计算机系统由硬件和软件两部分组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bkRjgGPs-1665920141275)(image/image-20221008214536825.png)]

2.1.2 操作系统分类

按照操作系统的功能划分,操作系统的基本类型有批处理操作系统、分时操作系统、实
时操作系统、网络操作系统、分布式操作系统、嵌入式操作系统、微内核操作系统等。

2.2 操作系统基本原理

操作系统的主要功能是进行处理机与进程管理、存储管理、设备管理、文件管理和作业管理的工作,本节讨论操作系统是如何完成这些功能的。

2.2.1 进程管理

(1)就绪状态。
(2)执行状态。
(3)阻塞状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-emtndAZb-1665920141276)(image/image-20221008214934415.png)]
必须有专门的同步机构来协调它们,协调准则如下:
(1)空闲让进。
(2)忙则等待。
(3)有限等待。
(4)让权等待。

5.前趋图

前趋图是一个由结点和有向边构成的有向无循环图。该图通常用于表现事务之间先后顺序的制约关系。图中的每个结点可以表示一个语句、一个程序段或是一个进程,结点间的有向边表示两个结点之间存在的前趋关系。
例:在计算机中,经常采用流水线方式执行指令,每一条指令都可以分解为取指、分析和执行三步。取指操作为 Ai,分析操作为 Bi 和执行操作为 Ci(i=1,2,3)。如图 2-4 所示为三个任务各程序段并发执行的前驱图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PNkprRf4-1665920141276)(image/image-20221008215154889.png)]
图中 A1 没有前趋结点,称为开始结点,它不受任何制约,可以直接执行;而 B1 与 A2 只能在 A1 执行完成之后才能开始,而 B2 必须在 B1 与 A2 完成之后才能开始;C3 没有后继结点,称为终止结点
在前趋图中,执行先后顺序的制约关系可分为两种:直接制约和间接制约。
直接制约通常是指一个操作中,多个步骤之间的制约关系,也可以说是“同步的进程之间的制约关系”。如图 2-4 所示,A1、B1、C1 是一条指令的取指、分析、执行的三个步骤,所以它们之间的关系是直接制约。
间接制约通常是指多个操作之间相同步骤的制约关系,也可以说是“互斥的进程之间的制约关系”。如图 2-4 所示,A1、A2、A3 之间就存在间接制约的关系。

6.进程调度与死锁

进程调度的算法是服务于系统目标的策略,对于不同的系统与系统目标,常采用不同的调度算法:
(1)先来先服务(First Come and First Serverd,FCFS)调度算法,又称先进先出(First In and First Out,FIFO)。就绪队列按先来后到原则排队。
(2)优先数调度。优先数反映了进程优先级,就绪队列按优先数排队。有两种确定优先级的方法,即静态优先级和动态优先级。静态优先级是指进程的优先级在进程开始执行前确定,执行过程中不变,而动态优先级则可以在进程执行过程中改变。
(3)轮转法(Round Robin)。就绪队列按 FCFS 方式排队。每个进程执行一次占有处理器时间都不超过规定的时间单位(时间片)若超过,则自行释放自己所占有的 CPU 而排到就绪队列的末尾,等待下一次调度。同时,进程调度程序又去调度当前就绪队列中的第一个进程。

死锁是系统的一种出错状态,它不仅会浪费大量的系统资源,甚至还会导致整个系统的崩溃,所以死锁是应该尽量预防和避免的。
(1)死锁条件
产生死锁的必要条件是:互斥条件、保持和等待条件、不剥夺条件和环路等待条件。
(2)解决死锁的策略。
解决死锁有两种策略:一种是在死锁发生前采用的预防和避免策略;另一种是在死锁发
生后采用的检测与恢复策略。
死锁的预防主要是通过打破死锁产生的 4 个必要条件之一来保证不会产生死锁
死锁避免策略,则是在系统进行资源分配时,先执行一个死锁避免算法(典型的如银行家算法),以保证本次分配不会导致死锁发生。由于资源分配很频繁,因此死锁避免策略要耗费大量的 CPU 和时间。
希赛教育专家提示:实际上,系统出现死锁的概率很小,故从系统所花的代价上看,采
用死锁发生后的检测与恢复策略要比采用死锁发生前的预防与避免策略代价小一些

2.2.2 存储管理

1.页式存储管理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6vWdPPLv-1665920141277)(image/image-20221008220321385.png)]
若欲访问的页面不在内存中,则产生一个“缺页中断”,由操作系统把当前所需的页面装入
内存储器中.
当内存中无空闲块时,为了装入一个页面而必须按某种算法从已在内存的页中选择一页,将它暂时调出内存,让出内存空间以存放所需装入的页面,这个工作称为“页面调度”。如何选择调出的页面是很重要的,如果采用了一个不合适的算法,就会出现这样的现象:刚被调出的页面又立即要用,因而又要把它装入,而装入不久又被选中调出,调出不久又被装入,如此反复,使调度非常频繁。这种现象称为“抖动”。一个好的调度算法应减少或避免抖动现象。常用的页面调度算法有:
(1)最优(OPT)算法。选择不再使用或最远的将来才被使用的页,这是理想的算法,但是难以实现,常用于淘汰算法的比较。
(2)随机(RAND)算法。随机地选择被淘汰的页,开销小,但是可能选中立即就要访问的页。
(3)先进先出算法。选择在内存驻留时间最长的页似乎合理,但可能淘汰掉频繁使用的页。另外,使用 FIFO 算法时,在未给予进程分配足够的页面数时,有时会出现给予进程的页面数增多,缺页次数反而增加的异常现象。FIFO 算法简单,易实现。可以把装入内存储器的那些页的页号按进入的先后顺序排成队列,每次总是调出队首的页,当装入一个新页
后,把新页的页号排到队尾。
(4)最近最少使用(Least Recently Used,LRU)算法。选择离当前时间最近的一段时间内使用得最少的页。这个算法的主要出发点是,如果某个页被访问了,则它可能马上就要被访问;反之,如果某个页长时间未被访问,则它在最近一段时间也不会被访问。
2.段式存储管理
段式存储管理与页式存储管理相似。分段的基本思想是把用户作业按逻辑意义上有完整意义的段来划分,并以段为单位作为内外存交换的空间尺度。
段式虚拟存储管理把作业中的各个分段信息都保留在磁盘上,当作业可以投入执行时,做如下操作:
(1)首先把当前需要的一段或几段装入内存。
(2)作业执行时,如果要访问的段已经在内存,则按照“段式存储管理”中的方式进行地址转换;如果要访问的段不在内存中,则产生一个“缺段中断”,由操作系统把当前需要的段装入内存。
处理的办法是,查内存分配表,找出一个足够大的连续区以容纳该分段,如果找不到足
够大的连续区则检查空闲区的总和,若空闲区总和能满足该段要求,那么进行适当移动将分
散的空闲区集中;若空闲区总和不能满足该段要求,可把内存中的一段或几段调出,然后把
当前要访问的段装入内存中。段被移动、调出和装入后都要对段表中的相应表目做修改。新
的段被装入后应让作业重新执行被中断的指令,这时就能找到要访问的段,也可以继续执行
下去。
3.段页式存储管理
段页式管理是段式和页式两种管理方法结合的产物,综合了段式组织与页式组织的特点,根据程序模块分段,段内再分页,内存被分划成定长的页。段页式系统中虚地址形式是(段号、页号、页内偏移),如图 2-6 所示。系统为每个进程建立一个段表,为每个段建立一个页表。段页式管理采用段式分配、页式使用的方法,便于动态连接和存储的动态分配。这种存储管理能提高内存空间的利用率。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56PylLz0-1665920141278)(image/image-20221008221736010.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y63XVyGv-1665920141279)(image/image-20221008221808299.png)]

2.2.3 设备管理

1.数据传输控制方式
设备管理的主要任务之一是控制设备和内存或 CPU 之间的数据传送,本节介绍几种常用的数据传送控制方式。
(1)程序控制方式。处理器启动数据传输,然后等设备完成。
(2)中断方式。程序控制方式不能实现并发。中断方式的数据传输过程是这样的,进程启动数据传输(如读)后,该进程放弃处理器,当数据传输完成,设备控制器产生中断请求,中断处理程序对数据传输工作处理之后,让相应进程成为就绪状态。以后,该进程就可以得到所需要的数据。
(3)直接存储访问(Direct Memory Access,DMA)方式。指外部设备和内存之间开辟直接的数据交换通路。除了控制状态寄存器和数据缓冲寄存器外,DMA 控制器中还包括传输字节计数器、内存地址寄存器等。DMA 方式采用窃取(或挪用)处理器的工作周期和控制总线而实现辅助存储器和内存之间的数据交换。有的 DMA 方式也采用总线浮起方式传输大批量数据。
(4)通道方式。通道又称为输入/输出处理器(Input/Output Processor,IOP),可以独立完成系统交付的输入/输出任务,通过执行自身的输入/输出专用程序(称通道程序)进行内存和外设之间的数据传输。主要有 3 种通道:字节多路通道、选择通道和成组多路通道。

2.虚设备与 SPOOLING 技术
采用假脱机技术,可以将低速的独占设备改造成一种可共享的设备,而且一台物理设备可以对应若干台虚拟的同类设备。假脱机(Simultaneous Peripheral Operation On Line,SPOOLING)的意思是外部设备同时联机操作,又称为假脱机输入/输出操作,采用一组程序或进程模拟一台输入/输出处理器。
SPOOLING 系统的组成如图 2-8 所示。该技术利用了专门的外围控制机将低速 I/O 设
备上的数据传送到高速设备上,或者相反。但是当引入多道程序后,完全可以利用其中的一
道程序来模拟脱机输入时的外围控制机的功能,把低速的 I/O 设备上的数据传送到高速磁
盘上;再利用另一道程序来模拟脱机输出时外围控制机的功能,把高速磁盘上的数据传送到
低速的 I/O 设备上。这样便可以在主机的控制下实现脱机输入、输出的功能。此时的外围
操作与 CPU 对数据的处理同时进行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7zjsDX9K-1665920141279)(image/image-20221008222428460.png)]

2.2.4 文件管理

操作系统对计算机的管理包括两个方面:硬件资源和软件资源。硬件资源的管理包括CPU 的管理、存储器的管理、设备管理等,主要解决硬件资源的有效和合理利用问题。软件资源包括各种系统程序、各种应用程序、各种用户程序,也包括大量的文档材料、库函数等。每一种软件资源本身都是具有一定逻辑意义的相关信息的集合,在操作系统中它们以文件形式存储。

文件管理的功能包括:建立、修改、删除文件;按文件名访问文件;决定文件信息的存放位置、存放形式及存取权限;管理文件间的联系及提供对文件的共享、保护和保密等。允许多个用户协同工作又不引起混乱。
文件的共享是指一个文件可以让多个用户共同使用,它可以减少用户的重复性劳动,节省文件的存储空间,减少输入/输出文件的次数等。文件的保护主要是为防止由于错误操作而对文件造成的破坏。文件的保密是为了防止未经授权的用户对文件进行访问。文件的保护、保密实际上是用户对文件的存取权限控制问题。一般为文件的存取设置两级控制:
第 1 级是访问者的识别,即规定哪些人可以访问;
第 2 级是存取权限的识别,即有权参与访问者可对文件执行何种操作。

1.文件的逻辑结构
文件的结构是指文件的组织形式,从用户角度所看到的文件组织形式,称为文件的逻辑结构。
文件的逻辑组织是为了方便用户使用。一般文件的逻辑结构可以分为两种:无结构的字符流文件和有结构的记录文件。记录文件由记录组成,即文件内的信息划分成多个记录,以记录为单位组织和使用信息。
记录文件有顺序文件、索引顺序文件、索引文件和直接文件。
(1)顺序文件。
(2)索引顺序文件。
(3)索引文件。
(4)直接文件。直接文件又称哈希(Hash)文件。

2.文件的物理结构
文件的物理结构是指文件在存储设备上的存放方法。
(1)顺序分配(连续分配)。
(2)链接分配(串联分配)。
(3)索引分配。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c1KU6PDu-1665920141280)(image/image-20221008223844293.png)]

3.文件存储设备管理
(1)索引法。索引法把空闲块作为文件并采用索引技术。为了有效,索引对应于一个 或
由几个空闲块构成的空闲区。这样,磁盘上每一个空闲块区都对应于索引表中一个条目,这
个方法能有效地支持每一种文件分配方法。
(2)链接法。链接法使用链表把空闲块组织在一起,当申请者需要空闲块时,分配程 序
从链首开始摘取所需的空闲块。反之,管理程序把回收的空闲块逐个挂入队尾,这个方 法
适用于每一种文件分配方法。空闲块的链接方法可以按释放的先后顺序链接,也可以按 空
闲块区的大小顺序链接。后者有利于获得连续的空闲块的请求,但在分配请求和回收空闲块
时系统开销多一点。
(3)位示图法。该方法是在外存上建立一张位示图(Bitmap),记录文件存储器的使 用
情况。每一位仅对应文件存储器上的一个物理块,取值 0 和 1 分别表示空闲和占用。文件
存储器上的物理块依次编号为:0、1、2、…。假如系统中字长为 32 位,有 4096 个物
理块,那么在位示图中的第 1 个字对应文件存储器上的 0、1、2、…、31 号物理块;第 2 个
字对应文件存储器上的 32、33、34、…、63 号物理块;第 128 字对应文件存储器上的 4064、
4065、…、4095 号物理块。这样位示图的大小为 32 字。
位示图是利用二进制的一位来表示磁盘中一个盘块的使用情况,如图 2-10 所示。当其
值为“0”时,表示对应的盘块空闲;为“1”时表示已分配。由所有盘块对应的位构成一个
集合,称为位示图。位示图也可描述为一个二维数组 map:Varmap:array[1.…m,1.…n]of
bit;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K4JAOclc-1665920141281)(image/image-20221008224403892.png)]

4.树型目录结构
在计算机的文件系统中,一般采用树型目录结构。在树型目录结构中,树的根结点为根目录,数据文件作为树叶,其他所有目录均作为树的结点

2.2.5 作业管理

用户的作业可以通过直接的方式,由用户自己按照作业步顺序操作;也可以通过间接的方式,由用户率先编写的作业步依次执行的说明,一次交给操作系统,由系统按照说明依次处理。前者称为联机方式,后者称为脱机方式。
1.作业状态及其转换
一个作业从交给计算机系统到执行结束退出系统,一般都要经历提交、后备、执行和完成 4 个状态。其状态转换如图 2-11 所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nfFNVfab-1665920141282)(image/image-20221008224629405.png)]

(1)提交状态。作业由输入设备进入外存储器(也称输入井)的过程称为提交状态。
处于提交状态的作业,其信息正在进入系统。
(2)后备状态。当作业的全部信息进入外存后,系统就为该作业建立一个作业控制块
(Job Control Block,JCB)。系统通过 JCB 感知作业的存在。JCB 主要内容包括作业名、作
业状态、资源要求、作业控制方式、作业类型及作业优先权等。
(3)执行状态。一个后备作业被作业调度程序选中而分配了必要的资源并进入了内存,
作业调度程序同时为其建立了相应的进程后,该作业就由后备状态变成了执行状态。
(4)完成状态。当作业正常运行结束,它所占用的资源尚未全部被系统回收时的状态
为完成状态。

2.用户接口
(1)操作系统的接口。
(2)操作环境。

第 3 章 数据库系统

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PBirTrlm-1665920141283)(image/image-20221010211841644.png)]

3.2.2 关系代数
  1. 并 U

  2. 交 ∩

  3. 笛卡尔积 RXS
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vPxAjY4q-1665920141284)(image/image-20221010212307170.png)]
    对 R 与 S 做笛卡尔积运算,其结果有 4+2=6 列,元组数量有 3*2=6 条。如表 3-3 所示。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ahffTxJB-1665920141285)(image/image-20221010212347145.png)]

  4. 投影 π
    π1,2®
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TfqOgxAk-1665920141285)(image/image-20221010212535260.png)]

6.选择
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ihialMoa-1665920141286)(image/image-20221010212907616.png)]

7.自然连接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0cmDXQ10-1665920141287)(image/image-20221010213234826.png)]

8.除
R÷S
(1)先确定XYZ ,R(X,Y) S(Z),其中YZ
则在R和S中Z={U3,U4} 因为Y
Z所以Y={U3,U4},则X={U1,U2}
(2)Y==Z,则Z对应的元素{c,d} {e,f}中在R中的Y有没有同时对应的,经观察存在{a,b}
所以R÷S={a,b}

3.2.4 数据的规范化

(0) 属性不可再分(1NF)
(1)非主属性完全函数依赖于码(2NF 的要求);
(2)非主属性不传递依赖于任何一个候选码(3NF 的要求);
(3)主属性对不含它的码完全函数依赖(BCNF 的要求);
(4)没有属性完全函数依赖于一组非主属性(BCNF 的要求)。

3.2.5 反规范化

数据库中的数据规范化减少了数据冗余,节约了存储空间,相应逻辑和物理的I/O 次数减少,加快了增、删、改的速度,但是对数据库查询,通常需要更多的连接操作,从而影响查询速度。因此,有时为了提高某些查询或应用的性能而破坏规范规则.
常见的反规范化技术包括:
(1)增加冗余列
(2)增加派生列
(3)重新组表
(4)分割表
水平分割:根据一行或多行数据的值把数据行放到两个独立的表中
垂直分割:把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。

3.3 数据库设计

数据库设计面临的困难:
1.同时具备数据库知识与应用业务的人才少
2.缺乏完善的设计工具和设计方法
3.系统初期数据库系统的目标不确定
4.需求的不确定
5.应用数据系统千差万别

3.3.1 数据库设计的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W11zuUGG-1665920141293)(image/image-20221010215337922.png)]

3.4 事务管理

事务具有一下特性(ACID)
(1)原子性(Atomicity):数据库的逻辑工作单位。
(2)一致性(Consistency):使数据库从一个一致性状态变到另一个一致性状态。
(3)隔离性(Isolation):不能被其他事务干扰。
(4)持续性(永久性)(Durability):一旦提交,改变就是永久性的

3.4.1 并发控制

(1)排他型封锁(简称 X 封锁)。数据A被事务T用X封锁以后其他任何事务都不能读写读写A,直到T解除X封锁
(2))共享型封锁(简称 S 封锁)。多个事务可以并发读数据,直到S封锁全部解除的时候才可以进行X封锁

在多个事务并发执行的系统中,主要采取封锁协议来进行处理。
(1)一级封锁协议。事务 T 在修改数据 R 之前必须先对其加 X 锁,直到事务结束才释放。一级封锁协议可防止丢失修改,但是读数据时候没有进行加x锁, 所以不能保证可重复读和不读“脏”数据。
(2)二级封锁协议。一级封锁协议加上事务 T 在读取数据 R 之前先对其加 S 锁,读完后即可释放 S 锁。二级封锁协议可防止丢失修改,还可防止读“脏”数据,但不能保证
可重复读。
(3)三级封锁协议。一级封锁协议加上事务 T 在读取数据 R 之前先对其加 S 锁,直到事务结束才释放。三级封锁协议可防止丢失修改、防止读“脏”数据与防止数据重复读。
(4)两段锁协议。所有事务必须分两个阶段对数据项加锁和解锁。其中扩展阶段是在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;收缩阶段是在释放一个封锁之后,事务不能再申请和获得任何其他封锁。遵守两段封锁协议的事务可能发生死锁。

3.4.2 故障与恢复

(1)事务故障
(2)系统故障
(3)介质故障
(4)计算机病毒

3.6 分布式数据库系统

布式数据库系统有以下几个特点:
(1)数据的分布性。数据分布于网络中的各个结点
(2)统一性。主要表现在数据在逻辑上的统一性和数据在管理上的统一性两个方面。
(3)透明性。用户在使用分布式数据库时,与使用集中式数据库一样,无须知道其所关心的数据存放在哪里,存储了几次。用户需要关心的仅仅是整个数据库的逻辑结构

分布式数据库具有下列优点:
(1)坚固性好。
在个别结点或个别通信链路发生故障的情况下,它仍然可以降低级别继续工作
(2)可扩充性好。
可根据发展的需要增减结点,或对系统重新配置
(3)可改善性能。
在分布式数据库中可按就近分布,合理地冗余的原则来分布各结点上的数据
(4)自治性好。
数据可以分散管理,统一协调.

3.6.2 分布式数据库的架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nSav1tL2-1665920141294)(image/image-20221010221325496.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BNbj8k95-1665920141295)(image/image-20221010221621047.png)]

3.7 数据仓库

数据仓库的定义:数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、且随时间变化的数据集合,用于支持管理决策

3.8 数据挖掘

3.8.3 数据挖掘常用技术

常用的数据挖掘技术包括关联分析、序列分析、分类、预测、聚类分析及时间序列分析等

3.9 NoSQL (not only sql)

NoSQL 数据库具有以下几个优点:
1.易扩展
没有了关系数据库的关系型特性,易于扩展
2.大数据量,高性能
它的无关系性,数据库的结构简单.
3.灵活的数据模型
NoSQL 无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
4.高可用
NoSQL 在不太影响性能的情况,就可以方便地实现高可用的架构。

缺点:
NoSQL 也存在很多缺点,例如,并未形成一定标准,各种产品层出不穷,内部
混乱,各种项目还需时间来检验,缺乏相关专家技术的支持等。

3.10 大数据

  1. 大数据的特点
    业界通常用 4 个 V(即 Volume、Variety、Value、Velocity)来概括大数据的特征
    Volume:指的是数据体量巨大
    Variety:指的是数据类型繁多。
    Value:指的是价值密度低
    Velocity:指的是处理速度快

2.传统数据与大数据的比较
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XFWcpdnS-1665920141295)(image/image-20221010222956158.png)]

第 4 章 计算机网络

4.1.2 常见的网络协议

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zg3Lxy9I-1665920141297)(image\image-20221006025040064.png)]
(1)应用层协议

  1. FTP(File TransportProtocol,文件传输协议):FTP 在客户机和服务器之间需建立两条 TCP 连接,一条用于传送控制信息(使用 21 号端口),另一条用于传送文件内容(使用 20 号端口)。
  2. TFTP(Trivial FileTransfer Protocol,简单文件传输协议)是TFTP 建立在 UDP(User Datagram Protocol,用户数据报协议)之上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达。
  3. HTTP(Hypertext TransferProtocol,超文本传输协议)是用于从 WWW 服务器传输超文本到本地浏览器的传送协议。
  4. SMTP(Simple Mail TransferProtocol,简单邮件传输协议)建立在 TCP 之上,是一种提供可靠且有效的电子邮件传输的协议。
  5. DHCP(Dynamic HostConfiguration Protocol,动态主机配置协议)建立在 UDP 之上,是基于客户机/服务器模型设计的。
  6. Telnet(远程登录协议)是登录和仿真程序,建立在 TCP 之上,它的基本功能是允许用户登录进入远程计算机系统。
  7. DNS(Domain NameSystem,域名系统)在 Internet 上域名与 IP 地址之间是一一对应
  8. SNMP(Simple NetworkManagement Protocol,简单网络管理协议)是为了解决Internet 上的路由器管理问题而提出的,它可以在 IP、IPX、AppleTalk 和其他传输协议上使用。

(2)传输层协议
TCP 是整个 TCP/IP 协议族中最重要的协议之一,它在 IP 协议提供的不可靠数据服务的基础上,采用了重发技术,为应用程序提供了一个可靠的、面向连接的、全双工的数据传输服务。TCP 协议一般用于传输数据量比较少,且对可靠性要求高的场合。

UDP 是一种不可靠的、无连接的协议,可以保证应用程序进程间的通信,与 TCP 相比,UDP 是一种无连接的协议,它的错误检测功能要弱得多。可以这样说,TCP 有助于提供可靠性,而 UDP 则有助于提高传输速率。UDP 协议一般用于传输数据量大,对可靠性要求不是很高,但要求速度快的场合

(3)网络层协议
网络层中的协议主要有 IP、ICMP(Internet Control Message Protocol,网际控制报文协议)、IGMP(Internet Group Management Protocol,网际组管理协议)、ARP(Address Resolution

IP 所提供的服务通常被认为是无连接的和不可靠的,它将差错检测和流量控制之类的服务授权给了其他的各层协议,这正是 TCP/IP 能够高效率工作的一个重要保证

ARP 用于动态地完成 IP 地址向物理地址的转换。物理地址通常是指计算机的网卡地址,也称为 MAC(Media Access Control,媒体访问控制)地址,每块网卡都有唯一的地址;RARP 用于动态完成物理地址向 IP 地址的转换

ICMP 是一个专门用于发送差错报文的协议,由于 IP 协议是一种尽力传送的通信协议,即传送的数据可能丢失、重复、延迟或乱序传递,所以需要一种尽量避免差错并能在发生差错时报告的机制,这就是 ICMP 的功能。

IGMP 允许 Internet 中的计算机参加多播,是计算机用作向相邻多目路由器报告多目组成员的协议。多目路由器是支持组播的路由器,它向本地网络发送 IGMP 查询,计算机通过发送 IGMP 报告来应答查询。多目路由器负责将组播包转发到网络中所有组播成员。

4.1.3 IPv6

一个 32 位的 IPv4 地址以 8 个位为一段分成 4 段,每段之间用点“.”分开。而 IPv6地址的 128 位是以 16 位为一段,共分为 8 段,每段的 16 位转换为一个 4 位的 16 进制数字,每段之间用冒号“:”分开。

1.2001:da8:d001:1:0:0:0:1
对于连续 2 段以上都为 0 的字段,可以使用“::”(两个冒号)来表示,这样再次压缩,变成:2001:da8:d001:1:0:0:0:1 (注意:每个 IPv6 地址只允许有一个“::”)。

2…内嵌 IPv4 地址的 IPv6 地址 如:fe80::200:5efe:58.20.27.60 这个 IPv6 地址的后半部分就是一个 IPv4 地址。
3.IPv6 地址类型 IPv4 有单播、广播和组播地址类型

4.2 局域网与广域网

构成局域网的网络拓扑结构主要有星形结构、总线结构、环形结构和网状结构。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m5MsBSC0-1665920141299)(image/image-20221011225205786.png)]

交换技术:电路交换,报文交换,分组交换
路由技术:内部网关协议( Interior Gateway Protocol,IGP)、外部网关协议(Exterior Gateway Protocol,EGP)和核心网关协议(Gateway Gateway Protocol,GGP)三大类。

4.4.2 网络设计

1.网络逻辑结构设计
2.网络物理结构设计
3.分层设计

4.5 网络存储技术

目前,主流的网络存储技术主要有三种,分别是直接附加存储(Direct Attached Storage,DAS)、网络附加存储(Network Attached Storage,NAS)和存储区域网络(Storage Area Network,SAN)。
1.直接附加存储
DAS 是将存储设备通过 SCSI(Small Computer System Interface,小型计算机系统接口)电缆直接连到服务器,其本身是硬件的堆叠,存储操作依赖于服务器,不带有任何存储操作系统。因此,有些文献也把 DAS 称为 SAS(Server Attached Storage,服务器附加存储)。
DAS 的适用环境为:
(1)服务器在地理分布上很分散,通过 SAN 或 NAS 在它们之间进行互连非常困难时;
(2)存储系统必须被直接连接到应用服务器(例如,Microsoft Cluster Server 或某些数据库使用的“原始分区”)上时

2.网络附加存储
采用 NAS 技术的存储设备不再通过 I/O 总线附属于某个特定的服务器,而是通过网络接口与网络直接相连,由用户通过网络访问。NAS 存储系统的结构如图 4-5 所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QNpuyAJQ-1665920141300)(image/image-20221011225900851.png)]
NAS 技术支持多种 TCP/IP 网络协议,主要是 NFS(Net File System,网络文件系统)和CIFS(Common Internet File System,通用 Internet 文件系统)来进行文件访问,所以 NAS 的性能特点是进行小文件级的共享存取。

3.存储区域网络
SAN 是通过专用交换机将磁盘阵列与服务器连接起来的高速专用子网。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Lja3VOw-1665920141301)(image/image-20221011230023398.png)]

4.6 综合布线

综合布线系统可分为 7 个部分:工作区、配线子系统、干线子系统、建筑群子系统、设备间、进线间、管理。
(1)工作区:一个独立的需要设置终端设备的区域宜划分为一个工作区。工作区应由
配线子系统的信息插座模块延伸到终端设备处的连接缆线及适配器组成。
(2)配线子系统:配线子系统应由工作区的信息插座模块、信息插座模块至电信间配
线设备的配线电缆和光缆、电信间的配线设备及设备缆线和跳线等组成。
(3)干线子系统:干线子系统应由设备间至电信间的干线电缆和光缆,安装在设备间
的建筑物配线设备及设备缆线和跳线组成。
(4)建筑群子系统:建筑群子系统应由连接多个建筑物之间的主干电缆和光缆、建筑
群配线设备及设备缆线和跳线组成。
(5)设备间:设备间是在每幢建筑物的适当地点进行网络管理和信息交换的场地。对
于综合布线系统工程设计,设备间主要是用来安装建筑物配线设备。电话交换机、计算机主
机设备及入口设施也可与配线设备安装在一起。
(6)进线间:进线间是建筑物外部通信和信息管线的入口部位,并可作为入口设施和
建筑群配线设备的安装场地。
(7)管理:管理应对工作区、电信间、设备间、进线间的配线设备、缆线、信息插座
模块等设施,按一定的模式进行标识和记录

第 5 章 系统性能评价

5.3.2 负载均衡

1.负载均衡技术的类型
(1)基于特定服务器软件的负载均衡。
很多网络协议都支持“重定向”功能,例如,在 HTTP 协议中支持 Location 指令,接收到这个指令的浏览器将自动重定向到 Location 指明的另一个 URL 上。当 Web 服务器认为自己负载较大的时候,它就不再直接发送回浏览器请求的网页,而是送回一个 Location 指令,让浏览器在服务器集群中的其他服务器上获得所需要的网页。

缺点:一台服务器如何能保证它重定向过的服务器是比较空闲的,并且不会再次发送 Location 指
令?

(2)基于 DNS(Domain Name Server,域名服务器)的负载均衡。在 DNS 服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,它们也就访问不同地址上的 Web 服务器,从而达到负载均衡的目的.
缺点是 DNS 负载均衡无法得知服务器之间的差异,它不能做到为性能较好的服务器多分配请求,也不能了解到服务器的当前状态,甚至会出现客户请求集中在某一台服务器上的偶然情况

(3)反向代理负载均衡。让代理服务器将请求均匀地转发给多台内部 Web 服务器,从而达到负载均衡的目的。

(4)基于 NAT(Network Address Translation,网络地址转换)的负载均衡技术。址转换网关能将每个连接均匀转换为不同的内部服务器地址,此后,外部网络中的计算机就各自与自己转换得到的地址上的服务器进行通信,从而达到负载分担的目的。

(5)扩展的负载均衡技术。当然这可以通过综合使用 DNS 和 NAT 两种方法来实现,然而更好的方式是使用一种半中心的负载均衡方式
,在这种半中心的负载均衡方式下,即当客户请求发送给负载均衡器的时候,中心负载均衡器将请求打包并发送给某个服务器,而服务器的回应请求不再返回给中心负载均衡器,而是直接返回给客户,因此中心负载均衡器只负责接受并转发请求,其网络负担就较小了。

全域负载均衡有以下特点:
(1)解决网络拥塞问题,服务就近提供,实现地理位置无关性;
(2)对用户提供更好的访问质量;
(3)提高服务器响应速度;
(4)提高服务器及其他资源的利用效率;
(5)避免了数据中心单点失效

5.4 性能评估

把应用程序中用得最多、最频繁的那部分核心程序作为评价计算机性能的标准程序。称为基准测试程序(benchmark)

第 6 章 开发方法

件生命周期划分为 8 个阶段:可行性研究与计划、需求分析、概要设计、详细设计、实现、集成测试、确认测试、使用和维护

6.2 软件开发模型

6.2.1 瀑布模型

瀑布模型就如同瀑布一样,从一个特定的阶段流向下一个阶段

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fqbPp6LK-1665920141301)(image/image-20221011231501617.png)]
可以看出瀑布模型的一个重要特点:软件开发的阶段划分是明确的,一个阶段到下一个阶段有明显的界线。在每个阶段结束后,都会有固定的文档或源程序流入下一阶段。在需求分析阶段结束后,需要有明确的描述软件需求的文档;总体设计结束后,需要有描述软件总体结构的文档;详细设计结束后,需要有可以用来编码的详细设计文档;而编码结束后,代码本身被作为文档流到下一个阶段。因此也称瀑布模型是面向文档的软件开发模型。
当软件需求明确、稳定时,可以采用瀑布模型按部就班地开发软件,当软件需求不明确或变动剧烈时,瀑布模型中往往要到测试阶段才会暴露出需求的缺陷,造成后期修改代价太大,难以控制开发的风险

2.瀑布 V 模型
人们发现,缺陷是无法避免的,任何一个阶段都会在软件中引入缺陷,而最后的测试也不能保证软件完全没有缺陷,只能争取在交付前发现更多的缺陷。测试成为软件开发中非常重要的环节,测试的质量直接影响到软件的质量。因此,人们对瀑布模型进行了小小的更改,提出了更强调测试的瀑布 V 模型,如图 6-2 所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJ7F1KeE-1665920141303)(image/image-20221011231727398.png)]

3.瀑布模型的缺点
(1)需求分析的结果不完全正确,存在偏差,那么后续的活动只能放大这个偏差,在错误的道路上越走越远。
(2)瀑布模型难以适应变化。
(3)使用瀑布模型意味着当所有阶段都结束才能最终交付软件产品,所以在提出需求后需要相当长一段时间的等待才能够看到最终结果,才能发现软件产品究竟能不能够满足客户的需求
(4)最后,文档驱动型的瀑布模型除了制造出软件产品外还将产生一大堆的文档,大部分的文档对客户没有任何意义,但完成这些对客户没有意义的文档却需要花费大量的人力。所以瀑布模型也是一种重载过程

6.2.2 演化模型

演化模型可以演变为螺旋模型、增量模型和原型法开发。

6.2.3 螺旋模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oSN9CJdT-1665920141303)(image/image-20221011232134037.png)]
螺旋模型的基本做法是在“瀑布模型”的每一个开发阶段前,引入一个非常严格的风险识别、风险分析和风险控制。它把软件项目分解成一个个小项目,每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定
缺点:
(1)采用螺旋模型,需要具有相当丰富的风险评估经验和专业知识。在风险较大的项目开发中,如果未能及时标识风险,势必会造成重大损失。
(2)过多的迭代次数会增加开发成本,延迟提交时间

6.2.4 增量模型

在系统的技术架构成熟、风险较低的时候,可以采用增量的方式进行系统开发,这样可以提前进行集成测试和系统测试,缩短初始版本的发布周期,提高用户对系统的可见度。

6.2.5 构件组装模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmhmQbtf-1665920141304)(image/image-20221011232345084.png)]
构件组装模型的优点如下:
(1)构件的自包容性让系统的扩展变得更加容易
(2)设计良好的构件更容易被重用,降低软件开发成本
(3)构件的粒度较整个系统更小,因此安排开发任务更加灵活,可以将开发团队分成若干组,并行地独立开发构件。

鱼与熊掌不可兼得,构件组装模型也有明显的缺点:
(1)对构件的设计需要经验丰富的架构设计师,设计不良的构件难以实现构件的优点,降低构件组装模型的重用度。
(2)在考虑软件的重用度时,往往会对其他方面做出让步,如性能等。
(3)使用构件组装应用程序时,要求程序员熟练地掌握构件,增加了研发人员的学习成本。
(4)第三方构件库的质量会最终影响到软件的质量,而第三方构件库的质量往往是开发团队难以控制的。

6.3 统一过程

统一过程(Unified Process,UP)软件开发活动总要经过初始、细化、构建和交付这 4 个阶段方能完成。
在 UP 的生命周期中共有 4 个里程碑:
(1)目标里程碑。
(2)架构里程碑
(3)能力里程碑。
(4)发布里程碑。

6.4 敏捷方法

6.4.1 极限编程XP

XP 四大价值观:沟通、简单、反馈、勇气

6.4.2 特征驱动开发FDD

FDD 认为,有效的软件开发不可缺少的三个要素是:人、过程和技术
特点:
1.类的个体所有:分配给 A 成员的代码将全部由 A 来维护,除 A 外的角色都不能修改它,只能使用它。
2.审查

6.4.3 Scrum

1.Scrum 的五个活动:product backlog、Sprint 计划会议、每日 Scrum 会议、Sprint
评审会议、Sprint 回顾会议等五个活动
(1)产品待办事项列表梳理
是一个始终贯穿整个 Scrum 项目的活动

(2)Sprint 计划会议
1):决定在 Sprint 中需要完成哪些工作
2):决定这些工作如何完成

(3)每日 Scrum 会议
开发团队是自组织的。每一个开发团队成员需要提供以下三点信息:
从上一个每日 Scrum 到现在,我完成了什么;
从现在到下一个每日 Scrum,我计划完成什么;
有什么阻碍了我的进展

(4)Sprint 评审会议
Sprint 结束时,Scrum 团队和相关人员一起评审 Sprint 的产出

(5)Sprint 回顾会议
目的是回顾一下团队在流程人际关系以及工具方面做得如何。团队识别出哪些做得好,哪些做得不好,并找出潜在的改进事项,为将来的改进制定计划。

Scrum 的 5 大价值观
承诺—愿意对目标做出承诺。
专注—把你的心思和能力都用到你承诺的工作上去。
开放—Scrum 把项目中的一切开放给每个人看。
尊重—每个人都有他独特的背景和经验。
勇气—有勇气做出承诺,履行承诺,接受别人的尊重

6.4.4 水晶方法

透明水晶方法,适合于一个小团队来进行敏捷开发,人数在 6 人以下为宜。
透明水晶方法有七大体系特征:
(1)经常交付
(2)反思改进
(3)渗透式交流
(4)个人安全
(5)焦点
(6)与专家用户建立方便的联系
(7)配有自动测试、配置管理和经常集成功能的技术环境

6.5 软件重用

构件又称为组件,是一个自包容、可复用的程序集.

6.6 基于架构的软件设计

基于架构的软件设计(Architecture-Based Software Design,ABSD)是一种架构驱动方法。这种方法有 3 个基础:
(1)功能的分解。在功能分解中,ABSD 方法使用已有的基于模块的内聚和耦合技术。
(2)通过选择架构风格来实现质量和业务需求。
(3)软件模板的使用。软件模板利用了一些软件系统的结构
ABSD 方法是递归的,且迭代的每一个步骤都是清晰定义的。因此,不管设计是否完成,架构总是清晰的,这有助于降低架构设计的随意性。

6.6.2 基于架构的软件开发模型

把整个基于架构的软件过程划分为架构需求、设计、文档化、复审、实现、演化等 6 个子过程,如图 6-9 所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bjWxyTfO-1665920141305)(image/image-20221011234505495.png)]

1.架构需求
(1)需求获取
架构需求一般来自三个方面,分别是系统的质量目标、系统的业务目标和系统开发人员的业务目标。与此同时,还要获得软件质量属性,满足一些非功能需求。
(2)标识构件
在图 6-10 中虚框部分属于标识构件过程,该过程为系统生成初始逻辑结构,包含大致
的构件。这一过程又可分为三步来实现。
第一步:生成类图。生
第二步:对类进行分组。
第三步:把类打包成构件。

2.架构设计

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dgVrT7B2-1665920141306)(image/image-20221011234711427.png)]

3.架构文档化
架构文档化过程的主要输出结果是架构需求规格说明和测试架构需求的质量设计说明书这两个文档。

文档要从使用者的角度进行编写,必须分发给所有与系统有关的开发人员,且必须保证开发者手上的文档是最新的

4.架构复审
在一个主版本的软件架构分析之后,要安排一次由外部人员(用户代表和领域专家)参加的复审

复审的目的是标识潜在的风险,以及早发现架构设计中的缺陷和错误,

5.架构实现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RZ7fYAHu-1665920141307)(image/image-20221011235011427.png)]

6.架构演化

6.7 形式化方法

形式化方法是指采用严格的数学方法,使用形式化规约语言来精确定义软件系统。非形式化的开发方法是通过自然语言、图形或表格描述软件系统的行为和特性,然后基于这些描述进行设计和开发,而形式化开发则是基于数学的方式描述、开发和验证系统。

第 7 章 系统规划

7.4.1 遗留系统的评价方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5x9i4Icg-1665920141308)(image/image-20221011235805305.png)]
完全淘汰是一种极端性策略,一般是企业的业务产生了根本的变化,遗留系统基本上不
再适应企业运作的需要;或者是遗留系统的维护人员、维护文档资料都丢失了。经过评价,
发现将遗留系统完全淘汰,开发全新的系统比改造旧系统从成本上更合算

第 8 章 系统分析与设计方法(UML相同)

第 9 章:软件架构设计

9.1.1 软件架构的定义

软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式及这些模式的约束组成

9.1.2 软件架构的重要性

(1)项目关系人之间交流的平台。
(2)早期设计决策。
(3)在较高层面上实现软件复用。
(4)架构对开发的指导与规范意义不容忽略。

Kruchten 在 1995 年提出了一个“4+1”的视图模型。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mxohZGBT-1665920141309)(image/image-20221012000833095.png)]
场景:场景是最重要的需求抽象,它使四个视图有机的联系起来

9.2 架构需求与软件质量属性

性能:性能是指软件系统及时提供相应服务的能力。
安全性:指软件系统向合法用户提供服务,以及阻止非授权使用的能力。
易用性:指软件系统易于被使用的程度。
可伸缩互操作性:指本软件系统与其他系统交换数据和相互调用服务的难易程度。
互操作性:指当用户数和数据量增加时,软件系统维持高服务质量的能力。
可靠性:软件系统在一定的时间内无故障运行的能力
持续可用性:指系统长时间无故障运行的能力。
鲁棒性:是指软件系统在一些非正常情况下仍能够正常运行的能力。也称健壮性或容错性。
易理解性:指设计被开发人员理解的难易程度。
可扩展性:软件因适应新需求或需求变化而增加新功能的能力。
可重用性:指重用软件系统或某一部分的难易程度。
可测试性:对软件测试以证明其满足需求规范的难易程度。
可维护性:当需要修改缺陷、增加功能、提高质量属性时,定位修改点并实施修改的难易程度;
可移植性:将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度。

9.2.2 6 个质量属性及实现

可用性、可修改性、性能、安全性、可测试性、易用性。

1.可用性
有 Ping/Echo、心跳、异常和主动冗余等。

2.可修改性
有软件模块泛化、限制模块之间通信、使用中介和延迟绑定等

3.性能
有增加计算资源、改善资源需求(减少计算复杂度等)、资源管理(并发、数据复制等)和资源调度(先进先出队列、优先级队列等)。

4.安全性
① 抵抗攻击
② 检测攻击。
③ 从攻击中恢复

5.可测试性
① 输入/输出
② 内部监控。

6.易用性
① 运行时战术
② 设计时战术。
③ 支持用户主动操作

9.3 软件架构风格

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式( idiomatic paradigm)。架构风格定义了一个系统家族,即一个架构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。按这种方式理解,软件架构风格定义了用于描述系统的术语表和一组指导构建系统的规则。

(1)数据流风格:批处理序列;管道/过滤器。
(2)调用/返回风格:主程序/子程序;面向对象风格;层次结构。
(3)独立构件风格:进程通信;事件系统。
(4)虚拟机风格:解释器;基于规则的系统。
(5)仓库风格:数据库系统;超文本系统;黑板系统

9.3.2 数据流风格
  1. 批处理序列
    批处理风格的每一步处理都是独立的,并且每一步是顺序执行的。只有当前一步处理完,后一步处理才能开始。数据传送在步与步之间作为一个整体。

例子:
(1)经典数据处理;
(2)程序开发;
(3)Windows 下的 BAT 程序就是这种应用的典型实例

  1. 管道和过滤器
    在管道/过滤器风格的软件架构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KXYKEjz6-1665920141309)(image/image-20221015061703603.png)]

例子:
一个典型的管道/过滤器架构的例子是以 UNIX shell 编写的程序。。另一个著名的例子是传统的编译器。传统的编译器一直被认为是一种管道系统,在该系统中,一个阶段(包括词法分析、语法分析、语义分析和代码生成)的输出是另一个阶段的输入.

批处理序列风格与管道过滤器风格对比
共同点:把任务分成一系列固定顺序的计算单元(组件)。组件间只通过数据传递交互。
区别:批处理是无合作性、无交互性。而管道过滤器是递增的,数据结果延迟小,输入时处理部化,有反馈、可交互。批处理强调数据传送在步与步之间作为一个整体,而管理过滤器无此要求

9.3.3 调用/返回风格

主程序/子程序;面向对象风格;层次结构

  1. 主程序/子程序
    这种风格一般采用单线程控制,把问题划分为若干处理步骤,构件即为主程序和子程序。子程序通常可合成为模块。过程调用作为交互机制,即充当连接件。
  2. 面向对象风格
    这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者说是抽象数据类型的实例。对象是一种被称作管理者的构件,因为它负责保持资源的完整性。对象是通过函数和过程的调用来交互的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f7r4oxZn-1665920141310)(image/image-20221015062911368.png)]
这种风格的两个重要特征为:
(1)对象负责维护其表示的完整性;
(2)对象的表示对其他对象而言是隐蔽的。

面向对象的系统有许多优点,并早已为人所知:
(1)因为对象对其他对象隐藏它的表示,所以可以改变一个对象的表示,而不影响其他的对象;
(2)设计者可将一些数据存取操作的问题分解成一些交互的代理程序的集合。

但是,面向对象的系统也存在着某些问题:
(1)为了使一个对象和另一个对象通过过程调用等进行交互,必须知道对象的标识。只要一个对象的标识改变了,就必须修改所有其他明确调用它的对象
(2)必须修改所有显式调用它的其他对象,并消除由此带来的一些副作用。

  1. 层次结构风格
    每一层为上层服务,并作为下层客户。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jzXUWO73-1665920141311)(image/image-20221015063229052.png)]
    层次系统有许多可取的属性:
    (1)支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解;
    (2)支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层;
    (3)支持重用。只要提供的服务接口定义不变,同一层的不同实现可以交换使用。这样,就可以定义一组标准的接口,而允许各种不同的实现方法。
    但是,层次系统也有其不足之处:
    (1)并不是每个系统都可以很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起
    来;
    (2)很难找到一个合适的、正确的层次抽象方法。
9.3.4 独立构件风格
  1. 进程通信架构风格进程通信架构风格:构件是独立的过程,连接件是消息传递。这种风格的特点是构件通常是命名过程,消息传递的方式可以是点到点、异步和同步方式及远过程调用等

  2. 基于事件的隐式调用风格的思想是构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。

例子:在编程环境中用于集成各种工具,在数据库管理系统中确保数据的一致性约束,在用户界面系统中管理数据,以及在编辑器中支持语法检查。例如在某系统中,编辑器和变量监视器可以登记相应 Debugger 的断点事件。当 Debugger 在断点处停下时,它声明该事件,由系统自动调用处理程序,如编辑程序可以卷屏到断点,变量监视器刷新变量数值。而 Debugger 本身只声明事件,并不关心哪些过程会启动,也不关心这些过程做什么处理

隐式调用系统的主要优点有:
(1)为软件重用提供了强大的支持。当需要将一个构件加入现存系统中时,只需将它注册到系统的事件中。
(2)为改进系统带来了方便。当用一个构件代替另一个构件时,不会影响到其他构件的接口

隐式调用系统的主要缺点有:
(1)构件放弃了对系统计算的控制。
(2)数据交换的问题。有时数据可被一个事件传递,但另一些情况下,基于事件的系统必须依靠一个共享的仓库进行交互。在这些情况下,全局性能和资源管理便成了问题。
(3)既然过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理存在问题。

9.3.5 虚拟机风格

1.解释器
具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用。解释器通常被用来建立一种虚拟机以弥合程序语义与硬件语义之间的差异。其缺点是执行效率较低。典型的例子是专家系统。

  1. 规则为中心
    基于规则的系统包括规则集、规则解释器、规则/数据选择器及工作内存
9.3.6 仓库风格

中央数据结构说明当前状态,独立构件在中央数据存储上执行

仓库风格包括的子风格有:数据库系统、超文本系统、黑板风格。

数据库架构是数据库风格最常见的形式。构件主要有两大类,一个是中央共享数据源,保存当前系统的数据状态;另一个是多个独立处理元素,处理元素对数据元素进行操作。而超文本系统的典型代表,就是早期的静态网页。三种架构子风格中,最复杂的是黑板系统,黑板系统的
传统应用是信号处理领域,如语音和模式识别。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q3dSLg3N-1665920141312)(image/image-20221015064253544.png)]

9.4 层次系统架构风格

9.4.1 二层及三层 C/S 架构风格

优点:C/S 软件架构具有强大的数据操作和事务处理能力,模型思想简单,易于人们理解和接受。
缺点:二层 C/S 结构为单一服务器且以局域网为中心,软件和硬件的组合及集成的能力有限

三层cs:能分成表示层、功能层和数据层三个部分,对这三层进行明确分割,并在逻辑上使其独立.
一般情况是只将表示层配置在客户机中,,如果将功能层也放在客户机中,客户机的负荷太重,其业务处理所需的数据要从服务器传给客户机,所以系统的性能容易变差。如果将功能层和数据层分别放在不同的服务器中,则服务器和服务器之间也要进行数据传送。但是,由于在这种形态中三层是分别放在各自不同的硬件系统上的,所以灵活性很高,能够适应客户机数目的增加和处理负荷的变动。

9.4.2 B/S 架构风格

浏览器/服务器(Browser/Server,简称 B/S)风格就是上述三层应用结构的一种实现方式,其具体结构为:浏览器/Web 服务器/数据库服务器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LNhp9TIg-1665920141312)(image/image-20221015065111073.png)]
与 C/S 架构相比,B/S 架构也有许多不足之处,例如:
(1)B/S 架构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。
(2)采用 B/S 架构的应用系统,在数据查询等响应速度上,要远远地低于 C/S 架构。
(3)B/S 架构的数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OnLine Transaction Processing,简称 OLTP)应用。

9.4.3 MVC 架构风格

MVC 中各个部分的分工与协作是这样的:
(1)Model 是对应用状态和业务功能的封装,我们可以将它理解为同时包含数据和行为的领域模型。Model 接受 Controller 的请求并完成相应的业务处理,在状态改变的时候向 View 发出相应的通知。
(2)View 实现可视化界面的呈现并捕捉最终用户的交互操作(例如鼠标和键盘的操作)。
(3)View 捕获到用户交互操作后会直接转发给 Controller,后者完成相应的 UI 逻辑。如果需要涉及业务功能的调用,Controller 会直接调用 Model。在完成 UI 处理后,Controller 会根据需要控制原 View 或者创建新的 View 对用户交互操作予以响应

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FgnHHQPQ-1665920141313)(image/image-20221015065824585.png)]

9.4.4 MVP 架构风格

Model-View-Presenter
MVC 模式中元素之间“混乱”的交互主要体现在允许 View 和 Model 直接进行“交流”,这在 MVP 模式中是不允许的。在 MVP 中 View 并不直接使 Model,它们之间的通信是通过 Presenter (MVC 中的 Controller)来进行的,所有的交互都发生在 Presenter 内部

MVP 不仅仅避免了 View 和 Model 之间的耦合,还进一步降低了 Presenter 对 View 的依赖。Presenter 依赖的是一个抽象化的 View,这带来的最直接的好处,就是使定义在 Presenter 中的 UI 处理逻辑变得易于测试,我们只需要一个实现了这个接口的 View 就能对Presenter 进行测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zudIUiAM-1665920141315)(image/image-20221015070222208.png)]
MVP 的优点包括:
(1)模型与视图完全分离,我们可以修改视图而不影响模型。
(2)可以更高效地使用模型,因为所有的交互都发生在一个地方—Presenter 内部。
(3)我们可以将一个 Presenter 用于多个视图,而不需要改变 Presenter 的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
(4)如果我们把逻辑放在 Presenter 中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)

MVP 的缺点包括:
由于对视图的渲染放在了 Presenter 中,所以视图和 Presenter 的交互会过于频繁。如果 Presenter 过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。

9.5 面向服务的架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wntuuHT7-1665920141315)(image/image-20221015070532747.png)]
SOA 设计原则:
(1)明确定义的接口。
(2)自包含和模块化。
(3)粗粒度。
(4)松耦合。
(5)互操作性、兼容和策略声明。

服务构件与传统构件
服务构件架构(Service Component Architecture,SCA)是基于 SOA 的思想描述服务之间组合和协作的规范,它描述用于使用 SOA 构建应用程序和系统的模型。

SCA 服务构件与传统构件的主要区别在于:
服务构件往往是粗粒度的,而传统构件以细粒度居多;
服务构件的接口是标准的,主要是服务描述语言接口,而传统构件常以具体 API 形式出现;
服务构件的实现与语言是无关的,而传统构件常绑定某种特定的语言;
服务构件可以通过构件容器提供 QoS 的服务,而传统构件完全由程序代码直接控制。

9.5.2 SOA 的关键技术

与 SOA 紧密相关的技术主要有 UDDI、WSDL、SOAP 和 REST 等,而这些技术都是以 XML 为基础而发展起来的。

  1. UDDI
    UDDI(Universal DescriptionDiscovery and Integration,统一描述、发现和集成)提供了一种服务发布、查找和定位的方法,是服务的信息注册规范,以便被需要该服务的用户发现和使用它。
    在 UDDI 技术规范中,主要包含以下三个部分的内容:
    (1)数据模型 (2)API (3)注册服务

2.WSDL
WSDL(Web ServiceDescription Language,Web 服务描述语言)是对服务进行描述的语言,它有一套基于 XML 的语法定义。

3.SOAP
SOAP(Simple ObjectAccess Protocol,简单对象访问协议)定义了服务请求者和服务提供者之间的消息传输规范。SOAP 用 XML 来格式化消息,用 HTTP 来承载消息。通过 SOAP,应用程序可以在网络中进行数据交换和远程过程调用(Remote Procedure Call, RPC)。

(1)封装 (2)编码规则 (3)RPC表示 (4)绑定

4.REST
REST(RepresentationalState Transfer,表述性状态转移)是一种只使用 HTTP 和 XML 进行基于 Web 通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。

REST 提出了如下一些设计概念和准则:
(1)网络上的所有事物都被抽象为资源。
(2)每个资源对应一个唯一的资源标识。
(3)通过通用的连接件接口对资源进行操作。
(4)对资源的各种操作不会改变资源标识。
(5)所有的操作都是无状态的。

9.5.3 SOA 的实现方法

实现 SOA 的方法也比较多,其中主流方式有 Web Service、企业服务总线和服务注册表
1.Web Service

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-urjp9ubc-1665920141316)(image/image-20221015071549427.png)]
在采用 Web Service 作为 SOA 的实现技术时,应用系统大致可以分为六个层次,分别是底层传输层、服务通信协议层、服务描述层、 服务层、业务流程层和服务注册层。
(1)底层传输层。底层传输层主要负责消息的传输机制,HTTP、JMS(Java Messaging Service,Java 消息服务)和 SMTP 都可以作为服务的消息传输协议,其中 HTTP 使用最广。
(2)服务通信协议层。服务通信协议层的主要功能是描述并定义服务之间进行消息传递所需的技术标准,常用的标准是 SOAP 和 REST 协议。
(3)服务描述层。服务描述层主要以一种统一的方式描述服务的接口与消息交换方式,相关的标准是 WSDL。
(4)服务层。服务层的主要功能是将遗留系统进行包装,并通过发布的 WSDL 接口描述被定位和调用。
(5)业务流程层。业务流程层的主要功能是支持服务发现,服务调用和点到点的服务调用,并将业务流程从服务的底层调用抽象出来。
(6)服务注册层的主要功能是使服务提供者能够通过 WSDL 发布服务定义,并支持服务请求者查找所需的服务信息。相关的标准是 UDDI

2.服务注册表
服务注册表(service registry)虽然也具有运行时的功能,但主要在 SOA 设计时使用。它提供一个策略执行点(Policy Enforcement Point,PEP),在这个点上,服务可以在 SOA 中注册,从而可以被发现和使用。大多数商用服务注册产品支持服务注册、服务位置和服务绑定功能

3.企业服务总线
企业服务总线(Enterprise Service Bus,ESB)是传统中间件技术与 XML、Web 服务等技术结合的产物,主要支持异构系统集成。ESB 基于内容的路由和过滤,具备复杂数据的传输能力,并可以提供一系列的标准接口。

ESB 的主要功能有:(1)服务位置透明性;(2)传输协议转换;(3)消息格式转换;(4)消息路由;(5)消息增强;(6)安全性;(7)监控与管理

9.5.4 微服务

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。

微服务的核心特点为:小, 且专注于做⼀件事情、轻量级的通信机制、松耦合、独立部署。

微服务优点:
(1)每个微服务都很小,这样能聚焦一个指定的业务功能或业务需求。
(2)微服务能够被小团队单独开发,这个小团队是 2 到 5 人的开发人员组成。
(3)微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
(4)微服务能使用不同的语言开发。
(5)去中心化。每个微服务都有自己的存储能力,可以有自己的数据库。也可以有统一数据库。

微服务缺点:
(1)很难在不采用分布式事务的情况下跨服务实现功能
(2)测试工作更加困难
(3)跨服务实现要求功能要求团队之间的紧密协作

9.6 架构设计

属性驱动设计法(Attribute-Driven Design,ADD)就是一种定义软件架构的方法,该方法将分解过程建立在软件必须满足的质量属性之上。ADD 的输入为:功能需求(一般表示为用例)、限制条件和质量需求(一组特定于系统的质量场景)。
ADD 的步骤如下:
(1)分解功能块
(2)模块进行求精
(3)对需要进一步分解的每个模块重复上述步骤

9.8 软件架构评估

(3)SAAM:最早形成文档,并得到广泛运用的软件架构分析方法,主要输入是
问题描述,需求说明,架构描述。分析的过程包括场景开发,架构描述,单个场
景描述,场景交互,总体评估
ATAM:主要关注系统的(需求说明),针对性能,可用性,安全性,可修改性,
在系统开发前进行分析,评价和折中。过程是场景和需求收集,架构视图和场景
实现,属性模型构造和分析,属性模型折中四个阶段

9.10 特定领域软件体系结构

(1) 定义:在一个特定应用领域中为一组应用提供组织结构参考的标准软件体系结构
(2) Dssa 的特征:领域性/普遍性/抽象性/可复用性
(3) DSSA 的活动
领域分析/领域设计/领域实现
(4) 参与人员:领域专家/领域分析师/领域设计人员/领域实现人员
(5) DSSA 的建立过程
过程是并发,递归,反复的螺旋模型

  1. 定义领域范围
  2. 定义领域特征元素
  3. 定义领域特定的设计和实现约束
  4. 定义领域模型和体系结构
  5. 产生收集可重用的单元

第 11 章:测试评审方法

11.1 测试方法

“错误”(error)和“缺陷”(fault)的概念
“错误”主要针对软件开发过程,“缺陷”主要针对软件产品.软件开发人员在软件开发过程)中所出现的“错误”是导致软件产品“缺陷”的原因,反过来说,“缺陷”是“错误”的结果和表现形式。

1.单元测试
单元测试期间着重从以下几个方面对模块进行测试:模块接口、局部数据结构、重要的执行通路、出错处理通路和边界条件等。
测试一个模块时需要为该模块编写一个驱动模块和若干个桩(stub)模块。驱动模块用来调用被测模块,它接收测试者提供的测试数据,并把这些数据传送给被测模块,然后从被测模块接收测试结果,并以某种可以看见的方式(例如显示或打印)将测试结果返回给测试者。桩模块用来模拟被测模块所调用的子模块,它接受被测模块的调用,检验调用参数,并以尽可能简单的操作模拟被调用的子程序模块功能,把结果送回被测模块。顶层模块测试时不需要驱动模块,底层模块测试时不需要桩模块。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C0Gyalad-1665920141316)(image/image-20221015102220007.png)]

模块的内聚程度高可以简化单元测试过程。如果每个模块只完成一种功能,则需要的测试方案数目将明显减少,模块中的错误也更容易预测和发现。

2.集成测试
集成测试(integration testing),也称组装测试,它是对由各模块组装而成的程序进行测试,主要目标是发现模块间的接口和通信问题。

3.系统测试
系统测试是软件测试中的最后的、最完整的测试,它是在单元测试和集成测试的基础上进行的,它从全局来考察软件系统的功能和性能要求。系统测试计划应该在需求分析阶段制订

用被称为 (Alpha)测试和 (Beta)测试的过程:
a 测试由用户在开发者的场所进行,并且在开发者的指导下进行测试。
b 测试是在一个或多个用户的现场由该软件的最终用户实施的,开发者通常不在现场,用户负责记录发现的错误和使用中遇到的问题并把这些问题报告给开发者。

11.1.2 白盒测试和黑盒测试

1.白盒测试
白盒测试,又称结构测试,主要用于单元测试阶段。测试者完全知道程序的结构和处理算法。
常用的技术是逻辑覆盖,即考察用测试数据运行被测程序时对程序逻辑的覆盖程度。主要的覆盖标准有 6 种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合条件覆盖和路径覆盖。
2.黑盒测试
黑盒测试,又称功能测试,主要用于集成测试和确认测试阶段。完全不考虑(或不了解)软件的内部结构和处理算法,它只检查软件功能是否正常
常用的黑盒测试技术包括等价类划分、边值分析、错误推测和因果图等。

11.1.3 缺陷的分类和级别

软件测试中所发现的错误(缺陷)主要包括以下几类:
(1)输入/输出错误。
(2)逻辑错误。
(3)计算错误。
(4)接口错误。
(5)数据错误。

第 12 章:嵌入式系统设计

典型的嵌入式系统具有以下特点:
(1)系统专用性强。
(2)系统实时性强。
(3)软、硬件依赖性强。
(4)处理器专用。
(5)多种技术紧密结合。
(6)系统透明性。
(7)系统资源受限。

12.2 嵌入式系统的组成

微处理器是整个嵌入式系统的核心,负责控制系统的执行。外部设备是嵌入式系统同外界交互的通道,常见的外部设备有 Flash 存储器、键盘、输入笔、触摸屏、液晶显示器等输入/输出设备等

1.嵌入式处理器
处理器的种类已经超过了 1000 种,比较流行的也有 30 几个系列。
嵌入式处理器可以分为如下几类:
(1)嵌入式微处理器。嵌入式微处理器(Embedded Micro Processing Unit,EMPU)是由通用计算机中的 CPU 演变而来。嵌入式微处理器在功能上跟普通的微处理器基本一致,但是它具有体积小、功耗低、质量轻、成本低及可靠性高的优点。主要的嵌入式微处理器有 AM186/88、386EX、SC-400、POWER PC、MIPS 及 ARM 等系列。
(2)嵌入式微控制器。嵌入式微控制器(Embedded Micro Controlling Unit,EMCU)又称为单片机,就是整个计算机系统都集成到一块芯片中。嵌入式微控制器一般以某一种微处理器内核为核心,芯片内部集成有 ROM/EPROM/E2PROM、RAM、总线、总线逻辑、定时器/计数器、WatchDog(监督定时器)、并口/串口、数模/模数转换器、闪存等必要外设。与嵌入式微处理器相比,嵌入式微控制器的最大特点是单片化,因而体积更小,功耗和成本更低,可靠性更高
代表性的通用系列有:8051 系列、MCS-96/196/296、C166/167MC68HC05/11/12/16 等。
(3 )嵌入式数字信号处理器。嵌入式数字信号处理器(Embedded Digital Signal Processor,EDSP)是一种专门用于信号处理的处理器,DSP 芯片内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的 DSP 指令,可以用来快速实现各种数字信号的处理算法。
(4)嵌入式片上系统。嵌入式片上系统(Embedded System On Chip)是一种在一块芯片上集成很多功能模块的复杂系统,如微处理器内核、RAM、USB、IEEE 1394Bluetooth 等。以往这些单元按照各自的功能做成一个个独立的芯片,

2.总线

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w3gd9a30-1665920141317)(image/image-20221015115845260.png)]
3.存储器

4.I/O 设备与接口

12.3嵌入式操作系统

与通用操作系统相比,嵌入式操作系统主要有以下特点。
(1)微型化。
(2)代码质量高。
(3)专业化。
(4)实时性强。
(5)可裁减、可配置。

第 13 章:开发管理

项目管理首先要考虑三个约束条件:项目范围、时间进度、成本预算

项目成本管理包括资源计划编制、成本估算、成本预算、成本控制 4 个主要部分内容。
时间管理包括确保项目按时完成所需的各个过程。它包括活动定义、活动排序、活动历时估算、进度计划编制、进度控制 5 个部分内容。

13.2.3 软件文档管理

2.文档的归类
按照文档产生和使用的范围,软件文档大致可分为 3 类:开发文档;管理文档;产品文档。

13.7 软件过程改进

W-CMM(软件能力成熟度模型)为软件企业的过程能力提供了一个阶梯式的进化框架,梯共有五级。第一级实际上是一个起点,任何准备按 CMM 体系进化的企业都自然处于这个起点上,并通过这个起点向第二级迈进。除第一级外,每一级都设定了一组目标,果达到了这组目标,则表明达到了这个成熟级别,可以向下一个级别迈进。 CMM 体系不主张跨越级别的进化,因为从第二级起,每一个低的级别实现均是高的级别实现的基础。

(1)初始级。
(2)可重复级。
(3)定义级。
(4)管理级。
(5)优化级。

第 14 章:信息系统基础知识

信息系统包含三大要素,分别是系统的观点、数学的方法和计算机应用。
第一类数据环境:数据文件。
第二类数据环境:应用数据库。
第三类数据环境:主题数据库。
第四类数据环境:信息检索系统。

2.信息系统的应用层次
一个公司的管理活动可以分成 4 级:战略级、战术级、操作级和事务级

14.1.2 信息系统的生命周期

信息系统的生命周期分为 4 个阶段,即产生阶段、开发阶段、运行阶段和消亡阶段

14.1.3 信息系统建设的原则

1.高层管理人员介入原则
2.用户参与开发原则
3.自顶向下规划原则
4.工程化原则
5.其他原则
创新性原则,用来体现信息系统的先进性。
整体性原则,用来体现信息系统的完整性。
发展性原则,用来体现信息系统的超前性。
经济性原则,用来体现信息系统的实用性。

14.1.4 信息系统开发方法

1.结构化方法
(1)开发目标清晰化
(2)工作阶段程式化。
(3)开发文档规范化。
(4)设计方法结构化。
2.原型法
3.面向对象方法面向对象方法
4. 面向服务的方法

14.3 政府信息化与电子政务

(1)政府与政府(Government To Government)。
(2)政府对企业(Government To Business)
(3)政府对公民。
(4)企业对政府。
(5)公民对政府。
(6)政府对公务员。G2E

14.4.2 企业资源规划

1.ERP 的结构
ERP 是一个层次结构,可分为三个层次,即管理思想、软件产品、管理系统
ERP 是将企业所有资源进行集成整合,简单地说是将企业的三大流:物流、资金流、信息流进行全面一体化管理的管理信息系统。

14.4.3 客户关系管理CRM

应用系统保证了更令人满意的客户体验,因而会使企业直接受益。
(1)客户服务
(2)市场营销。
(3)共享的客户资料库。
(4)分析能力

14.4.5 企业门户

(1)企业信息门户。企业信息门户(Enterprise Information Portal,EIP)的基本作用是为人们提供企业信息
(2)企业知识门户。企业知识门户(Enterprise Knowledge Portal,EKP)是企业员工日常工作所涉及相关主题内容的“总店”。
(3)企业应用门户。企业应用门户(Enterprise Application Portal,EAP)实际上是对企业业务流程的集成。

14.4.8 电子商务概述

电子商务(Electronic Commerce,EC)是指买卖双方利用现代开放的 Internet,按照一
定的标准所进行的各类商业活动。
(1)企业与消费者之间的电子商务(Business to Customer,B2C)。
(2)企业与企业之间的电子商务(Business to Business,B2B)
(3)消费者与消费者之间的电子商务(Customer to Customer,C2C)。
(4)O2O 即 Online To Offline(在线离线/线上到线下),是指将线下的商务机会与互联网结合

14.6 知识管理与商业智能

14.6.2 商业智能

商业智能(Business Intelligence,BI)是企业对商业数据的搜集、管理和分析的系统过程,目的是使企业的各级决策者获得知识或洞察力,帮助他们做出对企业更有利的决策

商业智能系统主要包括数据预处理、建立数据仓库、数据分析及数据展现 4 个主要阶
段。数据仓库、OLAP 和数据挖掘技术是商业智能的三大组成部分。

第 15 章:基于中间件的开发

15.1 面向构件的软件设计

15.1.1构件的概念

软件构件是一种组装单元,它具有规范的接口规约和显示的语境依赖.软件构件可以被独立的部署并由第三方任意的组装

构件的特性:
·独立部署单元。
·作为第三方的组装单元。
·没有(外部的)可见状态。

对象的特性是:
(1)一个实例单元,具有唯一的标志。
(2)可能具有状态,此状态外部可见。
(3)封装了自己的状态和行为。

15.1.2 模块

模块本身就是一个简单的构件.

白盒抽象,黑盒抽象与重用
黑盒重用是指仅仅依赖接口和规约来实现,白盒重用指依赖对具体的实现细节的理解,通过接口来使用软件部件

15.1.3 语境相关组合构件框架

第一个对语境相关组合提供商业支持的也许是COM的“套间”模型。事实上,其下一代,MTS(Microsoft Translation Server)语境,能看做是当前所有语境相关组合方法(EJB容器、COM+语境、CCM容器和CLR语境)的源头。
1.COM+语境
COM+源于COM“套间”和MTS语境。COM“套间”使用线程模型来分离对象;MTS语境通过事务域分离对象。COM+统一了这两个概念,同时也加入了大量的新的语境属性。(COM+增加了可租赁线程“套间”的概念,在这种类型的“套间”中一次只允许一个线程入住,但是多个线程能顺序地入住该“套间”。)微软事务服务器(MTS)引入了事务语境的概念。在MTS中运行的COM类的事务声明属性规定,该类必须或者位于非事务语境,或者位于新的事务语境,或者位于新的或是已有的事务语境,或者不做任何要求。通过这些声明,MTS和分布式事务协调器(Distributed Transaction Coordinator,DTC)共同创建了一个合适的事务域。相同事务域中的对象共享一个单独的逻辑线程和一个单独的共享事务资源集合(比如数据库连接和锁)。一旦线程从事务域中返回,事务要么提交要么终止,该事务域被销毁,该域所持有的资源被释放。
2.EJB容器
EJB为EJB实例提供了容器,EJB容器允许类请求进行明确的事务控制,添加合法的事务代码时这种控制开辟了一条更加容易的道路。明确的控制在COM+中是可能做到的,但是不如EJB直接(本质上,外部控制需要独立存在于COM+的事务域之外,并且和微软的分布式事务控制器DTC直接发生交互)。
此外,EJB容器通过支持会话Bean和实体Bean支持持久对象。会话Bean的行为类似于MTS语境中的COM实例—一旦事务结束(异常中断或是正常提交)其状态将丢失。实体Bean在事务正常提交时就保存至事务永久存储器。也就是说,Bean能够作为永久对象保存,除了可显式编写语句——这是MTS或COM+的唯一选择。
JB2.0也增加了消息驱动的Bean类型,这是一个完全由数据驱动的EJB构件类型。与无状态会话Bean一样,消息驱动的Bean也是在消息到达时实例化,消息处理完毕后被销毁。
3.CCM容器
CORBA构件模型(CCM),CORBA3.0规范的语境中被引入。正如EJB建立在MTS的概念上一样,CCM建立在EJB的概念上。CCM容器可以定义为EJB容器的超集,CCM的会话构件相对于EJB中的有状态会话Bean,然而无状态的会话bean在CCM中被称为服务构件。过程构件的实例的状态在一次调用后不再保持。过程构件实例具有持久的状态但是不能通过主键来定位。因此,过程构件对于捕获正在进行的过程状态是有用的,但不能用于捕获可确认的实体状态。

  1. COM+:Microsoft 指定,增加了可租赁”套间”的概念,一次只能入住一个线程,多
    线程顺序进入
  2. EJB 容器: SUN 的 Java 企业 Bean 制定,运行类进行明确的事物控制
  3. CCM 容器: OMG 制定,在 EJB 的会话构件和实体构件之外增加了过程构件的支持
  4. CLR 语境和通道:为语境相关的组装提供真正的可扩展设施的主流结构
15.1.4 构件开发当前面临的问题

异步、多线程、“生活”在没有实现继承的状态下、坚壳类、语言支持、调用者封装

15.1.5构件的来源

1.从现有的构件库选取 2.从遗留工程中提取 3.市场购买 4.重新开发符合要求的构件

15.2 构件平台与典型架构

15.2.1 OMG的方式

CORBA的主要目标就是使不同语言、不同实现和不同平台间能进行交互.
CORBA包括三个基本部分:一套调用接口、对象请求代理(ORB)和一套对象适配器.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zyU6oVuY-1665920141318)(image/image-20221015143447302.png)]
现有的CORBAService包含16种对象服务(CORBA服务),其中的通告服务是电领域设施正式的组成部分。

CORBA的构件模型CCM
1.可移植对象适配器POA
CORBA对象适配器主要的作用就是在一个ORB和真正接收调用并且返回结果的对象实现之间进行协调。任何ORB支持的服务器进程至少有一个POA(Portable Object Adapter)的实例,当然,该进程中的每个服务对象都可能有一个POA实例。
一个POA实例通过将收到的请求传递给一个“服务体”来对其进行处理。
2.CCM构件
一个CCM应用程序是CCM构件的一个组装,其中构件可以是客户创建的或者是现成的、企业内部的或者是后来获得的。企业级JavaBean构件和CCM构件能够在一个应用程序中集成在一起。单个构件通过构件包发布,该构件包含有一个描述其内容的XML文档,还可以包含支持不同平台的二进制代码。CCM的装配包含一个描述它们所引用的构件包信息的XML文档,以及它们的部署配置。
3.CCM容器
CORBA3.0定义了一个构件实现框架(Component Implementation Framework,CIF)每个构件实例都放在一个CCM容器里。

15.2.2 SUN公司的方式

1.Applet 在客户端浏览器的进程中执行,增强网站在浏览器中的视觉效果
java2之后applet成为一个边缘的角色,
2.Javabean
Bean模型主要包括以下几个方面。
(1)事件:Bean可以声明它们的实例是潜在的事件源或者特定类型事件的监听者。一个组装工具能够把事件源和监听者连接起来。
(2)属性:Bean 通过成对的getter 和setter方法暴露出一系列的属性。这些属性可以用来进行定制或者编程。属性的变化可以触发事件,也可以被事件强制修改。一个受限的属性只有在修改不被禁止的情况下才可以被修改。
(3)自检:一个组装工具能够检查一个Bean,发现这个Bean的属性、事件,以及所支持的方法。
(4)定制:使用组装工具,一个Bean实例能够通过设置它的各种属性来完成定制。
(5)持久化:定制好的、已经连接的Bean实例需要进行保存,以便在应用程序使用它的时候重新装载。
3.jave的基本服务

  1. 反射
    允许我们:
    (1)检查类和接口,包括它们的属性域和方法。
    (2)构建新的类实例和新数组。
    (3)对象和类的属性域的访问和修改。
    (4)数组元素的访问和修改。
    (5)对象和类的方法调用。

  2. 对象序列化
    把对象序列化成字节流

  3. java本地接口 (JNI)
    在java虚拟机之外我们可以调用本地代码,
    JNI允许本地方法:
    (1)创建、检查和更新一个Java对象。
    (2)调用Java方法。
    (3)捕捉和抛出异常。
    (4)装载类,获得类的信息。
    (5)进行运行时刻类型检查。

  4. java AWT和JFC/Swing
    提供了一个图形用户的接口

4.各种构件
(1)applet:Applet是第一个Java构件模型,用于轻量级的可下载的构件,以增强网站在浏览器中的视觉效果

(2)javabean:第二个Java构件模型是JavaBean。它主要用于支持基于连接的程序,比如同时用在客户端和服务器端的程序

(3)EJB是Java的第三个构件模型。它使用容器集成服务,用以支持EJB(构件)使用声明属性和部署描述符的方式来请求服务。
EJB 共有三种类型:EntityBean(实体 Bean)、Session Bean(会话 Bean)和 Message Driven Bean(消息驱动 Bean),下面分别说明。

  1. 实体 Bean。实体 Bean 表示数据库中的数据及作用于数据的方法。
  2. 会话 Bean 代表与客户间的短暂对话。会话 Bean 可以有状态,也可以无状态。有状态会话 Bean 包含客户端方的对话状态,对话状态是会话 Bean 实例的字段值加上可以从会话 Bean 字段阅读的所有对象。有状态的会话 Bean 不表示持久数据库中的数据,但能够以客户端的名义访问和更新数据。无状态会话 Bean 没有客户端的任何状态信息。它们一般不提供保留任何状态的服务器
    行为。无状态会话 Bean 需要的系统资源较少。提供通用服务或表示共享数据视图的业务对
    象适合作为无状态的会话 Bean。
    3)消息驱动 Bean。EJB2.0 规范中的消息驱动 Bean 能处理从 JMS 消息队列接收到的异步消息。JMS 将消息路由到消息驱动 Bean,由消息驱动 Bean 从池中选择某个实例处理消息

(4)servlet。它跟Applet 相似,但属于服务器端构件模型,而且是通常由Web服务器进程进行实例化的轻量级构件,Web页面就是一个典型的例子JSP:JSP 页面是基于文本的 Servlet 开发方式。J

(5)应用客户端构件。它本质上是在客户端的不受限制的Java程序。一个客户端构件通过用命名语境的JNDI企业来访问J2EE服务器中的环境属性、EJB和各种资源。

5.java和corba
一个OMGIDL到Java的绑定和OMG最先给出的Java到OMGIDL的绑定,是1998F在CORBA2.2中定义的。将CORBA包含在Java项目的一个重要原因是能用IIOP和Java系统通信。为了能访问CORBA服务,通常使用Java规范定义的接口会更方便,这些接口能够映射到兼容CORBA或其他服务。

6.企业级服务接口
1)Java命名和目录接口(JNDI)
在计算系统中的一个全局性问题就是通过名字或属性来定位服务的问题。
2)Java消息服务(JMS)异步消息是将实例的操作和覆盖的组装模型通过消息进行通信。JMS是Java对消息系统的访问机制,但它本身并不实现消息。
3)Java数据库连接(JDBC)JDBC是根据流行的微软ODBC(Open DataBase Connectivity,开放数据库连接)标准建立的一个通用的与数据库交互的方法。
4)Java事务API和服务(JTA,JTS)

15.2.3 Microsoft的方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GSCyneoG-1665920141318)(image/image-20221015162301733.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gGdEnKba-1665920141319)(image/image-20221015162335658.png)]

1.第一个基础关联模型—COM
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wwZsjL5s-1665920141320)(image/image-20221015155343833.png)]
COM不支持任何形式的实现继承。为实现对象重用,COM支持两种形式的对象组装:包含(Containment)和聚集(Aggregation)。

COM接口可通过(单)接口继承从其他COM接口中派生。实际上,所有COM接口都直接或间接地继承了lunknown,它是接口体系中的公共基类型。除了lunknown外,只有Idispatch和Ipersist这两种重要的基接口被公共继承.
一旦公布,COM接口和它的规范不允许以任何形式改变。

2.从COM到分布式COM(DCOM)
DCOM中已存在客户端代理(Proxy)对象和服务器端桩(Stub)对象,它们只被用于支持进程间通信。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ALFdtU1j-1665920141320)(image/image-20221015160047727.png)]

客户向对象A发出一个调用。被调用的方法只有一个参量,它引用对象B的一个接口。由于对象A位于另一进程,本地代理对象中转此调用。代理决定对象B的对象标志符(OID)和被传递接口的接口指针标志符(IPID)。OID和PID一起随着客户进程ID被传递给服务器进程的桩。桩使用OID定位对象B的本地代理,使用IPID定位具体的接口。接着,桩代表客户发出先前的调用,它将本地B代理的接口引用传给调用接受者一对象A。

15.2.4 战略比较

1.共同点:
所有的方法都依赖于延后绑定机制、封装和动态多态性

15.5 EAI(Enterprise ApplicationIntegration,企业应用集成)

1.企业集成平台(Enterprise Integration Platform,EIP)
集成系统支持环境的集成平台,其基本功能主要如下。
1)通信服务
2)信息集成服务
3)应用集成服务
4)二次开发工具
5)平台运行管理工具

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wBjlkEQ2-1665920141321)(image/image-20221015163232672.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Farifkc1-1665920141321)(image/image-20221015163254747.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HNU1pPnV-1665920141322)(image/image-20221015163642891.png)]
SCM(Supply Chain Management,供应链管理)
CRM(Customer Relationship Management,客户关系管理)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DibQmxwy-1665920141322)(image/image-20221015163852079.png)]

15.6 轻量级架构和重量级架构

J2EE 多层结构的出现促进了软件业的巨大改变,目前主流的轻量级架构是把 Struts、Spring 和 Hibernate 这三种在业内比较推崇的开源技术基于 MVC 模式相结合,这样在项目开发中不管是从效率上,费用上,还是易维护上都能达到很好的效果。下面将分别介绍这三种框架。

15.6.1 Struts 框架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NijXmHSX-1665920141323)(image/image-20221015170010398.png)]

struts 把 Servlet、JSP、自定义标签和信息资源整合到一个统一的框架中,开发人员利用其进行开发时不用自己再编码实现全套 MVC 模式,极大地节省了时间。

15.6.2 Spring 框架

这个框架包括声明性事务管理,过 RMI 或 web services 远程访问业务逻辑,mail 支持工具,以及对于数据和数据库之间持久层的各种配置的支持。Spring 允许自由选择和组装各部分功能,还提供和其他软件集成的接口,如与 Hibernate、Struts 的集成
Spring 核心本身是个容器,管理物件的生命周期、物件的组态、相依注入等,并可以控制物件在创建时是以原型(Pro-totype)或单例子(Singleton)的方式来创立
Spring 的核心概念注入(Depen-dency Injection)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x9JJ9CpH-1665920141324)(image/image-20221015193043285.png)]

15.6.3 Hibernate 框架

Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象!

Hibernate 是一种对象和关系之间映射的框架,是 Java 应用和关系数据库之间的桥梁。它可以将数据库资源映射为一个或者多个 POJO。将面向数据库资源的各种业务操作以POLO 的属性和方法的形式实现,使人们摆脱烦琐的 JDBC 代码,将精力更多地集中在编写数据表示和业务逻辑上。Hibernate 的基本实现框架如图 15-10 所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OJRKBAFo-1665920141324)(image/image-20221015193259281.png)]
在 Hibernate 中对象/关系映射机制的核心是一个 XML 文件,Hibernate 只是一个将持久化类与数据库表映射的工具,Hibernate 只需要将每个持久化实例对应于数据库表中的一个数据行即可。

第 16 章:安全性和保密性设计

16.1 加密和解密

16.1.1 对称密钥加密算法

对称密钥加密算法有多种,例如,DES(Data Encryption Standard,数据加密标准)、 IDEA(International Data Encryption Algorithm,国际数据加密算法)、Skipjack、3DES、GDES、 New DES、Lucifer、FEAL N、LOKI 91、RC4、RC5 等

16.1.2 不对称密钥加密算法

RSA:
RSA 的安全性依赖于大数的分解
加解密过程:
首先选取两个大素数,pq
n=qp,随机选择加密秘钥e,e与欧拉(n)互为质数
ed mod(欧拉(n))=1
en为公钥 dn为私钥

加密明文m: m^e mod (n)=c
解密:c^d mod(n)=m

16.2 数字签名与数字水印

散列函数具有如下一些特点:
(1)不同内容的报文具有不同的散列码,
(2)散列函数是单向的
(3)对于任何一个报文,无法预知它的散列码。
(4)散列码具有固定的长度

数字签名:
下面结合一个例子,看一看 RSA 结合 MD5 数字签名的具体步骤:

hash值:H
信息明文:M
数字签名:DS
SK:私钥
PK:公钥
ED: encode data
A向B传递消息MH= Hash(M)
DS=SKA(H)
DES(DS+PKA+M)=ED ,这里存在des加密的keyPKB(key)传递给B,这样B就有了KEY,PKB(key)也称作信封解密:则使用PKA解密得到H,计算M的hash看是否与H一致

数字水印:
该技术是在原始数据中嵌入秘密信息—水印,来证实改数据的所有权.不破坏元数据的使用价值和商业价值的前提下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pv5fIjmg-1665920141325)(image/image-20221015205245183.png)]

16.3 数字证书与密钥管理

16.3.1 密钥分配中心KDC

在 KDC 方案中,每一个用户都只保存自己的私钥 SK 和 KDC 的公钥 PKKDC,而在通信时再经由 KDC 获得其他用户的公钥 PK 或者仅仅在某一次通信中可以使用的对称密钥加密算法的临时密钥 K

假设有两个用户 A、B 都是 KDC 的注册用户,他们分别拥有私钥 SKA 和 SKB,相应的公钥分别是 PKA 和 PKB。现在 A 想要与 B 进行会话,假如采用对称密钥加密算法来加密这次会话,那么密钥的分配过程如图 16-2 所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TQtuK2PA-1665920141325)(image/image-20221015205805502.png)]
首先用户 A 向 KDC 发送用自己的私钥 SKA 加密的请求 SKA(A,B),说明自己想要与B 进行会话。
KDC 收到这个请求后,根据某种算法生成一个可以供 A、B 双方进行秘密会话的对称密码算法的密钥 K,然后向 A 返回一个应答 PKA(K, PKB(A, K))。这个应答信息是用 A 的公钥 PKA 加密的,当然只有用户 A 自己才能够正确解读,可以从中提取与 B 会话的密钥 K。
同时,该信息中还有一部分内容 PKB(A,K),表明用户 A 欲与 B 进行会话,并且密钥是 K,这是用 B 的公钥 PKB 加密的。用户 A 把这一部分信息发送给 B,B 收到后从中解密出会话密钥。
至此,完成一次密钥的自动分配过程。此后,A、B 双方就可以利用密钥 K 进行加密通信了。















A








KDC








B



















SKA(A,B)


PKA(k,PKB(A,k))


PKB(A,k)





加密通信建立完成




key(k,message)


key(k,message)


loop



[x]







A







KDC







B


16.3.2 数字证书和公开密钥基础设施

2.公开密钥基础设施
PKI 是指由数字证书、证书颁发机构(Certificate Authority,CA),以及对电子交易、通信等所涉及的各方的合法性进行检查和验证的其他注册机构组成的一套系统。
除了数字证书的有效期,证书撤销列表(Certificate Revocation List,CRL)是另一种数字证书有效期控制机制。当数字证书中认可的事实发生变化时,数字证书发布者必须使用某种机制来撤销以前发出、但现在失效的证书。证书发布者定期发布 CRL,列出所有曾发布但当前已被撤销的证书号,证书的使用者依据 CRL 即可验证某证书是否已被撤销。

(1)PKI 的结构模型。PKI 中有三类实体:管理实体、端实体和证书库。管理实体是PKI 的核心,是 PKI 服务的提供者;端实体是 PKI 的用户,是 PKI 服务的使用者;证书库是一个分布式数据库,用于证书和 CRL 的存放和检索。

CA 注册机构(RegisteAuthority,RA)是两种管理实体。CA 是 PKI 框架中唯一能够发布和撤销证书的实体,维护证书的生命周期;RA 负责处理用户请求,在验证了请求的有效性后,代替用户向 CA 提交。RA 可以单独实现,也可以合并在 CA 中实现。作为管理实体,CA 和 RA 以证书方式向端实体提供公开密钥的分发服务。

但实际上,不同的公司对 X.509 证书进行了不同的扩展,并不是所有的证书都彼此兼容

16.4 安全协议

16.4.1 IPSec 协议简述

该协议把密码技术应用在网络层,在 IPv6 中,IPSec 协议是一个必备的组成部分,被强制实施;在 IPv4 中,它是一个可选的扩展协议.IPSec 协议对网络层的通信使用了加密技术,,对数据包中的数据进行加密。
IPSec 协议不是一个单独的协议,它包括应用于 IP 层上网络数据安全的一整套协议,主要包括 AH(Authentication Header,IP 认证头部协议)、ESP(Encapsulating Security Payload,封装安全负载协议)、IKE(Internet Key Exchange,Internet 密钥交换协议)和用于网络认证及加密的一些算法等

16.4.2 SSL 协议

SSL 是用于安全传输数据的一种通信协议

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n3K5KdWp-1665920141326)(image/image-20221015213117336.png)]

16.4.3 PGP 协议

PGP(Pretty Good Privacy)是美国人 PhilZimmermann 于 1995 年提出的一套电子邮件加密方案。它可以用来对邮件加密以防止非授权者阅读,还能对邮件加上数字签名而使收信人可以确认邮件确实是由发送方发出的

PGP 并不是新的加密算法或协议,它综合采用了多种加密算法,例如,对邮件内容加密采用 IDEA 算法、对于加密信息采用 RSA 公钥加密算法,还采用了用于数字签名的消息摘要算法,加密前进行压缩处理等技术手段进行邮件加密的一套软件。通过组合使用这些加密方法,把 RSA 公钥加密体系的良好加密效果和对称密钥加密体系的高速度结合起来,并且通过在数字签名和密钥认证管理机制中的巧妙设计,使得 PGP 成为一个优秀的强有力的数据加密程序
1.PGP 加密的原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CpnCx7Oe-1665920141326)(image/image-20221015213352085.png)]

16.5 访问控制

访问控制是通过某种途径限制和允许对资源的访问能力以及范围的一种方法。
1.身份认证技术
具体方法可归结为3大类:根据用户知道什么、拥有什么、是什么来进行认证。

用户知道什么,一般就是口令;用户拥有什么,通常为私钥或令牌:用户是什么,这是一种基于生物识别技术的认证。

1)用户名和口令认证
简单认证方式主要是通过一个客户与服务器共知的口令(或与口令相关的数据,如散列、密文等)进行验证。根据处理形式的不同,有3种简单认证的方式:验证数据的明文传送、利用单向散列函数处理验证数据、利用单向散列函数和随机数处理验证数据,这3种方式的安全强度依次增加,处理复杂度也依次增高。
2)使用令牌认证
令牌的实现分为质询响应令牌和时间戳令牌,其中使用较多的是时间戳令牌。
质询响应令牌的工作原理是:在进行身份认证时,认证服务器首先发送一个随机数到客户机的登录程序。用户将这个随机数读出,输入令牌,并输入令牌的PIN码(实际就是口令),得以访问令牌。令牌对输入的随机数用存储的私钥进行签名,并把结果用Base64编码输出。用户把令牌的输出填入客户机的验证程序中,数据传输到认证的服务器端,在服务器端将使用用户的公钥对签名进行验证,以确定是否允许客户通过登录认证。在该方案中,由于使用数字签名进行登录认证,系统的安全强度大大增加:私钥采用令牌存储的方式解决了私钥自身的安全问题。令牌是一个可移动的设备,可以随身携带,而且令牌有PIN码保护,对令牌的非法访问超过一定的次数后,令牌会死锁。时间戳令牌解决了质询响应令牌中随机数的问题,















service








client



















随机数R








输入令牌的PIN码,令牌中的client的私钥SKC进行签名,Data=Base64(SKC(R))




Data


在服务器端将使用用户的公钥对签名进行验证





service







client


时间戳令牌利用时间代替上面的随机数。

3)生物识别与三因素认证
要将用户知道什么、拥有什么、是什么结合起来,同时对认证用的密钥进行保护。

2.访问控制技术

访问控制策略一般可以划分为三类:自主访问控制(Discretionary Access Control,DAC),强制访问控制(Mandarory Access Control,MAC),基于角色的访问控制(Roal Based Access Control,RBAC)。其中 DAC、MAC 是属于传统的访问控制策略,而 RBAC 则是后来出现的一种访问控制策略,被认为具有很大的优势,具有很好的发展前景

根据控制手段和具体目的的不同,通常将访问控制技术划分为如下几个方面:入网访问控制、网络权限控制、目录级安全控制、属性安全控制以及网络服务器的安全控制等。

入网访问控制为网络访问提供了第一层访问控制。分为三个步骤:用户名的识别与验证、用户口令的识别与验证、用户账号的默认限制检查。三个步骤中只要任何一个未通过校验,该用户便不能进入该网络。可以说,对网络用户的用户名和口令进行验证是防止非法访问的第一道防线。但由于用户名口令验证方式容易被攻破,目前很多网络都开始采用基于数字证书的验证方式。

网络权限控制是针对网络非法操作所提出的一种安全保护措施。能够访问网络的合法用户被划分为不同的用户组,用户和用户组被赋予一定的权限。访问控制机制明确了用户和用户组可以访问哪些目录、子目录、文件和其他资源;以及指定用户对这些文件、目录、设备能够执行哪些操作。可以根据访问权限将用户分为以下几类:特殊用户(即系统管理员);一般用户,系统管理员根据他们的实际需要为他们分配操作权限;审计用户,负责网络的安全控制与资源使用情况的审计。用户对网络资源的访问权限可以用访问控制表来描述。

目录级安全控制是针对用户设置的访问控制,控制用户对目录、文件、设备的访问。

属性安全控制在权限安全控制的基础上提供更进一步的安全性。当用户访问文件、目录和网络设备时,网络系统管理员应该给出文件、目录的访问属性,网络上的资源都应预先标出安全属性,用户对网络资源的访问权限对应一张访问控制表,用以表明用户对网络资源的访问能力。

网络服务器的安全控制包括可以设置口令锁定服务器控制台,从而防止非法用户修改、删除重要信息或破坏数据。具体包括设定服务器登录时间限制、非法访问者检测和关闭的时间间隔等。

16.6 网络安全体系

16.7.1 OSI 安全架构

OSI 安全架构中对网络安全提出了 5 类安全服务,即对象认证服务、访问控制服务、数据保密性服务、数据完整性服务、禁止否认服务。

要建立一个完整的信息安全保障体系,包含以下几方面的内容:

  1. 建立统一的身份认证体系
  2. 建立统一的信息安全管理体系
  3. 建立规范的信息安全保障体系
  4. 建立完善的网络边界防护体系
16.8.3 入侵检测系统

入侵检测技术入侵检测系统的处理过程分为数据采集阶段、数据处理及过滤阶段、入侵分析及检测阶段、报告及响应阶段 4 个阶段

16.9 数据备份

1.完全备份:备份所有选中的文件夹的文件
2.差异备份:和上一次完全备份后有变化的文件
3.增量备份,针对上一次备份的文件,如果没有标识已备份,则进行备份,并进行标识已备份
4.按需备份:根据需要有选择的进行备份

16.10系统安全架构设计

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JOKQZomc-1665920141328)(E:\Desktop\rk\rk1\image\image-20221015222255524.png)]
具体来讲,常见的安全威胁有如下几种。
(1)信息泄露:信息被泄露或透露给某个非授权的实体。
(2)破坏信息的完整性:数据被非授权地进行增删、修改或破坏而受到损失。
(3)拒绝服务:对信息或其他资源的合法访问被无条件地阻止。
(4)非法使用(非授权访问):某一资源被某个非授权的人、或以非授权的方式使用。
(5)窃听:用各种可能的合法或非法的手段窃取系统中的信息资源和敏感信息。例如对通信线路中传输的信号进行搭线监听,或者利用通信设备在工作过程中产生的电磁泄露截取有用信息等。
(6)业务流分析:通过对系统进行长期监听,利用统计分析方法对诸如通信频度、通信的信息流向、通信总量的变化等参数进行研究,从而发现有价值的信息和规律。
(7)假冒:通过欺骗通信系统(或用户)达到非法用户冒充成为合法用户,或者特权小的用户冒充成为特权大的用户的目的。黑客大多是采用假冒进行攻击。
(8)旁路控制:攻击者利用系统的安全缺陷或安全性上的脆弱之处获得非授权的权利或特权。例如,攻击者通过各种攻击手段发现原本应保密,但是却又暴露出来的一些系统“特性”。利用这些“特性”,攻击者可以绕过防线守卫者侵入系统的内部。
(9)授权侵犯:被授权以某一目的使用某一系统或资源的某个人,却将此权限用于其他非授权的目的,也称作“内部攻击”。
(10)特洛伊木马:软件中含有一个察觉不出的或者无害的程序段,当它被执行时,会破坏用户的安全。这种应用程序称为特洛伊木马(Trojan Horse)。
(11)陷阱门:在某个系统或某个部件中设置了“机关”,使得当提供特定的输入数据时,允许违反安全策略。
(12)抵赖:这是一种来自用户的攻击,例如,否认自己曾经发布过的某条消息、伪造一份对方来信等。
(13)重放:所截获的某次合法的通信数据备份,出于非法的目的而被重新发送。
(14)计算机病毒:所谓计算机病毒,是一种在计算机系统运行过程中能够实现传染和侵害的功能程序。一种病毒通常含有两个功能:一种功能是对其他程序产生“感染”;另外一种或者是引发损坏功能、或者是一种植入攻击的能力。
(15)人员不慎:一个授权的人为了钱或利益、或由于粗心,将信息泄露给一个非授权的人。
(16)媒体废弃:信息被从废弃的磁盘或打印过的存储介质中获得。
(17)物理侵入:侵入者通过绕过物理控制而获得对系统的访问。
(18)窃取:重要的安全物品,如令牌或身份卡被盗。
(19)业务欺骗:某一伪系统或系统部件欺骗合法的用户或系统自愿地放弃敏感信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a55UyiYr-1665920141329)(E:\Desktop\rk\rk1\image\image-20221015222543917.png)]

16.10.1 鉴别框架

鉴别信息(Artificial Intelligence,AI)是指申请者要求鉴别到鉴别过程结束所生成、使用和交换的信息。鉴别信息的类型有交换鉴别信息(交换Al)、申请鉴别信息(申请Al)和验证鉴别信息(验证AI)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m028z23n-1665920141330)(E:\Desktop\rk\rk1\image\image-20221015222859973.png)]

16.10.2访问控制框架

访问控制(Access Control)决定开放系统环境中允许使用哪些资源、在什么地方适合阻止未授权访问的过程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ma3lBU9m-1665920141330)(E:\Desktop\rk\rk1\image\image-20221015223034141.png)]

16.10.3 机密性框架

机密性(Confidentiality)服务的目的是确保信息仅仅是对被授权者可用。

16.10.4完整性框架

完整性(Integrity)框架的目的是通过阻止威胁或探测威胁,保护可能遭到不同方式危害的数据完整性和数据相关属性完整性。

16.10.5 抗抵赖框架

抗抵赖(Non-repudiation)服务包括证据的生成、验证和记录,以及在解决纠纷时随即进行的证据恢复和再次验证。

  1. RADIUS 软件架构设计
    RADIUS 软件主要应用于宽带业务运营的支撑管理,是一个要可靠运行且高安全级别的软件支撑系统。
    RADIUS 软件架构分为三个层面:
    协议逻辑层:主要实现 RFC 框架中的内容,处理网络通信协议的建立、通信和停止方面的工作
    业务逻辑层:是 RADIUS 软件架构设计的核心部分,协议处理进程主要对转发引擎发来的包进行初步分析,并根据包的内容进一步分发到不同的业务逻辑处理进程
    数据逻辑层

RADIUS 的功能:
实际处理大量用户并发的能力
软件架构的可扩展性
负载均衡是提高 RADIUS 软件性能的有效方法,主要完成以下任务:
解决网络拥塞问题,就近提供服务
为用户提供更好的访问质量
提高服务器响应速度
提高服务器及其他资源的利用效率
避免了网络关键部位出现单点失效

第 17 章:系统的可靠性分析与设计

17.1 系统的可靠性定义

软件的可靠性定义:在规定的条件下,规定的时间内,软件不引起系统失效的概率
软件与硬件有很多不同点,但从可靠性的角度来看,它们主要有如下4个不同点。
(1)复杂性。软件内部逻辑高度复杂,硬件则相对简单,这就在很大程度上决定了设计错误是导致软件失效的主要原因,而导致硬件失效的可能性则很小。
(2)物理退化。软件不存在物理退化现象,硬件失效则主要是由于物理退化所致。这就决定了软件正确性与软件可靠性密切相关,一个正确的软件任何时刻均可靠。然而,一个正确的硬件元器件或系统,则可能在某个时刻失效。
(3)唯一性。软件是唯一的,软件复制不改变软件本身,而任何两个硬件不可能绝对相同。这就是为什么概率方法在硬件可靠性领域取得巨大成功,而在软件可靠性领域不令人满意的原因。
(4)版本更新较快。硬件的更新周期通常较慢,硬件产品一旦定型一般就不会更改,而软件产品通常受需求变更、软件缺陷修复的需要,造成软件版本更新较快,这也给软件可靠性评估带来较大的难度。

17.2 系统故障模型

一个好的软件可靠性模型应该具有如下重要特性。
(1)基于可靠的假设。
(2)简单。
(3)计算一些有用的量。
(4)给出未来失效行为的好的映射。
(5)可广泛应用。

17.4 软件可靠性的设计与管理

遵循的原则:
(1)软件可靠性设计是软件设计的一部分,必须在软件的总体设计框架中使用,并且不能与其他设计原则相冲突。
(2)软件可靠性设计在满足提高软件质量要求的前提下,以提高和保障软件可靠性为最终目标。
(3)软件可靠性设计应确定软件的可靠性目标,不能无限扩大化,并且排在功能度、用户需求和开发费用之后考虑。

可靠性测试的目的:发现软件系统缺陷/为软件使用和维护提供可靠依据/确认软件是否达到可靠性的定量要求

可靠性设计技术主要有容错设计、检错设计和降低复杂度设计等技术。
1.容错设计技术
常用的软件容错技术主要有恢复块设计、N版本程序设计和冗余设计三种方法。
(1)恢复块设计。
一个恢复块包含有若干个功能相同、设计差异的程序块文本,每一时刻有一个文本处于运行状态。一旦该文本出现故障,则用备份文本加以替换,从而构成“动态冗余”。软件容错的恢复块方法就是使软件包含有一系列恢复块。

(2)N版本程序设计。
N版本程序的核心是通过设计出多个模块或不同版本,对于相同初始条件和相同输入的操作结果,实行多数表决,防止其中某一软件模块/版本的故障提供错误的服务,以实现软件容错。为使此种容错技术具有良好的结果,必须注意以下两个方面。
①使软件的需求说明具有完全性和精确性。
②设计全过程的不相关性。

(3)冗余设计。
改善软件可靠性的一个重要技术是冗余设计。在硬件系统中,在主运行的系统之外备用额外的元件或系统,如果出现一个元件故障或系统故障,则立即更换冗余的元件或切换到冗余的系统,则该硬件系统仍可以维持运行。在软件系统中,冗余技术的运用有所区别。如果采用相同两套软件系统作为互为备份,其意义不大,因为在相同的运行环境中,一套软件出故障的地方,另外一套也一定会出现故障。软件的冗余设计技术实现的原理是在一套完整的软件系统之外,设计一种不同路径、不同算法或不同实现方法的模块或系统作为备份,在出现故障时可以使用冗余的部分进行替换,从而维持软件系统的正常运行。

2.检错技术
采用检错设计技术要着重考虑几个要素:检测对象、检测延时、实现方式和处理方式。
(1)检测对象:包含两个层次的含义,即检测点和检测内容。在设计时应考虑把检测点放在容易出错的地方和出错对软件系统影响较大的地方;检测内容选取那些有代表性的、易于判断的指标。
(2)检测延时:从软件发生故障到被自检出来是有一定延时的,这段延时的长短对故障的处理是非常重要的。因此,在软件检错设计时要充分考虑到检测延时。如果延时长到影响故障的及时报警,则需要更换检测对象或检测方式。
(3)实现方式:最直接的一种实现方式是判断返回结果,如果返回结果超出正常范围,则进行异常处理。计算运行时间也是一种常用的技术,如果某个模块或函数运行超过预期的时间,可以判断出现故障。另外,还有置状态标志位等多种方法,自检的实现方式要根据实际情况来选用。
(4)处理方式:大多数检错采用“查出故障一停止软件系统运行一报警”的处理方式,但也有采用不停止或部分停止软件系统运行的情况,这一般由故障是否需要实时处理来决定。

3.降低复杂度设计
降低复杂度设计的思想就是在保证实现软件功能的基础上,简化软件结构,缩短程序代码长度,优化软件数据流向,降低软件复杂度,从而提高软件可靠性。

第 18 章:软件的知识产权保护

软件著作权:
职务作品:
为完成单位工作任务所创作的作品,称为职务作品。如果该职务作品是利用单位的物质技术条件进行创作,并由单位承担责任的;或者有合同约定,其著作权属于单位。那么作者将仅享有署名权,其他著作权归单位享有。
其他职务作品,著作权仍由作者享有,单位有权在业务范围内优先使用,并且在两年内未经单位同意,作者不能够许可其他人、单位使用该作品。

著作权人的确定:
著作权法在认定著作权人时,是根据创作的事实进行的,而创作就是指直接产生文学、艺术和科学作品的智力活动。而为他人创作进行组织,提供咨询意见、物质条件或者进行其他辅助工作,不属于创作的范围,不被确认为著作权人。
如果在创作的过程中,有多人参与,那么该作品的著作权将由合作的作者共同享有。合作的作品是可以分割使用的,作者对各自创作的部分可以单独享有著作权,但不能够在侵犯合作作品整体的著作权的情况下行使。
如果遇到作者不明的情况,那么作品原件的所有人可以行使除署名权以外的著作权,直
到作者身份明确

18.1.3 著作权

根据著作权法及实施条例规定,著作权人对作品享有 5 种权利。
发表权:即决定作品是否公之于众的权利。
署名权:即表明作者身份,在作品上署名的权利。
修改权:即修改或者授权他人修改作品的权利。
保护作品完整权:即保护作品不受歪曲、篡改的权利。
使用权、使用许可权和获取报酬权、转让权:即以复制、表演、播放、展览、发行、摄制电影、电视、录像或者改编、翻译、注释、编辑等方式使用作品的权利;以及许可他人以上述方式使用作品,并由此获得报酬的权利。

1.著作权保护期限根据著作权法相关规定,著作权的保护是有一定期限的。
① 著作权属于公民。署名权、修改权、保护作品完整权的保护期没有任何限制,永远属于保护范围。而发表权、使用权和获得报酬权的保护期为作者终生及其死亡后的 50 年(第50 年的 12 月 31 日)。作者死亡后,著作权依照继承法进行转移。
② 著作权属于单位。发表权、使用权和获得报酬权的保护期为 50 年(首次发表后的第 50 年的 12 月 31 日),若 50 年内未发表的,不予保护。但单位变更、终止后,其著作权由承受其权利义务的单位享有。

2.使用许可当
第三方需要使用时,需得到著作权人的使用许可,双方应签订相应的合同可。合同的有效期限不超过 10年,期满时可以续签
不牟利,不同支付报酬

18.3 商标法及实施条例

注册商标的有效期是 10 年,若商标注册人死亡或者终止,自死亡或终止之日起 1 年期满,而没有继续办理转移手续,任何人都可以向商标局申请注销该注册商标

著作权与邻接权:专利期 50 年,即从发表到第 50 年的 12 月 31 日 专利权:发明专利 20 年,实用新型和外观设计专利 10 年,均以申请日算起。侵 权专利承担的法律责任:停止侵权、公开道歉、赔偿损失 商标权:有效期 10 年,自核准注册之日算起。有效期满前继续使用的,提前 6 个月申请,如果再次期间没有申请,可以给与 6 个月宽限期。宽限期满未申请, 则注销注册商标

第 19 章:标准化知识

19.2.1 标准分级

国家标准、行业标准、地方标准和企业标准。
国标:
例如:GB(或 GB/T):

行标:
IEEE:电气电子工程师学会标准。
GJB:中华人民共和国国家军用标准,由国防科学技术工业委员会批准,适合于国防部门和
军队。
DOD-STD(Department OfDefense STanDards):美国国防部标准,适用于美国国防部门。
MIL-S(MILitary Standards):美国军用标准,适用于美国军队内部。
SJ:中国电子行业标准

地方标准:
ARS:非洲地区标准,由非洲地区标准化组织制定。
EN:欧洲标准,由欧洲标准化委员会制定。
PAS:泛美标准,由泛美技术标准委员会制定。
在国内,地方标准是指由地方行政主管部门制定,仅适用于本地的标准,其标准代号一
般以 DB 开头。根据《中华人民共和国标准化法》,地方标准由省、自治区、直辖市标准化
行政主管部门制定,并报国务院标准化行政主管部门和国务院有关行政主管部门备案。

企业标准:
《GB/T 1 标准化工作导则》规定,企业标准以 Q 字开头。

第 20 章 架构师管理实践

20.1 基于ODP的架构师管理实践

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mcdaT618-1665920141331)(E:\Desktop\rk\rk1\image\image-20221016080930266.png)]

系统构想阶段,架构师合理的介入,有以下好处。
(1)有利于使系统架构师本身对系统的看法更加全面、准确。
(2)有利于统一系统开发人员对系统的看法。
(3)有利于正确确定需求的优先次序。
(4)通过系统构想,可以在最大程度上提高客户对设计等过程的参与程度,更好地与客户沟通。

系统构想:
系统构想是指一个系统开发人员与系统用户之间共同的协议

需求分析:
需求一般定义系统的外部行为和外观及用户信息,而不用设计系统的内部结构。外部行为包括了用来保证外部行为能够完成而所需的内部行为(例如持续性或计算)。外观包括用户界面的布局和导航,用户信息包含用户概念数据结构及关系模型。

系统架构设计:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BErQzjuj-1665920141331)(E:\Desktop\rk\rk1\image\image-20221016081816489.png)]

20.1.2系统转换的方式

系统转换可分为直接转换、平行转换、分段转换和分批转换。
(1)直接转换。直接转换是当新系统安装完毕能够进行工作后,立即停止旧系统的运行,让新系统投入运行的转换方式。
(2)平行转换。平行转换是新旧系统共同工作一段时间,当证实新系统有较高的可靠性后,再停止旧系统工作的转换方式。
(3)分段转换。分段转换时一次只用新系统的部分功能去替换旧系统的相应部分,逐步完成新系统替换旧系统的转换方式。
(4)分批转换。分批转换是把新系统在小范围内使用,然后再全部推广的转换方式。
以上几种系统转换方式各有各的特点,应根据系统规模的大小、难易和复杂的程度以及企业的具体情况决定系统转换时采用哪种方式。

系统移植的方法有三种:第一种是不修改已有的软件,可以使用的方法有高位互换、仿真功能和虚拟机(Virtual Machine)功能;第二种是修改软件,就是把已有软件资源即程序、数据、计算机应用方法及各种说明书转换为与新机器具有匹配性的软件;第三种是重编软件,有从逻辑设计开始、从程序设计开始和从编程开始三种开发方式。

20.2 架构师的管理实践

20.2.1 VRAPS组织管理原则

VRAPS是为实践软件架构的组织管理原则提出的,包括构想、节奏、预见、协作和简化5个相关联的原则。(vision,rhythm,anticipation,partner,simplifaction)
(1)构想原则:说明了如何向架构的受益人描述一幅一致的、有约束力和灵活的未来图景。
(2)节奏原则:刻画了一种在整个组织范围内的协调程度,即定期地根据可预测的速度、内容和质量对制品生产进行检查与规划。
(3)预见原则:要在预测未来与检查并适应现状之间做出平衡。
(4)协作原则:解决了如何识别对架构成功关键的团体,以及如何确保这些合作伙伴的有效支持。
(5)简化原则:要求理解组织的结构,了解架构最小的基本特征并最小化架构。

20.2.2 概念框架

准则用于判断每项原则的实施效果如何。
模式描述了开发和使用软件架构时可能遇到的常见问题和解决方法,能够帮助组织改进原则。
反模式则描述了组织在实践中可能遇到的陷阱。

第 21 章 层次式架构设计

软件体系结构可定义为:软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理,是构建于软件系统之上的系统级复用。

20.2表现层框架设计

20.2.1使用MVC模式设计表现层

MVC是一种目前广泛流行的软件设计模式。
(1)控制器(Controller):该部分是用户界面与Model的接口。
(2)模型(Model):应用程序的主体部分。
(3)视图(View):用户看到并与之交互的界面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gwbjyqev-1665920141332)(image/image-20221016084058176.png)]

基于XML界面管理技术,包括界面配置、界面动态生成和界面定制三部分,如图16-3所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-joeXlLwX-1665920141335)(image/image-20221016084239086.png)]

界面配置是对用户界面的静态定义,通过读取配置文件的初始值对界面配置。由界面配置对软件功能进行裁剪、重组和扩充,以实现特殊需求。
界面定制是对用户界面的动态修改过程,在软件运行过程中,用户可按需求和使用习惯,对界面元素的属性进行修改。软件运行结束,界面定制的结果被保存。
系统通过DOMAPI读取XML配置文件的表示层信息,通过数据存取类读取数据库中的数据层信息,运行时由界面元素动态生成界面。界面配置和定制模块在软件运行前后修改配置文件、更改界面内容。

20.3.4 业务逻辑层框架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hwUu29cx-1665920141336)(image/image-20221016084454739.png)]

在业务容器中,业务逻辑是按照Domain Model-Service-Control思想来实现的。
(1)Domain Model是领域层业务对象,它仅仅包含业务相关的属性。
(2)Service是业务过程实现的组成部分,是应用程序的不同功能单元,通过在这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。这种具有中立的接口定义(没有强制绑定到特定的实现上)的特征称为服务之间的松耦合。松耦合系统的好处有两点,一是它的灵活性,二是当组成整个应用程序的每个服务的内部结构和实现逐渐地发生改变时,它能够继续存在。
(3)Control服务控制器,是服务之间的纽带,不同服务之间的切换就是通过它来实现的。通过服务控制器控制服务切换可以将服务的实现和服务的转向控制分离,提高了服务实现的灵活性和重用性。

20.4数据访问层设计(持久层架构设计)

20.4.15种数据访问模式

1.在线访问
在线访问是最基本的数据访问模式,也是在实际开发过程中最常采用的。
如图16-8所示,这种数据访问模式会占用一个数据库连接,读取数据,每个数据库操作都会通过这个连接不断地与后台的数据源进行交互。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pNDJZgn7-1665920141336)(image/image-20221016084735509.png)]

2.Data Access Object如图16-9所示,DAO模式是标准J2EE设计模式之一,开发人员常常用这种模式将底层数据访问操作与高层业务逻辑分离开。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zLqYL1wz-1665920141337)(image/image-20221016084850230.png)]

3.Data Transfer Object如图16-10所示,Data Transfer Object是经典EJB设计模式之一。DTO本身是这样一组对象或是数据的容器,它需要跨不同的进程或是网络的边界来传输数据。这类对象本身应该不包含具体的业务逻辑,并且通常这些对象内部只能进行一些诸如内部一致性检查和基本验证之类的方法,而且这些方法最好不要再调用其他的对象行为。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QjtJJnBI-1665920141338)(image/image-20221016085029983.png)]

4.离线数据模式
离线数据模式是以数据为中心,数据从数据源获取之后,将按照某种预定义的结构(这种结构可以是SDO中的Data图表结构,也同样可以是ADO.NET中的关系结构)存放在系统中,成为应用的中心。

5.对象/关系映射(Object/Relation Mapping,O/R Mapping)
在最近几年,采用OR映射的指导思想来进行数据持久层的设计似乎已经成了一种潮流。对象/关系映射的基本思想来源于这样一种现实:大多数应用中的数据都是依据关系模型存储在关系型数据库中;而很多应用程序中的数据在开发或是运行时则是以对象的形式组织起来的。那么,对象/关系映射就提供了这样一种工具或是平台,能够帮助将应用程序中的数据转换成关系型数据库中的记录;或是将关系数据库中的记录转换成应用程序中代码便于操作的对象。

ORM(Object-Relation Mapping)在关系型数据库和对象之间作一个映射,这样,在具体操作数据库时,就不需要再去和复杂的SQL 语句打交道,只要像平时操作对象一样操作即可。

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲地使用对象编程思维来操纵数据库。它不仅提供了从Java类到数据表之间的映射,还提供了数据查询和恢复机制。相对于使用JDBC和SQL来手工操作数据库,Hibernate可以大大减少操作数据库的工作量。另外,Hibernate 可以利用代理模式来简化载入类的过程,这将大大减少利用Hibermate SQL从数据库提取数据的代码的编写量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DMMkLPXL-1665920141339)(image/image-20221016085516981.png)]

Hibernate不用编写sql语句;迁移/移植好.但是开发难度大,得花时间学习,优化sql语言比较难
mybits入门简单,程序员易于上手,节约开发成本,但得写sql,对sql的优化比较容易,适用于开发需求变化频繁的系统

第 22 章 面向方面的编程

要一种新的程序设计方法从更高的层次上对软件系统进行抽象,将传统的按功能或按对象划分程序模块的方法转化为按系统特征划分程序模块,这就是AOP的基本思想。

22.1.2面向方面的原因

1.代码分散现象
2.关于代码分散的分析
一个类通过它的方法提供一个或多个服务。在同一个类中,聚集可用的服务是相对容易的。然而,一旦这些服务被若干个类所使用,将对这些方法的调用聚集在一起并重新构建这个应用程序会变得困难。因此,一个基本的服务在应用程序中到处被调用就没有什么奇怪的了。
3.一个模块化的新因素
AOP主要的贡献在于在某一方面提供了一种融合代码的方式——否则这些代码会分散在整个应用程序中。
方面的定义:一个设计来用于捕捉应用程序横切面功能的程序单位。
它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为Aspect,即方面。

实现AOP的技术特性却是相同的。
(1)join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。
它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。
(2)point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。
(3)advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。
(4)aspect(方面):point cut 和advice 结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多的是对象间横向的关系。
(5)introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的AOP工具又将其称为mixing。

22.1.7当前的AOP技术

当前,各种AOP技术层出不穷,其中相当成熟完善适用于商业开发的AOP技术主要包括AspectJ、AspectWerkz、JBoss AOP和Spring AOP,这些皆适合用于商业开发中的开源项目。AOP是一种概念,不同的技术可以有不同的实现。
在语法方面,AspectWerkz、JBoss AOP和Spring AOP都在没有改变Java语言语法的情况下加入了方面语义,而AspectU则对Java 语言进行了扩展。
在声明方式方面,Aspectu在代码中对方面进行声明。AspectWerkz和JBossAOP支持用元数据对Java代码进行注释,或者在独立的XML文件中对方面进行声明。在SpringAOP中,则完全用XML对方面进行声明,比起JBossAOP和AspectWerkz,SpringAOP提供了更加精细的配置。
在性能方面,AspectU通过编译时对目标二进制类的增强获得面向方面能力,所以在编译时会带来开销,运行时可获得更快的速度。JBossAOP和SpringAOP基于拦截技术则在运行时有更多的工作要做,对比之下,AspectU的构建时开销最多,AspectWerkz次之,JBossAOP再次,SpringAOP没有构建时开销。
下面将重点介绍AspectJ和SpringAOP的概念构造与实践。

22.2AspectJ

22.2.1AspectJ概述

AspectJ既是一个语言规范,又是一个AOP语言实现。语言规范部分定义了多种语言构造以及它们支持面向方面范型的方式;语言实现部分则提供了编译、调试及从代码生成文档的工具。
AspectU的语言构造是从Java语言中扩展而来的,因此所有合法的Java程序也都是合法的AspectJ程序。Aspect]编译器生成的是符合Java字节码规范的.class文件,这使得所有符合规范的Java虚拟机都可以解释、执行其所生成的代码。
AspectJ也许是已知最好的,并且应用最广泛的AOP实现

23.UML建模与架构文档化

23.2 UML基础

定义了10种视图,并将其分为如下4类。
(1)用例图(use case diagram)。从外部用户的角度描述系统的功能,并指出功能的执行者。
(2)静态图。包括类图(class diagram)、对象图(object diagram)和包图(package diagram)。类图描述系统的静态结构,类图的节点表示系统中的类及其属性和操作,类图的边表示类之间的联系,包括继承、关联、依赖和聚合等。对象图是类图的一个实例,它描述在某种状态下或在某一时间段,系统中活跃的对象及其关系。包图描述系统的分解结构,它表示包(package)以及包之间的关系。包由子包及类组成。包之间的关系包括继承、构成与依赖关系。
(3)行为图。包括交互图(interactive diagram)、状态图(statechart diagram)与活动图(active diagram),它们从不同的侧面刻画系统的动态行为。交互图描述对象之间的消息传递,它又可分为顺序图(sequence diagram)与合作图(collaboration diagram)两种形式。顺序图强调对象之间消息发送的时间序。合作图更强调对象间的动态协作关系。合作图也可通过消息序号来表示消息传递的时间序,只不过这种表示不如顺序图那样直观。状态图描述类的对象的动态行为,它包含对象所有可能的状态、在每个状态下能够响应的事件以及事件发生时的状态迁移与响应动作。活动图描述系统为完成某项功能而执行的操作序列,这些操作序列可以并发和同步。活动图中包含控制流和信息流。
(4)实现图(implementation diagram)。包括构件图(component diagram)与部署图(deployment diagram),它们描述软件实现系统的组成和分布状况。构件图描述软件实现系统中各组成部件以及它们之间的依赖关系。部署图描述作为软件系统运行环境的硬件及网络的物理体系结构,其节点表示实际的计算机和设备,边表示节点之间的物理连接关系,也可显示连接的类型及节点之间的依赖性。

(1).用例图

用例的元素

(1) 参与者

(2)用例之间的关系:

用例除了与参与者有关联(association)关系外,用例之间也存在着一定的关系(relationship),如泛化(generalization)关系、包含(include)关系、扩展(extend)关系等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UxI3kkxo-1665920141339)(image\image-20200911222901728.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XoUzPLjO-1665920141340)(image\image-20200911223134488.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-moAOihfm-1665920141340)(image\image-20200911223157824.png)]

(2)交互图

交互图(interaction diagram)是用来描述对象之间以及对象与参与者(actor)之间的动态协作关系以及协作过程中行为次序的图形文档。它通常用来描述一个用例的行为,显示该用例中所涉及的对象和这些对象之间的消息传递。交互图包括顺序图(sequence diagram)和协作图(collaboration diagram)两种形式。顺序图着重描述对象按照时间顺序的消息交换,协作图着重描述系统成分如何协同工作。顺序图和协作图从不同的角度表达了系统中的交互和系统的行为,它们之间可以相互转化。一个用例需要多个顺序图或协作图,除非特别简单的用例。
交互图可以帮助分析人员对照检查每个用例中所描述的用户需求,如这些需求是否已经落实到能够完成这些功能的类中去实现,提醒分析人员去补充遗漏的类或方法。

(3) 类图和对象图

一般说来,类之间的关系有关联、聚集、组合、泛化和依赖等,下面将对这些关系进行详细说明。

1.) 关联(association)是模型元素间的一种语义联系,它是对具有共同的结构特性、行为特性、关系和语义的链(link)的描述。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hoodSbYS-1665920141341)(image\image-20200912003342069.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CHoPtgm0-1665920141342)(image\image-20200912003429681.png)]

2)聚集和组合
聚集(aggregation)是一种特殊形式的关联。聚集表示类之间整体与部分的关系。在对系统进行分析和设计时,需求描述中的“包含”、“组成”、“分为……部分”等词常常意味着存在聚集关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7uQyMg8U-1665920141343)(image\image-20200912004207925.png)]

组合(composition)表示的也是类之间的整体与部分的关系,但组合关系中的整体与部分具有同样的生存期。也就是说,组合是一种特殊形式的聚集。

3)泛化关系
泛化(generalization)定义了一般和特殊元素之间关系,如果从面向对象程序设计语言的角度来说,类与类之间的泛化关系就是平常所说的类与类之间的继承关系。
UML中用一头为空心三角形的连线表示泛化关系。

4)依赖关系
假设有两个元素X、Y,如果修改元素X的定义可能会导致对另一个元素Y的定义的修改,则称元素Y依赖于元素X。

5)类图
如图所示为学校内主要对象的类图。学校包含若干学生,是由多个系组成。每个系开设若干课程,学生参加不同课程学习(管联)关系;老师教一门或多门课程。在一个系中,有一个老师是领导,系包含若干老师。类图以直观、抽象形式展示了不同对象之间关系。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F57ewdIN-1665920141345)(image\image-20200912004444653.png)]

(4)状态图和活动图

状态图(state chart diagram)主要用于描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,引起状态转移的事件(event),以及因状态转移而伴随的动作(action)。

活动图可以用于描述系统的工作流程和并发行为。活动图其实可看作状态图的特殊形式,活动图中一个活动结束后将立即进入下一个活动(在状态图中状态的转移可能需要事件的触发)。

下面讨论活动图中的几个基本概念:活动、泳道、分支、分叉和汇合、对象流。
1)活动
活动(activity)表示的是某流程中的任务的执行,它可以表示某算法过程中语句的执行。在活动图中需要注意区分**动作状态(action state)和活动状态(activity state)**这两个概念。动作状态是原子的,不能被分解,没有内部转移,没有内部活动,动作状态的工作所占用的时间是可忽略的。动作状态的目的是执行进入动作(entry action),然后转向另一个状态。活动状态是可分解的,不是原子的,其工作的完成需要一定的时间。可以把动作状态看作活动状态的特例。

2)泳道
泳道(swimlane)是活动图中的区域划分,根据每个活动的职责对所有活动进行划分,每个泳道代表一个责任区。泳道和类并不是一一对应的关系,泳道关心的是其所代表的职责,一个泳道可能由一个类实现,也可能由多个类实现。
3)分支
在活动图中,对于同一个触发事件,可以根据不同的警戒条件转向不同的活动,每个可能的转移是一个分支(branch)。
4)分叉和汇合
分支表示的是从多种可能的活动转移中选择一个,如果要表示系统或对象中的并发行为,则可以使用分叉(fork)和汇合(join)这两种建模元素。分叉表示两个或多个控制流经过分叉后,这些控制流并发进行;汇合正好与分叉相反。
5)对象流
在活动图中可以出现对象。对象可以作为活动的输入或输出。活动图中的对象流表示活动和对象之间的关系,如一个活动创建对象(作为活动的输出)或使用对象(作为活动的输入)等。

(5)构件图

构件(component)是系统中遵从一组接口且提供其实现的物理的、可替换的部分。

构件图(componentdiagram)则显示一组构件以及它们之间的相互关系,包括编译、链接或执行时构件之间的依赖关系。图6-14所示是一个构件图的例子,表示.html文件、.exe文件、dll文件这些构件之间的相互依赖关系。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5p8JekPu-1665920141345)(image\image-20200912010240308.png)]

构件就是一个实际文件,可以有以下几种类型:
(1)部署构件(deploymentcomponent),如dll文件、exe文件、COM+对象、CORBA对象、EJB、动态Web页和数据库表等。
(2)工作产品构件(work productcomponent),如源代码文件、数据文件等,这些构件可以用来产生部署构件。
(3)执行构件(execution component),也就是系统执行后得到的构件。

(6)部署图

部署图也称配置图、实施图,它可以用来显示系统中计算结点的拓扑结构和通信路径与结点上运行的软构件等。一个系统模型只有一个部署图,部署图常用于帮助理解分布式系统。

23.3基于UML的软件开发过程

23.3.1开发过程概述

UML是独立于软件开发过程的,即UML能够在几乎任何一种软件开发过程中使用。
迭代的渐进式软件开发过程包含4个阶段,即初启、细化、构建和部署。

1.初启

在初启阶段,软件项目的发起人确定项目的主要目标和范围,并进行初步的可行性分析和经济效益分析。

2.细化

细化阶段的开始标志着项目的正式确立。软件项目组在此阶段需要完成以下工作:
(1)**初步的需求分析。**采用UML的用例描述目标软件系统所有比较重要、比较有风险的用例,利用用例图表示参与者与用例以及用例与用例之间的关系。采用UML的类图表示目标软件系统所基于的应用领域中的概念与概念之间的关系。这些相互关联的概念构成领域模型。领域模型一方面可以帮助软件项目组理解业务背景,与业务专家进行有效沟通;另一方面,随着软件开发阶段的不断推进,领域模型将成为软件结构的主要基础。如果领域中含有明显的流程处理成分,可以考虑利用UML的活动图来刻画领域中的工作流,并标识业务流程中的并发、同步等特征。
(2)初步的高层设计。如果目标软件系统的规模比较庞大,那么经初步需求分析获得的用例和类将会非常多。此时,可以考虑根据用例、类在业务领域中的关系,或者根据业务领域中某种有意义的分类方法将整个软件系统划分为若干个包,利用UML的包图刻画这些包及其间的关系。这样,用例、用例图、类、类图将依据包的划分方法分属于不同的包,从而得到整个目标软件系统的高层结构。
(3)部分的详细设计。对于系统中某些重要的或者风险比较高的用例,可以采用交互图进一步探讨其内部实现过程。同样,对于系统中的关键类,也可以详细研究其属性和操作,并在UML类图中加以表现。因此,这里倡导的软件开发过程是根据软件元素(用例、类等)的重要性和风险程度确立优先细化原则,建议软件项目组优先考虑重要的、比较有风险的用例和类,不能将风险的识别和解决延迟到细化阶段之后。
(4)部分的原型构造。在许多情形下,针对某些复杂的用例构造可实际运行的原型是降低技术风险、让用户帮助软件项目组确认用户需求的最有效的方法。为了构造原型,需要针对用例生成详尽的交互图,对所有相关类给出明确的属性和操作定义。
综上所述,在细化阶段可能需要使用的UML语言机制包括描述用户需求的用例及用例图、表示领域概念模型的类图、表示业务流程处理的活动图、表示系统高层结构的包图和表示用例内部实现过程的交互图。

3.构建

在构造阶段,开发人员通过一系列的迭代完成对所有用例的软件实现工作,在每次迭代中实现一部分用例。以迭代方式实现所有用例的好处在于,用户可以及早参与对已实现用例的实际评价,并提出改进意见。这样可有效降低大型软件系统的开发风险。在实际开始构造软件系统之前,有必要预先制定迭代计划。计划的制定需遵循如下两项原则:
(1)用户认为业务价值较大的用例应优先安排。
(2)开发人员评估后认为开发风险较高的用例应优先安排。
在迭代计划中,要确定迭代次数、每次迭代所需时间以及每次迭代中应完成(或部分完成)的用例。
每次迭代过程由针对用例的分析、设计、编码、测试和集成5个子阶段构成。在集成之后,用户可以对用例的实现效果进行评价,并提出修改意见。这些修改意见可以在本次迭代过程中立即实现,也可以在下次迭代中再予以考虑。
构建过程中,需要使用UML的交互图来设计用例的实现方法。为了与设计得出的交互图协调一致,需要修改或精化在细化阶段绘制的作为领域模型的类图,增加一些为软件实现所必需的类、类的属性或方法。
在构建阶段的每次迭代过程中,可以对细化阶段绘出的包图进行修改或精化,以便包图切实反映目标软件系统最顶层的结构划分状况。
综上所述,在构建阶段可能需要使用的UML语言机制包括:
(1)用例及用例图。它们是开发人员在构造阶段进行分析和设计的基础。
(2)类图。在领域概念模型的基础上引进为软件实现所必需的类、属性和方法。
(3)交互图。表示针对用例设计的软件实现方法。
(4)状态图。表示类的对象的状态-事件-响应行为。
(5)活动图。表示复杂的算法过程,尤其是过程中的并发和同步。
(6)包图。表示目标软件系统的顶层结构。
(7)构件图。
(8)部署图。

4.部署

在部署阶段,开发人员将构造阶段获得的软件系统在用户实际工作环境(或接近实际的模拟环境)中试运行,根据用户的修改意见进行少量调整。

23.3.3面向对象的设计方法

面向对象的软件设计过程如图6-21所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ufz9Dwzw-1665920141346)(image\image-20200912025008470.png)]

1.设计用例实现方案

UML的交互图(顺序图、协作图)适于用例实现方案的表示。该设计方法包含如下三个步骤:
(1)提取边界类、实体类和控制类。
边界类用于描述目标软件系统与外部环境之间的交互,并负责实现如下功能:
·界面控制。包括输入数据的格式及内容转换、输出结果的呈现以及软件运行过程中界面的变化写切换等。
·外部接口。实现目标软件系统与外部系统或外部设备之间的信息交流和互操作。主要关注跨越目标软件系统边界的通信协议。
·环境隔离。将目标软件系统与操作系统、数据库管理系统、应用服务器中间件等境软件进行交互的功能与特性封装于边界类之中,使目标软件系统的其余部分尽可能地独立于环境软件。
在UML类图中,边界类往往附加UML构造型<>作为特别标识。
实体类表示目标软件系统中具有持久意义的信息项及其操作。实体类的操作具有“内向收敛”特征,它们仅向目标软件系统的其余部分提供读/写信息项内容的必要的操作接口,并不涉及业务逻辑处理。实体类的UML构造型为<>。

控制类作为完成用例任务的责任承担者,协调、控制其他类共同完成用例规定的功能或行为。对于比较复杂的用例,控制类通常并不处理具体的任务细节,但是它应知道如何分解任务,如何将子任务分派给适当的辅助类,以及如何在辅助类之间进行消息传递和协调。控制类的UML构造型为<>。

通常情况下,执行者与用例之间的一种通信连接对应一个边界类。但是,如果两个以上的用例与同一执行者交互,并且这些交互具有共同的行为、完成相同或类似的任务,就可以考虑用同一边界类实现用例与执行者之间的交互。这就意味着边界类的作用范围可以超越单个用例。

(2)构造交互图。

(3)根据交互图精化类图。

2.设计技术支撑方案
3.设计用户界面
4.精化设计模型

23.4 系统架构文档化

23.4.1 模型概述

软件架构用来处理软件高层次结构的设计和实施。它以精心选择的形式将若干结构元素进行装配,从而满足系统主要功能和性能需求,并满足其他非功能性需求,如可靠性、可伸缩性、可移植性和可用性。Perry和Wolfe使用一个精确的公式来表达,该公式由Boehm做了进一步修改。
软件架构={元素,形式,关系/约束}
软件架构涉及到抽象、分解和组合、风格和美学。我们用由多个视图或视角组成的模型来描述它。为了最终处理大型的、富有挑战性的架构,该模型包含5个主要的视图如图6-24所示。
·逻辑视图(logical view),设计的对象模型(使用面向对象的设计方法时)。
·过程视图(process view),捕捉设计的并发和同步特征。
·物理视图(physical view),描述了软件到硬件的映射,反映了分布式特性。
·开发视图(developmentview),描述了在开发环境中软件的静态组织结构。
架构的描述,即所做的各种决定,可以围绕着这4个视图来组织,然后由一些用例(use cases)或场景(scenarios)来说明,从而形成了第5个视图。正如将看到的,实际上软件架构部分从这些场景演进而来。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P5i2nxqV-1665920141347)(image\image-20200912034317849.png)]

24.设计模式

24.1 设计模式概述

设计模式六原则
(1)单一职责原则 一个类只做一件事,实现类要单一
(2)里氏替换原则 子类的改变不要影响父类
(3)依赖倒置原则 高层不应该依赖底层,应面向接口编程
(4)接口隔离原则 一个接口只干一件事,接口要单一
(5)迪米特法则 少知道,达到高内聚,低耦合
(6)开闭原则 对扩展开放,对修改关闭

24.1.1 设计模式的历史

Christopher Alexander将模式分为几个部分:首先是特定的情景(Context),指模式在何种状况下发生作用;其二是动机(System of Force),指问题或预期的目标;其三是解决方案(Solution),指平衡各动机或解决所阐述问题的一个构造或配置。他提出模式是表示特定的情景、动机、解决方案三个方面关系的一个规则,每个模式描述了一个在某种特定情景下不断重复发生的问题,以及该问题解决方案的核心所在。

24.1.2 为什么要使用设计模式

1.简化并加快设计
开发人员面对的问题来自不同的层次。在最底层,涉及的是单个类的接口或实现的细节问题;在最高层,涉及的是系统的整体架构的创建问题。设计模式关注的是中间层,在这一层必须保证局部化的特定的设计性质。设计模式使得软件开发人员无须从底层做起,开发人员可以重用成功的设计,可节省开发时间,同时有助于提高软件质量。
2.方便开发人员之间的通信.
利用设计模式可以更准确地描述问题及问题的解决方案,使解决方案具有一致性;也有利于开发人员可以在更高层次上思考问题和讨论方案。·例如,如果所有人都理解Factory 设计模式的意思,则开发人员可以用“建议采用Factory 设计模式来解决这个问题”这样的话来表达。
3.降低风险
由于设计模式经过很多人的使用,已被证明是有效的解决方法,所以采用设计模式可以降低失败的可能性,也有利于在复杂的系统中产生简洁、精巧的设计。
4.有助于转到面向对象技术
新技术要在一个开发机构中得到应用,一般要经历两个阶段,即技术获取阶段和技术迁移阶段。技术获取阶段较容易,但在技术迁移阶段,由于开发人员对新技术往往会有抵触或排斥心理,对新技术可能带来的效果持怀疑态度,同时由于对新技术还是一知半解,所以要在一个开发机构中进行技术迁移并不是一件容易的事。设计模式一般都是基于面向对象技术而提出的,也可应用于接口定义良好的结构化方法中。另外,设计模式是可重用的设计经验的总结,已在实际的系统中多次得到成功应用,因此通过对设计模式的研究,能够深入理解良好设计的最基本的性质,从而有助于说服开发人员采用新技术。

24.1.3 成熟的软件设计模式具有以下特性。

(1)巧妙:设计模式是一些优雅的解决方案,是在大量实践经验的基础上提炼出来的。
(2)通用:设计模式通常不依赖于某个特定的系统类型、程序设计语言或应用领域,它们是通用的。
(3)得到很好的证明:设计模式在实际系统和面向对象系统中得到广泛应用,它们并不仅仅停留在理论上。
(4)简单;设计模式通常都非常简单,只涉及很少的一些类。为了构建更多更复杂的解决方案,可以把不同的设计模式与应用代码结合或混合使用。
(5)可重用:设计模式的建档方式使它们非常易于使用,因而可方便用于任何适宜的系统。
(6)面向对象:设计模式是用最基本的面向对象机制如类、对象、多态等构造的。许多模式特别强调了某些面向对象设计擅长的领域,例如,区分接口和实现、降低各部分之间的依赖性、隔离硬件和软件等。

24.1.4 设计模式的组成元素

(1) 模式名 (2) 问题或意图 (3) 情景 (4) 动机 (5) 解决方案

(6) 示例 (7) 结果情景 (8) 基本原理 (9) 相关模式 (10) 已知应用

24.1.5 设计模式的分类

软件模式主要可分为设计模式、分析模式、组织和过程模式等,每一类又可细分为若干个子类。在此着重介绍设计模式,目前它的使用最为广泛。设计模式主要用于得到简洁灵活的系统设计,GoF的书中共有23个设计模式,这些模式可以按两个准则来分类:一是按设计模式的目的划分,可分为创建型、结构型和行为型三种模式;二是按设计模式的范围划分,即根据设计模式是作用于类还是作用于对象来划分,可以把设计模式分为类设计模式和对象设计模式。
1.创建型模式
该类型模式是对对象实例化过程的抽象,它通过采用抽象类所定义的接口,封装了系统中对象如何创建、组合等信息。
2.结构型模式
该类模式主要用于如何组合已有的类和对象以获得更大的结构,一般借鉴封装、代理、继承等概念将一个或多个类或对象进行组合、封装,以提供统一的外部视图或新的功能。
3.行为型模式
该类模式主要用于对象之间的职责及其提供的服务的分配,它不仅描述对象或类的模式,还描述它们之间的通信模式,特别是描述一组对等的对象怎样相互协作以完成其中任一对象都无法单独完成的任务。

24.2设计模式实例

24.2.1创建性模式

.Abstract Factory(抽象工厂)。
·Builder(构建器)。
·Factory Method(工厂方法)。
·Prototype(原型)。·Singleton(单独)。

记忆:

单抽工建原

1.singleton

确保一个类只有一个实例,并且提供了该类的全局访问入口,它可以确保使用这个类实例的所有对象使用相同的实例

2.Abstract Factory模式

为创建一系列相关或相互依赖的对象提供了一个接口。

3.factory

定义了创建对象的接口,它允许子类决定实例化哪个类

4.Builder 模式
Builder模式将复杂对象的构建与其表示相分离,这样相同的构造过程可以创建不同的对象。

5.prototype

允许对象在不了解要创建对象的确切类和如何创建等细节情况下创建自定义对象

24.2.2结构性模式

记忆:桥代理组装适配器,享元回家装饰外观

bridge:将一个复杂组件分成两个可以相互独立但又相关的继承层级结构:功能性的抽象和内部实现

proxy:为访问控制初始化对象提供和了一个代理或者占位符对象

composite:允许创建树形层次结构来改变复杂性,同时允许结构中的每一个元素操作相同的接口

adapter:可以充当两个类之间的媒介,它可以转换一个类的接口,这样就可以被另一个类使用,这就使得具有不兼容接口的类能够协同使用

flyweight:可以通过共享对象减少系统中低级的详细的对象数目

decorator:可以在不修改对象外观和功能的前提下添加或删除对象功能

facade:为子系统中的一组接口提供了一个统一的接口

24.2.3 行为性模式

记忆:访问者写好策略备忘录,观察者迭代模板的状态,命令中介解释责任链

visitor:提供一种方便的,可维护的方法来表示在对象结构元素上要进行的操作

strategy:定义了一组能够用来表示可能行为集合的类

memento:可以保持对象状态的快照,这样对象可以在不向外界公开其内容的情况下返回到它的最初状态

observer:为组件向相关接收方广播消息提供了灵活的方法

iterator:为集合中的有序访问提供了一致的方法,而集合是独立于基础集合,并与之相分离的

template:提供了在不重写方法的前提下允许子类重载部分方法的方法

state:允许对象在内部状态变化时,变更其行为,并且修改其类

command:在对象中封装了请求,这样就可以保存命令,将命令传递给方法以及像其他任何对象一样返回该命令

mediator:通过引入一个能够管理对象间消息分布的对象,简化了系统中对象间的通信

interpreter:可以解释定义其语法表示的语言,还提供了用表示来解释语言中的语句的解释器

chain of responsibility:可以在系统中建立一个链,这样消息在首先接收到它的级别处被处理,或者可以定位到可以处理他的对象

25. XML技术

25.1 XML概述

可扩展标记语言(XML)是标准通用标记语言(Standard Generalized Markup Language,SGML)的一个子集:XML包含了很多SGML特性,但是比SGML要简单得多。像SGML一样,可以用XML来开发一种标记语言,它的元素和属性多是为专门行业和产业而定义的。

XML和HTML都支持统一字符编码协会(Unicode Consortium)制定的通用字符集(Universal Character Set,UCS),它不仅包括特殊字符、标点和数学符号,还包括了非英语语言的字符和字母表,这使得XML成为了国际标准,这些字符和符号被认为是实体。

XML包括如下特点和功能:
(1)XML允许各种各样的文档显示类型,不仅可以显示在许多计算机平台上,而且可以显示蜂窝电话、掌上电脑等其他设备上。程序员可以使用任何编程语言或脚本语言来定义文档。
(2)XML支持但并不需要DTD(Document Type Definition,文档类型定义)。如果你使用DTD,就要通知XML编辑器严格地按照DTD中设定的规则来处理文档。
(3)XML的支持标准(XLink和XPointer)支持比HTML更为复杂的链接。在HTML和XML中你只能链接到一个URL。然而在XML支持标准中可以同时使用几个或者一组链接。
(4)XML标准支持打印文档和电子文档以及其他的为不同用户定义了不同内容和外观的文档。
(5)XML支持客户端或者服务端计算机上的进程,这就允许开发人员分配资源和随时地节省资源。

25.1.1 XML基本语法

1.几乎所有的XML标签都是大小写敏感的,且支持

2.命名:在XML中使用的结构几乎总是被命名的。

所有XML命名都必须以字母、下划线(_)或冒号(:)开头,后面跟着的是有效命名字符。有效命名字符除了前面的这些字符外,还包括数字、连字符(一)、句号(.)。在实际应用中不应该使用冒号,除非是用作命名空间修饰的分隔符(可参见本章后面的关于命名空间的相关描述)。字母并非局限于ASCI码,这一点是非常重要的,因为不说英语的人们可以把自己的语言用在标签中。
下面就是一些合法的命名:
Web、WEB、WebService;Interface、中国软件
注意前两个命名并不等同,因为XML的命名是大小写敏感的,第三个是使用建议的命名空间分隔符(冒号)的典型例子,最后一个例子提醒大家注意汉语同英语一样,都可以用于XML的命名。下面是一些非法的命名:
-Web、4Web、Web$Service

3.文档的组成:可选的序言(prolog),文档的主体(body),可选的尾声(epilog)

4.元素的写法**<web>text</web>** 或者 <web\>

5.字符串的写法:在开头成对出现"或者’

下面是一些合法的字符串表述:
“string”.‘this&apos;s a"Web Service"’
而下面则是一些不合法的字符串表述:
string.'this’s a"Web Service"

6.引用实体:

符号 解释
< <
> >
&npos;
&quote; "
&amp; &

7.属性

在起始标记或空标记中属性只允许有一个实例存在。例如,下面的例子在XL中就是非法的,因为src在一个标记中出现了两次:
<img src="abc.jpg”src=“edf.jpg”>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g8L9rrgd-1665920141347)(image\image-20220922052923388.png)]

8.空白字符

水平指标09\换行(CF)0A\回车(CR)0D\空格字符(20)

9.注释

<!–我是注释 -->

10.格式正规的文档

数据对象如果满足下列条件就是格式正规的文档。
(1)语法合乎XML规范。
(2)元素构成一个层次树,只有一个根节点。
(3)没有对外部实体的引用,除非提供了DTD。

25.3 DTD

在DTD中主要定义以下几个方面的内容:
(1)元素声明,包括元素的内容和元素的排列组合方式。
(2)实体声明。
(3)属性的种类。

<? xml version="1.0"encoding="UTF-8"standalone="no"?>
<! DOCTYPE Transaction SYSTEM "dtdl. dtd">
<Transaction>
<ContractNo>ContractNumber</ContractNo>
<ContractType>FOB</ContractType>
<contractName>ContractName</ContractName>
<ContractDate>ContractDate</ContractDate>
</Transaction>这个XML文档引用的DTD文件dtdl.dtd内容如下:
<?xml version="1.0"encoding="UTF-8"standalone="no">
<!ELEMENT ContractDate(#PCDATA)><!ELEMENT ContractName(#PCDATA)>
<!ELEMENT ContractNo(#PCDATA)>
<!ELEMENT ContractType(#PCDATA)>
<!ELEMENT Transaction(ContractNo,ContractType,ContractName,ContractDate)>]>

内部DTD和外部DTD同时使用,复的部分以内部声明为主。这样就大大提高了外部声明的重用率.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h7erqHAN-1665920141348)(image\image-20220922054437361.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zn4sKNHb-1665920141349)(image\image-20220922054540952.png)]

例子

<!DOCTYPE TVSCHEDULE [<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)><!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>
25.3.5实体的声明
DTD 实例:<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright runoob.com">XML 实例:<author>&writer;&copyright;</author>

可以把参数型实体看作在声明外部DTD时为避免重复工作提供的一种方法(参数型实体在DTD实体和元素声明处使用)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7u7Krxfg-1665920141349)(image\image-20220922055035582.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RVJMR2MC-1665920141350)(image\image-20220922055046214.png)]

<!ATTLIST 元素名称 属性名称 CDATA 属性默认值类型>

属性默认值类型
属性默认值类型有4种可选情况,下面一一介绍它们的使用时机和使用方法。
(1)#IMPLIED表明该属性可出现可不出现,声明语法:
<!ATTLIST 元素名称 属性名称 #IMPLIED>
(2)#REQUIRED 表明该属性一定要出现,声明语法:
<!ATTLIST 元素名称 属性名称 #IMPLIED>
(3)#FIXED表明该属性一定要出现,且固定为特定值,不许用其他值,声明语法:
<!ATTLIST 元素名称 属性名称 #FIXED 属性特定值>
(4)特定属性值表明该属性的默认值,当XML文档中没有显式给出该属性的取值时,取此值。当该属性的取值已经显式地给出时,则为给出值:
<–!ATTLIST 元素名称 属性名称 属性默认值>

25.4 XML Schema

DTD在制定标记语言方面历史悠久,早在XML正式标准出现以前就已经存在,当时它配合SGML来制定标记语言,是专门为SGML服务的DTD。

DTD被scheme取代的原因:

1.当XML出现之后,DTD尽管进行了很大的简化,但还是一门风格和XML完全不同的语言,不经过细致学习,根本不可能应用这种语言制定标记语言。而 schema文档是一种特殊的XML文档,它遵循XML的语法要求,避免用户再去另外学习一套语法,同时schema 语法结构简单,容易学习和使用。
2.DTD的另一个缺点是数据类型相当有限。
3.一个XML文档只能使用一个DTD文档,尽管DTD可以通过多数实体机制来部分改变这种观点

<?xml verslon="1.0"?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
</Schema>

所有的内容都添加在<Schema></Schema>当中,该程序可以作为所有schema文档的模板。关于schema的模板在语法方面总结几点:
(1)根标记必须为<Schema></Sehema>。
(2)xmlns是一个名域声明,表示Schema文档中使用的标记都是内标识为urm:sch-
emas-microsoft-com:xml-data规范所定义的,前面字符串可以当作是该规范的名字。
(3)xmtms:dt 指定了文档中有关数据类型定义的标识都来自下面规范:
urn:schemas-microsoft-com:datatypes上面的模板是一切schema文档都要遵守的一般性语法要求,下面我们将分别的从各个方面来介绍XMLSchema的一些细节知识。

25.4.2元素的定义

schema中元素的定义使用标记<Elementlype>来完成,具体的语法如下面的例子所示。
<ElementType name=“name”/>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sw3fs1sB-1665920141351)(image\image-20220922060400479.png)]

例子:

程序2文件2.XML
<?xml version=1.0"?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xm1ns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="books">
<element type="book"/>
/ElementType>
<ElementType name="book"dt:type="int"
</Schema>
下面是使用该schema的XML文档程序3。
程序3文件3.xml
<?xml version=1.0"?>
<books xmlns="x-schema:2.xml">
<book>123</book>
</books>

1.元素内容类型的指定
有的标记只能自己独立使用,有的标记必须包含其他标记作为自己的子标记,决定一个标记语言的该方面的技术是元素的内容类型。这里可以通过关键字content指定这种属性。
Content属性可以有下面的几种取值。
(1)textOnly:表示该标记只包含文本型的内容。
(2)eltOnly:表示该标记只包含元素类型的内容。
(3)empty:表示是一个空元素。
(4)mixed:表示上面的各种情况。
2.标记的子标记的出现次数
一个标记子标记的出现次数有minOccurs、maxOccurs两个属性来设置,它有如下的
.几种设置情况。
(1)子标记可以出现不止一次,即可以出现一次或多次,如:
maxOccurs=“*”
如果一个标记的子标记可以出现一次或多次时,只要指定该标记的maxOccurs的属性值为“*”即可。
(2)只能出现一个,如:
maxOccurs=“1”

3.标记的子标记出现的次序
一个标记的子标记出现次序由一个属性order来控制,通常情况下该属性有三种取值。
(1)order=“one”
如果一个标记设置了该属性,则表示此标记的子标记是它子标记列表中的任一个。
(2)order=“many”
如果一个标记设置了该属性,则表示该标记的所有子标记可以按任意的顺序出现任意的次数。
(3)order=“seq”
如果一个标记设置了该属性,则表示该标记的所有子标记必须按照定义好的次序出现。
4.元素的开放性和封闭性
元素的开放性和封闭性指的是元素能否包含定义以外子元素的问题,该方面的功能由属性model来描述,当该属件的值是open时,该元素是开放的,除了可以包含自己定义的子标记外,还可以包含其他的标记。当该属性的值为close时,元素除了包含自己定义时定义的子标记外,不能再包含别的标记。下面通过一个例子程序来演示该属性的应用。

SA markdown相关推荐

  1. python之markdown转html

    python之markdown转html 为了方便,定义一个markdown转html的函数,直接调用即可 import markdowndef md2html(mdstr):exts = ['mar ...

  2. 【Markdown】Typora中文手册

    我着重参考官方手册写的,也参考了网上的一些资料 : 添加了几种图表的绘制方法 详细介绍了 LaTex 数学公式的方法 好像没了,记不得了,写完挺久了 前言 大学毕业的暑期,我决定学好Markdown语 ...

  3. Markdown Emoji表情语法速查表

    文章目录 emoji-cheat-sheet Table of Contents People Nature Objects Places Symbols Uncategorized 本篇教程首次发布 ...

  4. 开源GNSS软件RTKLIB学习总结(一)MarkDown、VS配置RTKLIB、矩阵、最小二乘和Kalman滤波基本函数

    本文从昨晚写到今天上午,比较粗糙,且因为本人对GNSS和RTKLIB掌握的还很少,可能错误比较多,各位可以批判着看. 一.前言 本人是导航工程大二的学生,计划读研读博当老师,可能要和GNSS打几十年的 ...

  5. 希腊字母、拉丁字母、Markdown、拼写与读音中英对照表

    大写 小写 中文名 英文 英语音标注音 大写Markdown 小写Markdown 意义 A α 阿尔法 Alpha /'ælfə/ A \alpha 角度.系数.角加速度.第一个.电离度.转化率 B ...

  6. linux修改mysql密码sa_如何修改SA口令,数据库SA密码怎么改?

    [问题现象]安装数据库的时候设置过SA口令,安装后不记得了?有没有办法可以修改数据库SA口令? [原因分析]各版本数据库更改SA口令的方法不一样,一般MSDE2000数据库安装时没有SA口令,SQL ...

  7. lisp协议instand_分享|Linux 上 10 个最好的 Markdown 编辑器

    在这篇文章中,我们会点评一些可以在 Linux 上安装使用的最好的 Markdown 编辑器. 你可以在 Linux 平台上找到非常多的 的 Markdown 编辑器,但是在这里我们将尽可能地为您推荐 ...

  8. 【其他】将幕布文章OPML转换为Markdown的方法

    使用幕布可以快速地进行笔记中格式缩进和笔记管理等操作,但是,幕布只提供了Word.PDF.图片.HTML.OPML.思维导图的导出,以下是把幕布的大纲转换成Markdown的方法. 1.先把幕布里的文 ...

  9. 【注意事项】Markdown遇到的小问题

    写博客的目录的时候遇到了一个小问题 在博客三级标题里插入了一个超链接,在正文里看显示格式是正常的 但是文章开头的目录中却出现了显示异常的问题,把Markdown代码直接显示出来了 后来发现是文本里面[ ...

最新文章

  1. GNU Readline 库及编程简介【转】
  2. LA3135简单多路归并(优先队列)
  3. 我在定制office 2007时遇到的问题
  4. JavaScript的Cookie操作
  5. ASPNet_Compiler学习总结
  6. 电子表单设计,表单打印,表单填写,数据发布,VC++,VB,源代码组件库
  7. php post 500 ajax,php – Laravel 5:Ajax Post 500(内部服务器错误)
  8. hadoop学习6 运行map reduce出错
  9. EF Code First 简单的示例
  10. Linux环境下如何计算CPU占用率
  11. @程序员,你敢轻易地写 Bug 吗?
  12. 辨异 —— 中文词汇
  13. 同余运算及其基本性质(证明)
  14. php for of,JavaScript中 for、for in、for of、forEach的用法小结(附代码)
  15. 是真的!华为2019年应届博士年薪最高达201万
  16. 如何获取中间层的结果_如何从0开始做大数据治理(上)
  17. 局域网***原理与防御(网络执法官类)
  18. 制作U盘安装XP系统
  19. python绘制正态分布图_用python制作正态分布图
  20. java -io字符流FileWrite操作演示

热门文章

  1. 分析|什么是物联网卡
  2. 史蒂文斯理工学院计算机科学,史蒂文斯理工学院
  3. 《会计学》账户与复式记账笔记的思维导图
  4. 域管理:windows server分发与分配软件
  5. 南京理工计算机硕士就业,南京理工大学好就业吗?附南京理工大学就业率最高的专业名单...
  6. const 定义数组问题
  7. 看《神探夏洛克》经典台词
  8. android sqlite fts4,SQLite FTS4使用首选语言
  9. 推荐一些免费的网盘给你
  10. java 存储表情_java emoji表情存储的解决方法