软件设计模式复习

一、软件生存周期

 二、软件开发过程模型

瀑布模型

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

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

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

快速原型模型

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

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

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

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

螺旋模型

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

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

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

建立数据流模型

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

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

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

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

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

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

三、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,一经查实,立即删除!

相关文章

centos7 yum install 失败,mirrorlist.centos.org连接不上

由于centos7停止支持,导致mirrorlist.centos.orgdns解析都是失效啦,yum命令没法安装程序. 换一个镜像源就好 sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.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 背景 因为需要使程序具备在远程…

JVM 常见面试题及解析(2024)

目录 一、JVM 基础概念 二、JVM 内存结构 三、类加载机制 四、垃圾回收机制 五、性能调优 六、实战问题 七、JVM 与其他技术结合 八、JVM 内部机制深化 九、JVM 相关概念拓展 十、故障排查与异常处理 一、JVM 基础概念 1、什么是 JVM&#xff1f;它的主要作用是…

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

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

鸿蒙一次开发,多端部署,响应式布局

鸿蒙一次开发&#xff0c;多端部署&#xff0c;响应式布局 一、定义屏幕相关常量 BreakpointConstants.ets import BreakpointType from ../bean/BreakpointType export default class BreakPointConstants{/*** 小屏幕设备的Breakpoints 标记*/static readonly BREAKPOINT_…

ubuntu防火墙入门(一)——设置服务、关闭端口

本机想通过git clone gitgithub.com:skumra/robotic-grasping.git下载代码&#xff0c;firewall-config中需要为当前区域的防火墙开启SSH服务吗 是的&#xff0c;如果你想通过 git clone gitgithub.com:skumra/robotic-grasping.git 使用 SSH 协议从 GitHub 下载代码&#xff0…

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…

前端网络安全分析

前端常见的网络安全包括&#xff1a;xss&#xff08;跨站脚本攻击&#xff09;、csrf&#xff08;跨站请求伪造&#xff09;、sql注入攻击等。 1&#xff09;跨站脚本攻击&#xff08;xss&#xff09; 原理&#xff1a; 攻击者往web页面中注入恶意 script 代码&#xff08;或…

【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; 插件官网插件文档插…

macOS 桌面悬浮窗口

开发一个 macOS 桌面悬浮窗口(类似悬浮工具条、任务管理器等)可以使用 macOS 的 AppKit 框架,通过配置窗口属性,使窗口始终显示在其他应用窗口的上方。以下是开发的详细步骤: 关键点 窗口类型 使用 NSWindow 创建悬浮窗口。将窗口设置为浮动窗口,使其始终显示在其他窗口上…

GitLab/GitHub 多环境配置SSH密钥

需求&#xff1a; 代码有多个仓库&#xff0c;需要配置不同的密钥。 生成密钥&#xff08;有的可以跳过&#xff09; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" -f ~/.ssh/id_rsa_custom_name-t rsa 指定使用 RSA 算法。-b 4096 指定密钥长度为 4096 位…

力扣整理版十:动态规划(待更新)

动态规划&#xff1a;每一个状态由上一个状态推导出来。 --------------------------- (1) 509 斐波那契数 (2) 70 爬楼梯 (3) 746 使用最小花费爬楼梯 --------------------------- 一、基础题目 1、509 斐波那契数 509. 斐波那契数 - 力扣&#xff08;LeetCode&#…

黑马2024AI+JavaWeb开发入门Day02-JS-VUE飞书作业

视频地址&#xff1a;哔哩哔哩 讲义作业飞书地址&#xff1a;飞书 一、作业1 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…

详解登录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;、循环神经网络&…

Sofia-SIP 使用教程

Sofia-SIP 是一个开源的 SIP 协议栈&#xff0c;广泛用于 VoIP 和即时通讯应用。以下是一些基本的使用教程&#xff0c;帮助你快速上手 Sofia-SIP。 1. 安装 Sofia-SIP 首先&#xff0c;你需要安装 Sofia-SIP 库。你可以从其官方 GitHub 仓库克隆源代码并编译安装&#xff1a…

【八股文】小米

文章目录 一、vector 和 list 的区别&#xff1f;二、include 双引号和尖括号的区别&#xff1f;三、set 的底层数据结构&#xff1f;四、set 和 multiset 的区别&#xff1f;五、map 和 unordered_map 的区别&#xff1f;六、虚函数和纯虚函数的区别&#xff1f;七、extern C …