软件设计与体系结构课后题答案.doc
文本预览下载声明
【题型】
1.选择20道
2.填空10道
3.简答5或6道
4.编程题2道
【重点】
1.软件危机的表现
软件开发进度难以预测
软件开发成本难以控制
用户对产品功能难以满足
软件产品质量无法保证
软件产品难以维护
2.引发软件危机的原因
用户需求不明确
缺乏正确的理论指导
软件开发规模越来越大
软件开发复杂度越来越高
3.体系结构概念
构件、构件之间的关系、集成构件的模式及约束条件
4.构件的概念
构件是指语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统;结构上,它是语义描述、通讯接口和实现代码的复合体。
5.引入体系结构使得开发过程发生什么变化?好处是什么?软件再工程、逆工程的概念?软件设计质量的量度
【变化】
在引入了体系结构的软件开发之后,应用系统的构造过程变为“问题定义—软件需求—软件体系结构—软件设计—软件实现”,可以认为软件体系结构架起了软件需求与软件设计之间的一座桥梁。
【好处】
克服软件危机
【再工程】
是指对既存对象系统进行调查,并将其重构为新形式代码的开发过程。最大限度的复用既存系统的各种资源是再工程的最重点特征之一。 如何开发可复用软件和如何构造采用可复用软件的系统体系结构是两个关键问题。
【逆工程】
是指分析软件系统,确定其构成成分及各成分间的关系,提取并生成系统抽象和设 计信息的工程。
【量度】
面向对象软件质量的度量重点在于对类的分析上。应从类的以下方面考虑:
耦合 内聚度 继承性 复杂度
6.5个设计原则概念
【单一职责原则】就一个类而言,应该仅有一个引起它变化的原因。
【开闭原则】软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。(也就是老婆常说的对扩展开放,对修改关闭)
【依赖倒转】抽象不应该依赖于细节,细节应该依赖于抽象。要针对接口编程,不要对实现编程。
【里氏代换】在软件里面,把父类都替换成它的子类,程序行为没有变化。简单地说,子类型必须能够替换掉它们的父类型。
【迪米特】如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
7.软件设计目标(健壮性等)概念
正确性、健壮性、可复用性、可维护性、高效性
8.17个模式(包含简单工厂方法)的概念、结构图、类的关系、代码、什么时候采用、优缺点
【简单工厂】简单工厂模式是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
结构图:
优点:
工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;工厂类负责创建的对象比较少;客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
优点:
1.Strategy类层次为Context类定义了一系列可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。
2.简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。修改其中任一个时,也不会影响其他算法。
3. 当不同的行为堆砌到一个类中时,就很难避免使用条件语句来选择合适的行为——最开始的程序,不得不在客户端代码中判断使用哪个算法。
4. 将这些行为封装在一个独立的Strategy类中,可以在使用这些行为的类中消除条件语句。
缺点:
CashContext还是用到了switch分支语句,若增加算法,需更改CashContext中的代码
何时采用:
策略模式就是用来封装算法的,可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑用使用策略模式处理这种变化的可能性。
【装饰模式】动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活
结构图:
优点:
把类的装饰功能从类中搬移去除,这样可以简化原有的类。
有效的
显示全部