软件设计模式复习
一、软件生存周期
二、软件开发过程模型
瀑布模型
特征: 从上一阶段承接的成果物作为本阶段的工作对象; 对上一阶段成果实施本阶段的活动; 给出本阶段的成果,作为下一阶段的输入; 对本阶段的工作进行评审,若本阶段的工作得到确认,则继续下阶段的工作,否则返回前一阶段或更前一阶段。
优点: 提供了一个模板,使得分析、设计、编码、测试、运行维护可以在该模板的指导下应用。 缺点: 缺乏灵活性,不能适应用户需求的改变 开始阶段的小错误被逐级放大,可能导致软件产品报废 返回上一级的开发需要十分昂贵的代价 随着软件规模和复杂性的增加,对于需求不能完全确定的软件开发项目将产生很大的风险。
通常使用场合: 需求分析做得比较好的系统 二次开发系统
快速原型模型
特点: 有助于获取用户需求 尽早发现错误 支持需求的动态变化
优点: 开发者与用户充分交流,可以澄清模糊需求,需求定义比其他模型好得多 为用户需求的改变提供了充分的余地
缺点: 开发者为了使一个原型快速运行起来,往往在实现过程中采用折衷的手段。软件系统的组成部分可能会打折扣; 资源规划和管理较为困难,随时更新文档也带来麻烦。
一般使用场合: 开发者在不了解的应用领域开发 客户不清楚其所开发软件项目的最终目标
螺旋模型
优点: 结合瀑布模型和原型模型的优点 风险分析可使一些极端困难的问题和可能导致费用过高的问题被更改或取消
缺点: 螺旋模型开发的成败,很大程度上依赖于风险评估的成败。需要开发人员具有相当丰富的风险评估经验和专门知识
一般使用场合: 需求不能完全确定,同时又存在技术、资金或开发时间等风险因素的大型开发项目。
建立数据流模型
在创建用户需求的数据流模型的过程中,分析人员应遵循以下规则:
首先建立顶级数据流图,其中只含有一个代表目标软件系统整体处理功能的转换。
对用户需求的文字描述进行语法分析,其中的名词和名词短语构成潜在的外部实体、数据源或数据流,动词构成潜在的处理功能。
采用通常的功能分解方法,按照“强内聚、低耦合”原则逐个对处理功能进行精化;与此同时逐步完成对数据流的精化,并针对被精化的处理功能生成下一级数据流图。
在精化过程中必须维持各级数据流图的平衡。
精化过程应适可而止,避免涉及软件设计细节。
三、UML
在工程的协同工作中,具体描述一种制品时需要考虑哪些要素?
①统一的语言 ②可视化
软件制品与物理制品存在本质区别: 软件是一种逻辑产品
软件工程中,如何以统一的、可视化的方法对面向对象软件系统进行需求和设计建模?
统一建模语言UML (Unified Modeling Language)
UML 2.0的特点和用途
为使用者提供了统一的、表达能力强大的可视化建模语言,以描述应用问题的需求模型、设计模型和实现模型。 提供对核心概念的扩展机制,用户可加入核心概念中没有的概念和符号,可为特定应用领域提出具体的概念、符号表示和约束。 独立于实现语言和方法学,但支持所有的方法学,覆盖了面向对象分析和设计的相关概念和方法学。 独立于任何开发过程,但支持软件开发全过程。 提供对建模语言进行理解的形式化基础,用元模型描述基本语义,OCL描述良定义规则,自然语言描述动态语义。 增强面向对象工具之间的互操作性,便于不同系统间的集成。 支持较高抽象层次开发所需的各种概念,如协同、框架、模式和构件等,便于系统的重用。
类图
类描述具有相同特征、约束和语义的一类对象,这些对象具有共同的属性和操作。
类图描述面向对象软件系统的静态结构: 结点表示系统中的类及其属性和操作 边表示类之间的关系
概念模型和顶层架构设计
用例描述
在用户需求和相关的业务领域中,往往有一些全局性的概念对于理解需求至关重要,因此,有必要抽取这些概念,研究这些概念之间的关系。 UML类图非常适合用来建立领域概念模型,描述在问题域中存在哪些主要概念和对象,并表示出它们之间的关系,例如关联、聚集、继承等。 为建立以UML类图表示的领域概念模型,首先必须标识关键概念。
关键概念的来源
业务需求描述、用例说明; 业务领域中的相关规范、标准、术语定义。 反映业务领域知识的既往经验。
分析类
描述概念模型的UML类图主要由分析类组成。 分析类是指直接服务于用户功能性需求的概念层面的类,它们与待开发软件系统的具体实现技术无关。 概念层UML类图也可以称为分析类图。
边界类。负责目标软件系统与参与者之间的交互。
控制类。作为完成用例任务的责任承担者,负责协调、控制其它类共同完成用例规定的功能或行为。
实体类。负责保存目标软件系统中具有持久意义的信息项并向其它类提供读、写信息项内容的必要操作接口,一般不涉及业务逻辑处理。
顶层架构设计
顶层架构的主要目的是为后续的分析和设计活动建立一种结构和划分,以便开发人员在不同的开发阶段,以及同一开发阶段的不同开发人员,能够聚焦于系统的不同部分。 顶层架构是分析和设计的阶段成果的承载体。 随着开发过程的推进,框架中的内容不断丰富、翔实,最终演进为完整的面向对象软件结构。
顶层架构的设计可以把体系结构设计方法与概念模型得到的结果结合起来考虑,利用一定的体系结构模式(例如分层模式、模型-视图-控制器MVC模式等)对概念模型中的相关元素进行组织,同时需要考虑目标软件系统与其它作为参与者的外部 系统之间的联系和交互方式。UML包图非常适合于表示软件顶层架构,可以从某种视角将具有比较密切的关联的一些类划分为一个包,分属不同包的两个类之间的关联则比较松散。
设计精化的任务
精化软件架构
精化软件架构的主要目的是寻找一种理想的包划分方案,使得每个包中直接包含的类的数量规模适中,包的边界清晰、自然,并且包间的耦合度较低。 随着分析和设计不断深入,原有包图中的包可能包含了过多的类,此时需要对其进行分拆。 按照软件工程强内聚、松耦合的原则,这种分拆应该具有某种自然划分的性质,并且尽可能降低划分以后的子包之间的耦合度。
有关原则
避免包间的循环依赖关系,即,排除包P1依赖于包P2、P2又依赖于P1的情形。
在层次结构中,位于较低层次的通用包不应当依赖于较高层次中的专用包。
在层次结构中,较高层次的包可以依赖于较低层次的包,但应尽量在相邻的层次间发生。
如果针对某些子系统专门划分了接口包和实现包,那么,其它与该子系统相关的包只能依赖于接口包,不能依赖于实现包。
调整软件组成类
增加辅助类 合并相互通信频繁的类 分拆规模过大的类
精化交互模型
对交互图进行精化时,需要考虑以下内容:
要考虑软件架构和组成类被调整之后对交互模型会产生哪些影响,新出现的对象或拆分后的对象如何参与交互过程,在其中起到什么样的作用。 对象在交互过程中的消息传递需要哪些参数和返回值。 交互过程是否需要细化,例如增加必要的消息,或对局部引用一个更加具体的交互图。
精化类之间关系
四、基本概念
软件设计主要针对需求分析过程得到的软件需求规格说明,综合考虑各种制约因素,探求切实可行的软件解决方案并最终给出方案的逻辑表示,包括文档、模型等。
软件设计基本概念是过去数十年里陆续提出的,软件设计者根据这组概念进行设计决策。
内聚与耦合
内聚是前述信息隐藏和局部化概念的自然扩展,它标志一个模块内部各成分彼此结合的紧密程度。 耦合是对软件结构中模块间关联程度的一种度量。耦合的强弱取决于模块间接口的复杂性、进入或调用模块的位置以及通过接口传送数据的多少等。 追求高内聚、低耦合。
软件设计模式:
广义定义:可解决一类软件问题并能重复使用的软件设计方案
狭义定义:设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。是在类和对象的层次描述的可重复使用的软件设计问题解决方案。
软件体系结构风格
是在构件和连接子的层次所描述的可重复使用的软件设计问题解决方案。
层次风格
客户/服务器风格
管道/过滤器风格
特征:系统中构件之间通过数据流松散耦合。也就是说,构件之间的依赖仅仅是数据流,而不是通常的接口函数调用或消息传递。
其他典型应用:编译器、信号处理等。 其他说明:本模式在实现上可以有许多不同的变化,如主动与被动、多出口管道等
五、用户界面设计
用户界面包含两方面内容:
首先要完整地包括用户在使用软件过程中所需的各种元素,例如窗口、菜单、按钮、输入文本框、选择列表、提示信息等,缺乏这些元素中的某些将会导致软件功能无法被用户正常完成;
其次要求具有良好的外观和布局,例如背景颜色、按钮等元素的位置、选择列表中条目的顺序等,这些因素的不足可能不会影响软件功能的正确使用,但会给用户带来不便、迷惑甚至反感。
层次: 屏幕 窗口
用户界面的结构可以由UML类图描述,屏幕和窗口用类进行表示,并给出它们之间的关系。
用构造型<<screen>>和<<window>>分别表示屏幕和窗口。
而屏幕之间的切换过程可以用UML状态图表示。
基本原则:用户熟悉程度 一致性 使惊讶最小化 可恢复性 用户帮助 用户多样性
设计良好界面的主要途径
(1)使系统处于用户控制之中
所定义的交互模式不会强迫用户进行不必要的动作,用户能够很容易地进入或退出交互模式。 提供灵活的交互方式。 允许打断或撤销用户交互。 事先根据用户的熟练程度来提高交互效率并且允许交互定制。 为不熟悉系统的用户隐藏内部技术细节。 与出现在屏幕上的对象直接交互。
(2)减少用户记忆负担
减少短期记忆要求。 建立有意义的默认设置。 定义符合直觉的快捷方式。 界面的视觉布局应该依据真实世界的比喻。 以渐进的方式来揭示信息。
(3)保持界面一致性
用户能够在有意义的上下文中进行当前的任务。 维护系列软件的一致性。 如果之前的交互模型已经能够满足用户的期望,则不要随意进行修改,除非有强制性的理由。
用户界面原型
在理想情况下,用户界面原型的构建过程包括以下的两个阶段:
在早期,必须构建出纸上的原型,包括屏幕设计的实体模型,然后和用户进行商讨。 之后,可以开始对设计进行精化,并且开发逐渐复杂的界面原型,然后把它们提供给用户来进行测试和动作模拟
构建方式:脚本驱动的方法 可视化的程序语言 基于因特网的原型
六、基于分布构件的系统体系结构
EJB分布构件框架
简介:EJB(Enterprise Java Bean)分布构件框架由SUN公司主导制定,它基于Java语言,面向企业级的分布式系统开发。分布构建分成3种:会话、消息驱动、实体。