软件设计模式复习

一、软件生存周期

 二、软件开发过程模型

瀑布模型

特征: 从上一阶段承接的成果物作为本阶段的工作对象; 对上一阶段成果实施本阶段的活动; 给出本阶段的成果,作为下一阶段的输入; 对本阶段的工作进行评审,若本阶段的工作得到确认,则继续下阶段的工作,否则返回前一阶段或更前一阶段。

优点: 提供了一个模板,使得分析、设计、编码、测试、运行维护可以在该模板的指导下应用。 缺点: 缺乏灵活性,不能适应用户需求的改变 开始阶段的小错误被逐级放大,可能导致软件产品报废 返回上一级的开发需要十分昂贵的代价 随着软件规模和复杂性的增加,对于需求不能完全确定的软件开发项目将产生很大的风险。

通常使用场合: 需求分析做得比较好的系统 二次开发系统

快速原型模型

特点: 有助于获取用户需求 尽早发现错误 支持需求的动态变化

优点: 开发者与用户充分交流,可以澄清模糊需求,需求定义比其他模型好得多 为用户需求的改变提供了充分的余地

缺点: 开发者为了使一个原型快速运行起来,往往在实现过程中采用折衷的手段。软件系统的组成部分可能会打折扣;  资源规划和管理较为困难,随时更新文档也带来麻烦。

一般使用场合: 开发者在不了解的应用领域开发   客户不清楚其所开发软件项目的最终目标

螺旋模型

优点: 结合瀑布模型和原型模型的优点 风险分析可使一些极端困难的问题和可能导致费用过高的问题被更改或取消

缺点: 螺旋模型开发的成败,很大程度上依赖于风险评估的成败。需要开发人员具有相当丰富的风险评估经验和专门知识

一般使用场合: 需求不能完全确定,同时又存在技术、资金或开发时间等风险因素的大型开发项目。 

建立数据流模型

在创建用户需求的数据流模型的过程中,分析人员应遵循以下规则:

首先建立顶级数据流图,其中只含有一个代表目标软件系统整体处理功能的转换。

对用户需求的文字描述进行语法分析,其中的名词和名词短语构成潜在的外部实体、数据源或数据流,动词构成潜在的处理功能。

采用通常的功能分解方法,按照“强内聚、低耦合”原则逐个对处理功能进行精化;与此同时逐步完成对数据流的精化,并针对被精化的处理功能生成下一级数据流图。

在精化过程中必须维持各级数据流图的平衡。

精化过程应适可而止,避免涉及软件设计细节。

三、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种:会话、消息驱动、实体。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建文件服务器并使用Qt实现文件上传和下载(带账号和密码)

文章目录 0 背景1 搭建文件服务器2 代码实现文件上传和下载2.1 在pro文件中添加网络支持2.2 创建网络管理类2.3 文件上传2.4 文件下载 3 扩展&#xff08;其他方法实现文件上传和下载&#xff09;3.1 python3.2 npm3.3 ftp服务器 4 完整的代码 0 背景 因为需要使程序具备在远程…

自动化运维(k8s)之微服务信息自动抓取:namespaceName、deploymentName等全解析

前言&#xff1a;公司云原生k8s二开工程师发了一串通用性命令用来查询以下数值&#xff0c;我想着能不能将这命令写成一个自动化脚本。 起初设计的 版本一&#xff1a;开头加一条环境变量&#xff0c;执行脚本后&#xff0c;提示输入&#xff1a;需要查询的命名空间&#xff0c…

springboot332基于springboot养老院管理系统pf(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 养老院管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计…

js:函数

函数 函数&#xff1a;实现抽取封装&#xff0c;执行特定任务的代码块&#xff0c;方便复用 声明 函数命名规范 尽量小驼峰 前缀应该为动词&#xff0c;如getName、hasName 函数的调用 函数体是函数的构成部分 函数传参 参数列表里的参数叫形参&#xff0c;实际上写的数据叫实…

基于Matlab的图像去噪算法仿真

中值滤波的仿真 本节选用中值滤波法对含有高斯噪声和椒盐噪声的图像进行去噪&#xff0c;并用Matlab软件仿真。 &#xff08;1&#xff09;给图像加入均值为0&#xff0c;方差为0.02的高斯噪声&#xff0c;分别选择33模板、55模板和77模板进行去噪 Matlab部分代码&#xff1…

【Linux】-学习笔记06

第二章、时间同步服务器 2.1时间同步服务器的使用 2.1.1系统时区时间的管理 timedatectl set-time "2024-02-13 10:41:55" ##设定系统时间 timedatectl list-timezones ##显示系统的所有时区 timedatectl set-timezone "Asia/Shangh…

UE5_建立自己的资产库

资产库需要用到一个插件&#xff1a; UAsset Browser - 直接在当前项目预览其他UE项目资产&#xff08;.uasset 文件&#xff09; - 直接迁移其他UE项目资产到当前项目 - 不用另外打开资产项目查看资产&#xff0c;迁移资产&#xff08;麻烦&#xff09; 插件官网插件文档插…

详解登录MySQL时出现SSL connection error: unknown error number错误

目录 登录MySQL时出错SSL connection error: unknown error number 出错原因 使用MySQL自带的工具登录MySQL 登陆之后&#xff0c;使用如下命令进行查看 解决方法 找到MySQL8安装目录下的my.ini配置文件 记事本打开my.ini文件&#xff0c;然后按下图所示添加配置 此时再…

深度学习基本单元结构与输入输出维度解析

深度学习基本单元结构与输入输出维度解析 在深度学习领域&#xff0c;模型的设计和结构是理解其性能和应用的关键。本文将介绍深度学习中的基本单元结构&#xff0c;包括卷积神经网络&#xff08;CNN&#xff09;、反卷积&#xff08;转置卷积&#xff09;、循环神经网络&…

乐鑫发布 esp-iot-solution v2.0 版本

今天&#xff0c;乐鑫很高兴地宣布&#xff0c;esp-iot-solution v2.0 版本已经发布&#xff0c;release/v2.0 分支下的正式版本组件将为用户提供为期两年的 Bugfix 维护&#xff08;直到 2027.01.25 ESP-IDF v5.3 EOL&#xff09;。该版本将物联网开发中常用的功能进行了分类整…

面经-综合面/hr面

面经-综合面/hr面 概述1.大学期间遇到的困难&#xff0c;怎么解决的2. 大学期间印象最深/最难忘的是什么3. 大学里面担任了什么职务没&#xff1f;做了什么工作&#xff1f;4. 大学最大的遗憾是什么&#xff1f;5. 对自己的未来规划6. 对自己的评价7. 自己的优缺点8. 对公司的认…

pyspark实现基于协同过滤的电影推荐系统

最近在学一门大数据的课&#xff0c;课程要求很开放&#xff0c;任意做一个大数据相关的项目即可&#xff0c;不知道为什么我就想到推荐算法&#xff0c;一直到着手要做之前还没有新的更好的来代替&#xff0c;那就这个吧。 推荐算法 推荐算法的发展由来已久&#xff0c;但和…

十、Spring Boot集成Spring Security之HTTP请求授权

文章目录 往期回顾&#xff1a;Spring Boot集成Spring Security专栏及各章节快捷入口前言一、HTTP请求授权工作原理二、HTTP请求授权配置1、添加用户权限2、配置ExceptionTranslationFilter自定义异常处理器3、HTTP请求授权配置 三、测试接口1、测试类2、测试 四、总结 往期回顾…

Unity3d C# 实现一个基于UGUI的自适应尺寸图片查看器(含源码)

前言 Unity3d实现的数字沙盘系统中&#xff0c;总有一些图片或者图片列表需要点击后弹窗显示大图&#xff0c;这个弹窗在不同尺寸分辨率的图片查看处理起来比较麻烦&#xff0c;所以&#xff0c;需要图片能够根据容器的大小自适应地进行缩放&#xff0c;兼容不太尺寸下的横竖图…

DVWA 在 Windows 环境下的部署指南

目录预览 一、靶场介绍二、前置准备1. 环境准备2.靶场下载 三、安装步骤1.配置Phpstudy2.配置数据库3.配置DVWA4.登入DVWA靶场 四、参考链接 一、靶场介绍 DVWA 一共包含了十个攻击模块&#xff0c;分别是&#xff1a; Brute Force&#xff08;暴力&#xff08;破解&#xff…

微软企业邮箱:安全可靠的企业级邮件服务!

微软企业邮箱的设置步骤&#xff1f;如何注册使用烽火域名邮箱&#xff1f; 微软企业邮箱作为一款专为企业设计的邮件服务&#xff0c;不仅提供了高效便捷的通信工具&#xff0c;更在安全性、可靠性和功能性方面树立了行业标杆。烽火将深入探讨微软企业邮箱的多重优势。 微软…

使用UE5.5的Animator Kit变形器

UE5.5版本更新了AnimatorKit内置插件&#xff0c;其中包含了一些内置变形器&#xff0c;可以辅助我们的动画制作。 操作步骤 首先打开UE5.5&#xff0c;新建第三人称模板场景以便测试&#xff0c;并开启AnimatorKit组件。 新建Sequence&#xff0c;放入测试角色 点击角色右…

应用案例丨坤驰科技双通道触发采集实时FFT数据处理系统

双通道触发采集实时FFT数据处理系统 应用案例 双通道采集&#xff0c;每路通道需要2GSPS的采样率&#xff0c;每2毫秒采集一次&#xff0c;每次采集数据量为65536*2 Sample。采集的信号频率满足奈奎斯特采样定律。采集数据后&#xff0c;每路通道的数据均做运算以及FFT实时处理…

OGRE 3D----3. OGRE绘制自定义模型

在使用OGRE进行开发时,绘制自定义模型是一个常见的需求。本文将介绍如何使用OGRE的ManualObject类来创建和绘制自定义模型。通过ManualObject,开发者可以直接定义顶点、法线、纹理坐标等,从而灵活地构建各种复杂的几何体。 Ogre::ManualObject 是 Ogre3D 引擎中的一个类,用…

如何用Excel做数据可视化自动化报表?

作为一个经常需要做数据报表的人&#xff0c;我最常用的工具是Excel&#xff0c;对于我来说用Excel处理繁琐冗杂的数据并不难&#xff0c;但是我发现身边很多人用Excel做的数据报表非常的耗时&#xff0c;而且最后的成品也是难以直视&#xff0c;逻辑和配色等都非常的“灾难”。…