软件设计与体系结构题目与答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.各种性能指标及如何到达各种性能指标的方法
(1)防止变异模式:是如何设计对象,子系统和系统,使这些元素内部的变化或不稳定性不会对其他元素产生不良影响。
解决方案:识别预测的变化或不稳定之处,分配职责用以创建稳定借口。
(2)依赖反转原理:把你的类从局的现实中隔离开,使他们依赖于抽象类或接口。它促进了代码面向接口而不是实现,这通过保证对实现的低耦合来增加系统的灵活性。
2.常用的中间件有那几种类型
(1)常见的对象请求代理架构
(2)面向消息的中间件
(3)J2EE
(4)消息代理
(5)业务过程代理
3.有那些常见架构风格
(1)管道和过滤器架构风格
(2)面向对象风格
(3)隐式调用风格
(4)客户-服务器风格
(5)分层风格
(6)仓库风格
(7)解释程序风格
(8)过程控制风格
4.架构师需要的核心技能是什么
(1)涉众之间的交流
(2)技术知识
(3)软件工程学
(4)风险管理
5.什么是软件架构
软件架构是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致的描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口(计算机科学)实现。
6.什么是架构风格
一组原则。你可以把它看成是一组为系统家族提供抽象框架的粗粒度模式。
7.什么是架构视图
一个架构视图是对于从某一视角或某一点上看到的系统所做的简化描述,描述中涵盖了系统的某一特定方面,从而省略了此方面无关的实体。
8.各种架构风格的组件和连接器是什么
1.管道和过滤器架构风格:
适用于需要定义一系列的执行规则数据的独立运算,组件在输入时读数据流,在输出时产生数据流
组件:称为过滤器,应用于对局部的输入流的转换,经常增长的计算,因此,在输入结束前输出就开始了
连接器:称为管道,给流提供管道,把一个过滤器的输出传输到另一个输入。
2.面向对象风格:
适用于主要问题识别和保护信息的相关主体
数据代理和他们相关的操作封装在一个抽象数据类型里面
组件:对象
连接器:功能和过程调用
3.客户-服务器风格:
适用于涉及到分布式的数据和跨越一系列的组件的处理
组件:服务器、客户端
连接器:网络
4.分层风格:
适用于设计到分布式的能够分层的组织的类的服务,每层给它的上一层提供服务,同时作为下一层的客户端。只有仔细的从内层选择选择过程,才能用于他们接近的外层。
组件:典型的过程的集合
连接器:典型的在有限的可见性下的过程调用
5仓库风格:
适用于主要问题的建立、增加和维护复杂信息的主体部分,信息一定要能够用很多方式操作。经常需要长期的存在。
组件:主要的数据结构能够表示出系统的正确状态,操作主要数据结构的独立组件的集合
连接器:典型的过程调用或是直接内存访问
6.解释程序风格:
适用于执行解决方案的最合适的语言或是机器不是直接可用的
组件:包括一个状态机,有一个执行引擎和三个记忆状态:当前执行引擎的状态、程序被翻译、当前被翻译程序的状态
连接器:过程调用、直接内存访问
7.过程控制风格:
适用于目的是维护特殊过程的输出属性在给定参考值的情形下
组件:过程定义、控制算法
连接器:数据流关系、过程变量、设置断点、传感器
8.隐式调用风格:
应用于涉及到组件的松耦合集,其中的每个都执行一些操作,还可能允许其他的操作组件:一个或多个事件
连接器:广播系统
9.GRASP模式的具体内容
1.创造者
分配给类B职责来创造类A的一个实例如果:
(1)B聚合A的对象
(2)B包含A的对象
(3)B记录A的对象的实例
(4)B紧密地使用A的对象
(5)B被创建时有初始化的数据传递给
2.专家
在设计对象(类)时,如果某个类能够在某方面具有完整信息,足以实现某责任,就将这个责任分配给这个类,
3.控制器
控制器是在用户接口层上的第一个对象,负责接收和处理系统的操作信息。
4.低耦合
测量存在于模块之间的依赖程度
5.高内聚
测量一个共享的模块内元素的相关性
一个单独模块执行任务的程度是功能相关的
6.多态
当相关的供选方案或行为随着类型的变化而变化时,给行为分配职责—使用多态操作—来适合行为变化的类型。
7.纯虚构
分配一系列高度聚合的职责给虚假的类或是不表现某事完成的领域问题概念的有用的类,它支持高内聚、低耦合、可重用。
8.间接
问题:如何分配职责避免直接耦合?如何减弱对象的耦合?
解决方案:分配职责给中间的调解对象来调解两个组件之间的关系。
9.防止编译
问题:如何设计对象,子系统和系统,使其内部的变化和不稳定不会对其他元素产生不良影响?
解决方案:识别设计变化或不稳定之处,分配职责用以在这些变化之外创建稳定接口。GRASP用职责设计对象:"Designing Objects with Responsibilities".它包含了9个基本模式: 1.信息专家(Information expert) 2.创建者(Creator) 3.高内聚(High Cohesion) 4.低耦合(Low Coupling) 5.控制器(Controller)6.多态性(Polymorphism) 7.纯虚构(Pure Fabrication)8.间接性(Indirection) 9.变化预防(Protected Variations) GRASP的主要特征: - 对象职责分配的基本原则。 - 主要应用在分析和建模上。 GRASP的核心思想的理解:自己干自己的事(职责的分配)自己干自己的能干的事(职责的分配)自己只干自己的事(职责的内聚)
10.OO设计的五个基本原则及课件中讲述的其它软件原理
1.单一职责原则
这个原则和关注点分离紧密联系。它陈述了每个对象应该只有一个理由去改变,单一聚焦在职责上。通过依附这个原则,你避免了庞大的类的设计问题,那就像瑞士的军刀。有了精确的对象,你再次增加了系统的可读性和可维护性。
2.开闭原则
这个原则陈述了类应该对扩展开放,对修改关闭,那样你就能够添加新的特征,扩展一个类而不用改变它内部的行为。这个原则旨在避免破坏存在的类及依赖它的其他类,这使得你的整个应用程序中产生故障和错误的涟漪。
3.Liskov替换原则
Liskov替换原则要求你应该能够使用任何衍生出的类代替父类,不用修改就有同样的行为。这个原则与开闭原则一致,它保证了一个衍生出的类不影响父类的行为,或者说,衍生出的类必须能够被它们的基类替代。
4.接口分离原则
这个原则是j将一个抽象方法分裂成几组职责,给这些组分配接口来防止客户端实现一个很大的接口,这个接口容纳了很多它们不使用的方法。目的是为了让类使用相同的接口只需要实现一些具体的方法,而不是有很多方法的庞大的接口。
5.依赖反转原则
把你的类从具体的实现中隔离开,使它们依赖于抽象类或接口。它促进了对接口而不是实现的译码,这通过保证对实现的低耦合来增加系统的灵活性。