当前位置: 首页 > news >正文

架构设计笔记-5-软件工程基础知识-2

知识要点

构件组装是将库中的构件经适当修改后相互连接,或者将它们与当前开发项目中的软件元素连接,最终构成新的目标软件。

构件组装技术大体可分为:

1. 基于功能的组装技术:基于功能的组装技术采用子程序调用和参数传递的方式将构件组装起来。它要求库中的构件以子程序/过程函数的形式出现,并且接口说明必须清晰。当使用这种组装技术进行软件开发时,开发人员首先要对新系统进行功能分解,将系统分解为强内聚、松耦合的功能模块;然后根据各模块的功能需求提取构件,进行适应性修改后,再接接到上述功能分解框架中。

2. 基于数据的组装技术:基于数据的组装技术首先根据当前软件问题的核心数据结构设计出一个框架,然后根据框架中各结点的需求提取构件并进行适应性修改,再将构件逐个分配至框架中的适当位置。此后,构件的组装方式仍然是传统的子程序调用与参数传递。这种组装技术也要求库中构件以子程序形式出现,但它所需的软件设计方法不再是功能分解,而是面向数据的设计方法,例如:Jackson 系统开发方法。

3. 面向对象的组装技术:由于封装和继承特征,面向对象方法比其他软件开发方法更适合支持软件复用。在面向对象的软件开发方法中,如果从类库中检索出来的基类能够完全满足新系统的需求,则可以直接应用。否则,必须以基类为父类,生成相应的子类,以满足新系统的需求。

设计模式 

创建型模式是对对象实例化过程的抽象。

  1. 单例模式(Singleton):确保一个类只有一个实例,并提供了全局访问入口;
  2. 原型模式(Prototype):允许对象在不了解要创建对象的确切类以及如何创建等细节的情况下创建自定义对象;
  3. 构建器模式(Builder):将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。

结构型模式主要用于如何组合已有的类和对象以获得更大的结构,一般借鉴封装、代理、继承等概念将一个或多个类或对象进行组合、封装,以提供统一的外部视图或新的功能。

行为型模式主要用于对象之间的职责及其提供的服务的分配,它不仅描述对象或类的模式,还描述它们之间的通信模式,特别是描述一组对等的对象怎样相互协作以完成其中任一对象都无法单独完成的任务。

  1. 命令模式(Command):将一个请求封装成一个对象,从而使得用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
  2. 观察者模式:观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
  3. 状态模式:对于对象内部的状态,允许其在不同的状态下拥有不同的行为,对状态单独封装成类。
  4. 中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

耦合表示模块之间联系的程度。紧密耦合表示模块之间联系非常强,松散耦合表示模块之间联系比较弱,非耦合则表示模块之间无任何联系,是完全独立的。

模块的耦合类型通常分为 7 种,根据耦合度从低到高排序如下表所示。

面向对象设计模型驱动用例驱动的,整个设计过程将面向对象分析阶段所产生的需求模型作为输入,并生成供构建阶段使用的设计模型作为输出

COM 支持两种形式的对象组装包含聚集

  1. 包含:一种简单的对象组装技术,其含义是一个对象拥有指向另一个对象的唯一引用。
  2. 聚集:直接把内部对象的接口引用传给外部对象的客户,而不再转发请求。

面向对象的分析模型主要由顶层架构图用例与用例图领域概念模型构成。设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、描述复杂对象的状态图和用于描述流程化处理过程的活动图等。 

面向对象分析中,利用用例与用例图表示需求,从用例模型中提炼形成领域模型,用例的实现可以用交互图表示。从领域模型和用例图形成类图,用包图和类图形成体系结构图。之后再进行后续的开发工作。

面向对象的设计原则

  1. 开闭原则:指软件实体应

相关文章:

架构设计笔记-5-软件工程基础知识-2

知识要点 构件组装是将库中的构件经适当修改后相互连接,或者将它们与当前开发项目中的软件元素连接,最终构成新的目标软件。 构件组装技术大体可分为: 1. 基于功能的组装技术:基于功能的组装技术采用子程序调用和参数传递的方式将构件组装起来。它要求库中的构件以子程序…...

[网络]抓包工具介绍 tcpdump

一、tcpdump tcpdump是一款基于命令行的网络抓包工具,可以捕获并分析传输到和从网络接口流入和流出的数据包。 1.1 安装 tcpdump 通常已经预装在大多数 Linux 发行版中。如果没有安装,可以使用包管理器 进行安装。例如 Ubuntu,可以使用以下…...

基于STM32和FPGA的射频数据采集系统设计流程

一、项目概述 高速采集射频(RF)信号是一个关键的需求。本文旨在设计一种基于STM32和FPGA的射频数据采集系统,以实现对接收到的射频信号的高精度和高速度的处理。该系统适用于无线通信、信号分析、雷达系统等应用场景。 技术栈关键词&#x…...

自动变速箱系统(A/T)详细解析

自动变速箱系统(A/T),即Automatic Transmission,是一种能够在车辆行驶过程中自动完成换挡操作的传动系统。以下是对自动变速箱系统(A/T)的详细解析,内容涵盖其定义、工作原理、主要组成、类型、…...

【Kubernetes】常见面试题汇总(四十三)

目录 98. kube-apiserver 和 kube-scheduler 的作用是什么? 99.您对云控制器管理器了解多少? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)…...

OpenCL 学习(1)---- OpenCL 基本概念

目录 Overview异构并行计算OpenCL 架构平台模型执行模型OpenCL 上下文OpenCL 命令队列内核执行编程模型存储器模型存储器对象共享虚拟存储器 Overview OpenCL(Open Computing Language,开放计算语言) 最早由苹果公司提交草案,并于 AMD, IBM ,intel 和 n…...

自定义注解加 AOP 实现服务接口鉴权以及内部认证

注解 何谓注解? 在Java中,注解(Annotation)是一种特殊的语法,用符号开头,是 Java5 开始引入的新特性,可以看作是一种特殊的注释,主要用于修饰类、方法或者变量,提供某些信…...

《软件工程概论》作业一:新冠疫情下软件产品设计(小区电梯实体按钮的软件替代方案)

课程说明:《软件工程概论》为浙江科技学院2018级软件工程专业在大二下学期开设的必修课。课程使用《软件工程导论(第6版)》(张海藩等编著,清华大学出版社)作为教材。以《软件设计文档国家标准GBT8567-2006》…...

基于Ernie-Bot打造语音对话功能

大模型场景实战培训,提示词效果调优,大模型应用定制开发,点击咨询 咨询热线:400-920-8999转2 GPT-4的语音对话功能前段时间在网上火了一把,许多人被其强大的自然语言处理能力和流畅的语音交互所吸引。现在,…...

动手学深度学习(李沐)PyTorch 第 3 章 线性神经网络

3.1 线性回归 线性回归是对n维输入的加权,外加偏差 线性回归可以看作是单层神经网络 回归问题中最常用的损失函数是平方误差函数。 平方误差可以定义为以下公式: 常数1/2不会带来本质的差别,但这样在形式上稍微简单一些 (因为当…...

ROS理论与实践学习笔记——2 ROS通信机制之服务通信

服务通信也是ROS中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。也即: 一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A,用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输…...

技术成神之路:设计模式(十八)适配器模式

介绍 适配器模式(Adapter Pattern)是一种结构型设计模式,它允许接口不兼容的类可以协同工作,通过将一个类的接口转换成客户端所期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。 1.定义 适配…...

图神经网络:处理复杂关系结构与图分类任务的强大工具

创作不易,您的打赏、关注、点赞、收藏和转发是我坚持下去的动力! 图神经网络(Graph Neural Network, GNN)是针对图数据的一类神经网络模型。图数据具有节点(节点代表实体)和边(边代表节点之间的…...

LeetCode: 1971. 寻找图中是否存在路径

寻找图中是否存在路径 原题 有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点…...

mysql 查询表所有数据,分页的语句

在 MySQL 中,若要从表中查询所有数据并实现分页,你可以使用 SELECT 语句结合 LIMIT 和 OFFSET 子句。LIMIT 用于指定返回的记录数,而 OFFSET 则用于指定从哪一条记录开始返回(即跳过的记录数)。 以下是一个基本的分页…...

TI DSP TMS320F280025 Note13:CPUtimer定时器原理分析与使用

TMS320F280025 CPUtimer定时器原理分析与使用 ` 文章目录 TMS320F280025 CPUtimer定时器原理分析与使用框图分析定时器中断定时器使用CPUtimers.cCPUtimers.h框图分析 定时器框图如图所示 定时器有一个预分频模块和一个定时/计数模块, 其中预分频模块包括一个 16 位的定时器分…...

Australis 相機率定軟體說明

概要 課堂中使用Australis這套軟體,順帶記錄操作過程 內容以老師口述及我測試的經過 照片為老師課堂提供之 說明 執行 Step1. 匯入照片 注意!!如果是Mac的作業系統,將資料夾移到Windows上的時候,建議創一個新的資料…...

C++入门(有C语言基础)

string类 string类初始化的方式大概有以下几种: string str1;string str2 "hello str2";string str3("hello str3");string str4(5, B);string str5[3] {"Xiaomi", "BYD", "XPeng"};string str6 str5[2];str…...

第四届高性能计算与通信工程国际学术会议(HPCCE 2024)

目录 大会简介 主办单位,承办单位 征稿主题 会议议程 参会方式 大会官网:www.hpcce.net 大会简介 第四届高性能计算与通信工程国际学术会议(HPCCE 2024)将于2024年11月22-24日在苏州召开。HPCCE 2024将围绕“高性能计算与通信工…...

负载均衡架构解说

负载均衡架构是一种设计模式,用于在多个服务器之间分配网络或应用流量,以提高资源利用率、最大化吞吐量、减少响应时间,并确保高可用性。 负载均衡架构的关键组件和概念: 关键组件 1.负载均衡器(Load Balancer&…...

【异常数据检测】孤立森林算法异常数据检测算法(数据可视化 Matlab语言)

摘要 本文研究了基于孤立森林算法的异常数据检测方法,并在MATLAB中实现了该算法的可视化。孤立森林是一种无监督的异常检测算法,主要通过构建决策树来区分正常数据和异常数据。本文使用真实数据集,通过二维可视化展示了检测结果。实验结果表…...

MKV转MP4丨FFmpeg的简单命令使用——视频格式转换

MKV是一种视频封装格式,很好用,也是OBS的默认推荐录制格式,因为不会突然断电关机而导致整个视频录制文件丢失。 但是MKV无法直接导入PR中剪辑,最直接的方法是将MKV转换为MP4格式,最方便且安全无损的转换方法便是用FFmp…...

git使用“保姆级”教程4——版本回退及分支讲解

一、版本回退 1、历史回退(版本回退)——命令行git reset --hard 版本编号 注意:当前命令会让工作区的内容发生改变,可以理解成历史区(master分支)直接回到工作区比如:从版本4回到版本3,则工作区只会显示版本3的代码内容 1.1、指…...

spring cache,Spring data redis

本项目使用Redis存储缓存数据,如何通过Java去访问Redis? 常用的有Jedis和Lettuce两个访问redis的客户端类库 ,Jedis和Lettuce都是redis提供的。其中Lettuce的性能和并发性要好一些,Spring Boot 默认使用的是 Lettuce 作为 Redis …...

10.数据结构与算法-线性表的应用(线性表与有序表的合并)

线性表的合并 有序表的合并 顺序表 链表...

GAN|对抗| 生成器更新|判别器更新过程

如上图所示,生成对抗网络存在上述内容: 真实数据集;生成器;生成器损失函数;判别器;判别器损失函数;生成器、判别器更新(生成器和判别器就是小偷和警察的关系,他们共用的…...

day01——登录功能

逻辑: 前端将登录信息通过报文的形式,发送给后端。后端进行登陆验证 2.1 根据接受的用户名,查询数据表。 若不存在该用户的记录,返回用户不存在。 若用户存在,判断数据库中的密码和接收的是否一致,不一致则…...

Flutter中使用FFI的方式链接C/C++的so库(harmonyos)

Flutter中使用FFI的方式链接C/C库(harmonyos) FFI plugin创建和so的配置FFI插件对so库的使用 FFI plugin创建和so的配置 首先我们可以根据下面的链接生成FFI plugin插件:开发FFI plugin插件 然后在主项目中pubspec.yaml 添加插件的依赖路径&…...

【C++】二义性

在C中,二义性(ambiguity)通常指的是编译器无法确定使用哪个函数、变量或类成员的情况。这种不确定性通常是由于继承和多态特性导致的。下面是一些常见的产生二义性的场景以及如何解决它们的方法: 1. 多重继承中的二义性 当一个类…...

高并发内存池(五):ThreadCache、CentralCache和PageCache的内存回收机制、阶段性代码展示和释放内存过程的调试

目录 ThreadCache的内存回收机制 补充内容1 补充内容2 补充内容3 补充内容4 ListTooLong函数的实现 CentralCache的内存回收机制 MapObjectToSpan函数的实现 ReleaseListToSpans函数的实现 PageCache的内存回收机制 补充内容1 补充内容2 ReleaseSpanToPageCache函…...

蚌埠做网站/农产品品牌推广方案

控制台程序。 定义监听器类有许多方式。下面把监听器类定义为单独的类MouseHandler: 1 // Mouse event handler for a selection button2 import java.awt.Cursor;3 import java.awt.event.*;4 5 public class MouseHandler extends MouseAdapter {6 Cursor handCursor new …...

开发公司采购招聘/seo关键词分析

最近有个概念吵得很火,网络爬虫,但是基本都是用什么python或者JAVA写,貌似很少看到用c写的,我在网上找了一个,看到其实还是很简单的算法。 算法讲解:1.遍历资源网站 2.获取html信息 3.然后解析网址和图片…...

网站访问量什么意思/最近新闻事件

请问唐氏筛查低风险人群,有必要做无创DNA吗?唐氏筛查低风险,有必要做无创DNA检查吗?这个问题问的好,如果单纯性的唐氏筛查低风险,那么根本没有必要再做无创DNA检查了。现实生活中还是存在很多唐氏筛查低风险…...

北京网站建设服务中心/简单网页制作成品免费

戴尔服务器以稳定著称,但服务器维护人员要想进入BIOS设置就非常困难,甚至出现进入不了的毛病,应该如何解决?按理说,戴尔服务器开机之后,只要出现戴尔的启动画面,摁下F2就可以顺利进入BIOS&#…...

国外网站怎么做/佛山网站建设解决方案

SQL学习 学习SQL语法 SQL语法SQL学习SQL Alias(别名)Alias 实例: 使用表名称别名Alias 实例: 使用一个列名别名SQL Alias(别名) 通过使用 SQL,可以为列名称和表名称指定别名(Alias)。 表的 SQ…...

如何将图片插入网站/二手交易平台

Kubernetes(k8s)理论与实战双飞 ①理解控制器: ②网络详解: ③伸缩原理: ④认证与调度: ⑤服务原理: ⑥镜像自动拉取: ⑦节点就绪问题之一: ⑧节点就绪问题之二&#xf…...