武汉理工大学 软件设计与体系结构 复习1-31 整理

2018-11-23  本文已影响0人  constantine丶

最近要考试了,综合了一下老师的PPT和其他同学整理的资料。如果存在什么问题,可以留评论

1.各种性能指标的定义及如何到达各种性能指标的方法

2.常用的中间件有那几种类型(四种)

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。

面向消息的中间件,分布式对象系统

1)CORBA---公用对象请求代理(调度)程序体系结构,它在对象间建立客户-服务器的关系,这样一个客户可以很简单地使用服务器对象的方法而不论服务器是在同一机器上还是通过一个网络访问。 (常见的对象请求代理架构)
2)Basic Message-oriented middleware---- MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可在分布环境下扩展进程间的通信,并支持多通讯协议、语言、应用程序、硬件和软件平台。 (面向消息的中间件)
3)J2EE---- J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的问题。
4)Message brokers----消息代理是一种在数据源与目的地之间移动数据使信息处理流畅的软件技术,数据源与目的地包括已有的应用、文件、数据库、对象、硬拷贝输出及Web客户端等。 (消息代理)
5)Business process orchestrators----“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。(业务过程代理)

3.有那些常见架构风格

1)管道和过滤器(Pipe and Filter)

2)面向对象(Object-Oriented)

3)隐式调用(Implicit Invocation)

4)客户-服务器风格

5)分层风格

6)仓库风格

7)解释程序风格

8)过程控制风格

补充内容:
分布式系统(distributed system)是建立在网络之上的软件系统。分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。

4.架构师需要的核心技能是什么
1) 团队之间的交流 Liaison with stakeholders
2) 技术知识 Technology knowledge
3) 软件工程学 Software engineering
4) 风险管理 Risk managements

(来源 ppt 18页)

5.什么是软件架构(好几种定义,但是主要点是结构,元素,关系,接口)
(百度百科)

(PPT ch1-ch8 slide 3- 7)

-“Architecture is the fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution.”
体系结构是一个系统的基本组织,体现在它的组件、它们彼此之间的关系和环境中,以及控制它的设计和演进的原则中。

“The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them.”
程序或计算系统的软件架构是 系统的一个或多个结构,
它包括 软件元素、这些元素的外部可见属性 和 它们之间的关系。

6.软件架构主要关注那些问题
(来源PPT)
‘issues that will be difficult/impossible to change once the system is built’
“一旦系统建立后就很难或是不可能改变的问题”:
Quality attributes like security, performance
质量属性,例如 安全性 , 性能
Non-functional requirements like cost, deployment hardware
非功能性需求,像开销, 硬件配置

7.现代复杂软件设计的主要问题是那些

可能的答案 L1-8 Slide3
Major problems are architecture design, technology selection, application and business integration
主要问题是 架构设计 、技术选择、 应用 和 业务集成

8.什么是架构风格
(百度百科来源)

9.什么是架构视图
(来源doc)
架构视图:

10.非功能需求包括哪些(三种)

NFRs(Non-functional requirements):非功能性需求:

11.软件架构过程(三个迭代步骤)

1.png

1)确定架构需求:架构上重要的需求(结构用例)---基本的质量和系统的非功能性需求
2)架构设计:迭代的设计步骤---风险识别是一个重要的输出设计
3)结构验证

12.软件质量属性主要包括哪些(五种)

ppt1-8 116页

13.软件可用性取决于(三种时间)

14.伸缩性涉及那些方面(四种)

1)Request load 请求负载
当同步请求负载增长时,100个tps应用程序的行为如何?如。
每秒100到1000个请求?
理想的解决方案,无需额外的硬件容量:
随着负载的增加,吞吐量保持不变(即100 tps),每个请求的响应时间只线性增加(即10秒)。

2)Connections 连接
如果与应用程序同时连接的数量增加,会发生什么情况呢
如果每个连接都消耗资源?
超过连接的最大数量?
ISP的例子:
每个用户连接生成一个新进程
每个服务器上的虚拟内存超过2000个用户
需要支持100k用户

3)Data size 数据大小
当应用程序处理的数据增大时,它的行为如何?
聊天应用程序平均消息大小翻倍?
数据库表大小从100万行增长到2000万行?
图像分析算法处理100MB而不是1MB的图像?
应用程序/算法能否扩展以处理增加的数据需求?

4)Deployments 部署
安装/部署应用程序的工作量如何随着安装基数的增长而增加?
安装新用户?
安装新的服务器?
解决方案通常围绕自动下载/安装
例如从互联网下载应用程式
ppt1-8 127页

15.吞吐率指标
PPT 120
Measure of the amount of work an application must perform in unit time
度量应用程序在单位时间内必须执行的工作量

PPT 121
Throughput of a message queuing system :
消息队列系统的吞吐量

16.架构元素的通信包括哪些

(PPT ch1-ch8 slide210、212、218)

(PPT ch1-ch8 10)
Architecture Specifies Component Communication 体系结构指定组件通信
Communication involves: 架构元素的通信:

Data passing mechanisms 数据传递机制:

Control flow 控制流

17.各种架构风格的组件和连接器是什么

1)管道和过滤器架构风格PPT 40页
组件:称为过滤器,应用于对局部的输入流的转换,经常增长的计算,因此,在输入结束前输出就开始了。
连接器:称为管道,给流提供管道,把一个过滤器的输出传输到另一个输入。

2)面向对象风格 PPT49页
组件:对象
连接器:功能和过程调用(方法)

3)隐式调用风格
组件:模块(???)
连接器:广播系统
隐式调用系统中的连接器除了
事件通知 过程调用 之间的绑定外,
通常还包括 传统的过程调用

4)客户-服务器风格 PPT64页
组件:服务器:标准独立的组件提供特别的服务,如打印,数据管理等。客户端:组件调用服务器提供的服务。
连接器:网络,允许客户端访问远程服务器。

5)分层风格 PPT72页
组件:典型的过程的集合。
连接器:典型的在有限的可见性下的过程调用

6)仓库风格 PPT80页
组件
表示系统正确状态的中心数据结构。
A central data structure representing the correct state of the system.
操作中心数据结构的独立组件的集合。
A collection of independent components that operate on the central data structure.
连接器:典型地过程调用或是直接内存访问

7)解释程序风格 PPT87页
组件
包括执行引擎的一个状态机和三个内存:
include one state machine for the execution engine and three memories:
执行引擎的当前状态
current state of the execution engine
程序解释
program being interpreted
正在解释的程序的当前状态
current state of the program being interpreted
连接器
procedure calls 过程调用
direct memory accesses. 直接内存访问

8)过程控制风格 PPT94页
组件:过程定义:包括操作一些过程变量的机制,控制算法:决定如何去操作过程变量
连接器: 数据流关系 data flow relations

18.软件性能指标主要有哪几种(三种)

吞吐量、响应时间、最后期限 见第一题

19.响应时间的度量(两种)

Guaranteed time 最大响应时间
Average time 平均响应时间

PPT 122

20.安全性质量指标主要有哪几种(五种)

PPT 142页

21.实现高可用性的策略(三种)

PPT 146

22.信息隐藏原理

PPT lecture 9 88页

信息隐藏涉及两个算法:信息嵌入算法和信息提取算法,如下图:
信息隐藏的原理框图


1.png

23.关注点分离
关注点分离(Separation of concerns,SOC):
Presentation, business and data handling logic are clearly partitioned in different tiers.
表示、业务和数据处理逻辑清楚地划分在不同的层中。
ppt 210

SoC是将软件分解成不同的特性的过程,这些特性封装了其他类可以使用的独特行为和数据。通常,关注点表示类的特性或行为。将程序分离成离散职责的行为显著地提高了代码重用、维护和可测试性。
PPT Review of Java Slide 36

关注点分离(Separation of concerns,SOC)
1)大体思路是,先将复杂问题做合理的分解,再分别仔细研究问题的不同侧面(关注点),最后综合各方面的结果,合成整体的解决方案。
2)是对只与“特定概念、目标”(关注点)相关联的软件组成部分进行“标识、封装和操纵”的能力,即标识、封装和操纵关注点的能力。是处理复杂性的一个原则。由于关注点混杂在一起会导致复杂性大大增加,所以能够把不同的关注点分离开来,分别处理就是处理复杂性的一个原则,一种方法。

关注点分离是面向方面的[程序设计]的核心概念。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题代码的调用(将针对特定领域问题代码抽象化成较少的程式码,例如将代码封装成function或是class),业务逻辑同特定领域问题的关系通过侧面来封装、维护,这样原本分散在在整个应用程序中的变动就可以很好的管理起来。
百度百科

24.什么是职责驱动的设计

Responsibility-Driven Design (RDD)

25.GRASP模式的具体内容,各种模式的定义,解决的什么问题

1)创造者 Creator
分配给类B职责来创造类A的一个实例如果:
(1) B聚合A的对象
(2) B包含A的对象
(3) B记录A的对象的实例
(4) B紧密地使用A的对象
(5) B被创建时有初始化的数据传递给

解决方案:将创建一个类A的实例的职责指派给类B的实例,
如果下列条件满足的话:
a) B聚合了A对象
b) B包含了A对象
c) B纪录了A对象的实例
d) B要经常使用A对象
e) 当A的实例被创建时,B具有要传递给A的初始化数据(也就是说B是创建A的实例这项任务的信息专家)
f) B是A对象的创建者
如果以上条件中不止一条成立的话,那么最好让B聚集或包含A

通俗点就是:我要用你所以我来创建你,请不要让别人创建你
这个模式是支持低耦合度原则的一个体现

2)信息专家 Information Expert
在设计对象(类)时,如果某个类能够在某方面具有完整信息,足以实现某责任,就将这个责任分配给这个类,
解决方案:将职责分配给具有履行职责所需要的信息的类
通俗点就是:该干嘛干嘛去,别管别人的闲事或者我的职责就是搞这个,别的事不管。
举个简单的例子,如果有一个类是专门处理字符串相关的类,那么这个类只能有字符串处理相关的方法,而不要将日期处理的方法加进来。也就是提高软件高内聚一种原则。

3)控制器 Controller
控制器是在用户接口层上的第一个对象,负责接收和处理系统的操作信息。
解决方案:将处理系统事件消息的职责分派给代表下列事物的类:
a) 代表整个“系统”的类(虚包控制者)
b) 代表整个企业或组织的类(虚包控制者)
c) 代表真实世界中参与职责(角色控制者)的主动对象类(例,一个人的角色)
d) 代表一个用况中所有事件的人工处理者类,通常用“<用例名>处理者”的方式命名(用例控制者)
这是一个控制者角色职责分配的原则,就是哪些控制应该分派给哪个角色。

4)低耦合 Low Coupling
测量存在于模块之间的依赖程度
解决方案:在分配一个职责时要使保持低耦合度。
耦合度(coupling)是一个类与其它类关联、知道其他类的信息或者依赖其他类的强弱程度的度量。一个具有低(弱)耦合度的类不依赖于太多的其他类。

5)高内聚 High Cohesion
测量一个共享的模块内元素的相关性 ;一个单独模块执行任务的程度是功能相关的
解决方案:分配一个职责的时候要保持类的高聚合度
聚合度或内聚度(cohesion)是一个类中的各个职责之间相关程度和集中程度的度量。一个具有高度相关职责的类并且这个类所能完成的工作量不是特别巨大,那么他就是具有高聚合度。

6)多态 Polymorphism
当相关的供选方案或行为随着类型的变化而变化时,给行为分配职责—使用多态操作—来适合行为变化的类型。
也就是说尽量对抽象层编程,用多态的方法来判断具体应该使用那个类,而不是用if instanceof 来判断该类是什么接来执行什么。

7)纯虚构 Pure Fabrication
分配一系列高度聚合的职责给虚假的类或是不表现某事完成的领域问题概念的有用的类,它支持高内聚、低耦合、可重用。
一个纯虚构意味着虚构某些事物,而不是到了迫不得已我们才这样做。
例,我们的Sale类的数据要存入数据库,但是他必须和数据库接口相连接,如果将接口连接放入Sale类中势必增加该类的耦合度,所以我们可以虚构一个类来处理与数据库接口连接的问题。这个类就是我们虚构出来的一个事物。

8)间接 Indirection
问题:如何分配职责避免直接耦合?如何减弱对象的耦合?
解决方案:分配职责给中间的调解对象来调解两个组件之间的关系。
内容:将职责分配给一个中间对象以便在其他构件或服务之间仲裁,这样这些构件或服务没有被直接耦合。这个中间对象(intermediary)在其他构件或服务间创建一个中介者(Indirection)。这个中间对象也就事7)中的纯虚构。

9)防止编译/变化预防 Protected Variations
问题:如何设计对象,子系统和系统,使其内部的变化和不稳定不会对其他元素产生不良影响?
解决方案:识别设计变化或不稳定之处,分配职责用以在这些变化之外创建稳定接口
内容:分配职责给一个客户端的直接对象以使它与一个间接对象进行协作,这样客户端无需知道这个间接对象。
这个模式-也被叫做(Demeter)准则。
通俗点就是:只与你直接的朋友们通信,不要跟“陌生人”说话,每个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位

GRASP的主要特征:

GRASP的核心思想的理解:

来源 doc

26.OO设计的五个基本原则及课件中讲述的其它软件原理

五个基本原则:(S.O.L.I.D):
1)单一职责原则 (SPR 单一功能原则)
这个原则和关注点分离紧密联系。它陈述了每个对象应该只有一个理由去改变,单一聚焦在职责上。通过依附这个原则,你避免了庞大的类的设计问题,那就像瑞士的军刀。有了精确的对象,你再次增加了系统的可读性和可维护性。

2)开闭原则 (OCP 开闭原则)
这个原则陈述了类应该对扩展开放,对修改关闭,那样你就能够添加新的特征,扩展一个类而不用改变它内部的行为。这个原则旨在避免破坏存在的类及依赖它的其他类,这使得你的整个应用程序中产生故障和错误的涟漪。

3)Liskov替换原则 (LSP 里式替换原则)
Liskov替换原则要求你应该能够使用任何衍生出的类代替父类,不用修改就有同样的行为。这个原则与开闭原则一致,它保证了一个衍生出的类不影响父类的行为,或者说,衍生出的类必须能够被它们的基类替代。

4)接口分离原则 (ISP 接口隔离原则)
这个原则是将一个抽象方法分裂成几组职责,给这些组分配接口来防止客户端实现一个很大的接口,这个接口容纳了很多它们不使用的方法。目的是为了让类使用相同的接口只需要实现一些具体的方法,而不是有很多方法的庞大的接口。不应强迫客户程序实现一个它用不上的接口。

5)依赖反转原则 (DIP依赖反转原则)
把你的类从具体的实现中隔离开,使它们依赖于抽象类或接口。它促进了对接口而不是实现的译码,这通过保证对实现的低耦合来增加系统的灵活性。
高层模块不应该依赖于底层模块。二者都应该依赖于抽象
抽象不应该依赖于细节,细节应该依赖于抽象

更多解释:
https://blog.csdn.net/zn_echonn/article/details/80198053

【其它基本原理】
A.保持代码简单而不过于简单,避免不必要的复杂性;
B.把公共事物抽象出来,放在固定的位置;
C.给类分配正确的职责,告诉对象做什么,而不是询问对象的状态;
D.把自认为需要却不一定需要的特性延迟;
E.把特性分离封装成类,增强重用、维护和稳定。(关注点分离)
F.将类及其成员的访问性降到最小;
G.使用访问器和修改器,而不是公共成员;
H.组合优于继承;
I.面向接口编程,而不是实现。

27.组合,继承,针对接口编程,黑盒,白盒重用

1)组合:
指在新类里面创建原有类的对象,重复利用已有类的功能。

优点:
包含对象由包含类通过其接口访问
“黑盒”重用,因为包含对象的内部细节不可见

2)继承:

新功能的重用方法获得通过扩展现有对象的实现 ???
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
泛化类(超类)明确了共同的属性和方法
专业类(子类)扩展了实现额外的属性和方法

优点:
新的实现很容易,因为它的大部分是继承的
容易修改或扩展的实现被重用
缺点:
打破封装,因为它暴露一个子类到其超类的实现细节
“白盒”重用,因为超类的内部细节对子类通常是可见的
如果超类的实现更改,则可能必须更改子类
从超类继承的实现不能在运行时更改

3)针对接口编程又称为面向接口编程,

针对接口编程就是要先设计以系列的接口,把设计和实现分开,使用时只需要引用接口即可,也由于系统各部分的解耦合。针对接口编程是为了提高程序的可维护性、可伸缩性和可复用性。如果你在一个类中直接使用另外的一个,这样就把两个类紧密联系在一起了,以后如果想做出改变就很难了。如果针对接口编程,当业务变化时我们只需要用一个新的类实现接口即可

优点:
客户端不知道他们正在使用的对象的特定类
一个对象可以很容易地被另一个替换
对象连接不需要硬连线到特定类的对象,从而增加了灵活性
松耦合
增加重复使用的可能性
改进合成的机会,因为包含的对象可以是实现特定接口的任何类
缺点:
适度增加设计复杂性

4)白盒复用:
源代码可见,可修改和扩展
– 复制已有代码当正在开发的系统,进行修改
– 可定制化程度高
– 对其修改增加了软件的复杂度,且需要对其内部充分的了解

白盒重用"White-box" reuse(PPT Review of Java Slide 45)
"White-box" reuse, since internal details of super classes are often visible to subclasses
“白盒”重用,因为超类的内部细节对子类通常是可见的

5)黑盒复用:
源代码不可见,不能修改
– 只能通过API接口来使用,无法修改代码
– 简单,清晰
– 适应性差些

黑盒重用"Black-box" reuse(PPT Review of Java Slide 43)
"Black-box" reuse, since internal details of contained objects are not visible
因为包含对象的内部细节不可见

组合关系是 局部类和整体类的关系
继承关系 父类和子类的关系
(来源doc,网络)

28.MVC模式
(来源DOC)
•MVC是 模型-视图-控制器 的缩写
它代表了一种软件设计模式,1978年开发在施乐帕克研究中心(!)
它解释了一种分离视觉、交互和数据组件的方法。
非常受欢迎,广泛用于Java和其他语言

(百度百科)
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

模型 :维护应用程序的状态和数据的XML文档
•“模型”包含的数据
•有一些方法来访问并可能更新它的内容。
•通常,它实现了一个允许模型交互的接口。
•实现了一个允许退出和取代的接口,并不伴随编程改变

视图 :XML文档的呈现
•视图提供模型的可视化表示。
•在任何时候都可以有多个视图表示模型。
•例如,一个公司财务状况随着时间的推移可以用一个表和图表示。
•只有两种不同的视图表示相同的数据。
•当模型更新时,所有视图被通知然后有机会更新

控制器 :用户界面呈现给用户操作的应用程序
•用户与控制器进行交互。
•它解释鼠标移动,点击按键等
•活动与模型沟通,如:删除行,插入行等
•它的模型的交互间接导致视图的更新

2.png

29.企业应用架构有那三层,各层主要做什么。在各层有那些主要的模式,各层,各层的各种模式的定义和结构内容(展现层,领域层,数据源层)

(PPT ch9 slide 110)
1)表现层:提供服务,显示信息。页面控制器,模板视图,前端控制器,转换视图。
2)领域层:领域逻辑,领域中真正的核心。也称为业务逻辑,它是应用程序必须做的所有领域相关工作:包括根据输入数据和已有数据进行计算,对从表现层输入的数据进行验证以及根据从表现层接受的命令来确定应该调试哪些数据源逻辑。事物脚本,领域模型,表模块,活动记录。
3)数据源层:与数据库、系统消息系统、事务管理器及其他软件包进行通信。最主要的数据源逻辑就是数据库,主要责任是存储持久数据。行数据网关,表数据网关,数据映射程序,表模块,活动记录。

30.4+1视图

“4+1”视图模型即从5个不同的视角(逻辑视图,进程视图,物理视图,开发视图
和场景视图)来描述软件体系结构。
每个视图之关心系统的一个侧面,5个视图结合在一起才能反映系统的软件体系结构的全部内容。

逻辑视图(Logical View):
过程视图:描述架构元素之间的并发和通信
物理视图:描绘主要的过程和组件是如何映像到硬件上的
开发视图:俘获软件组件内部的结构,如配置管理工具

架构用例:俘获架构的需求;和不止一种视图相关

百度百科
逻辑视图(Logical View)设计的对象模型(使用[面向对象]的设计方法时)。
过程视图(Process View)捕捉设计的并发和同步特征。
物理视图(Physical View)描述了软件到硬件的映射,反映了分布式特性。
开发视图(Development View)描述了在[开发环境]中软件的静态组织结构。

架构的描述,即所做的各种决定,可以围绕着这四个视图来组织,然后由一些用例 (use cases)或场景(scenarios)来说明,从而形成了第五个视图。

3.png

来源DOC

31.应用的集成策略

2.png

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

来源DOC

补充内容:
1.一些指标

上一篇下一篇

猜你喜欢

热点阅读