软件构造第四章——复用软件评价与开发

SpringBoot+Vue校园美食推荐系统开发实战:从协同过滤到毕业设计答辩 推荐系统已深入日常生活,从电商商品猜到短视频内容分发,其核心都是根据用户行为数据挖掘潜在兴趣。协同过滤作为最经典的推荐算法,通过用户或物品间的相似度计算实现个性化推送,在实际工程中具有广泛应用价值。对于校园周边美食推荐场景,学生群体偏好集中、行为数据有限,恰好适合利用协同过滤与标签规则结合的方式落地。技术实现上,SpringBoot提供稳定高效的后端服务,Vue构建交互友好的前端界面,前后端分离架构让系统层次分明。本文从推荐原理出发,讲解如何将协同过滤算法编码实现,并围绕SpringBoot+Vue技术栈, 阅读详情

复用软件评价

一.什么是软件复用

1.面向复用性编程:开发可以服用的软件
2.基于复用编程:利用可复用的软件开发

开发可复用的软件会导致:开发成本高,泛用性强,性能好。
度量可复用性
1.复用的频繁程度
2.复用的代价程度

二.复用层面

1.源码级复用:对源代码进行复制修改。
2.模块层面复用:对已有的类进行复用。
继承与委托技术,扩展现有类
3.库层面的复用:API复用
库:提供一组类与方法
4.框架层面复用
分类:黑盒,白盒复用。

对于库复用,用户代码主体。
对于框架复用:框架主体

三.可复用的外部表示

1.类型可变:泛型的复用性好于非泛型
2.实现可变:rep可以变化
3.共性抽取
4.功能分组
5.表示独立

开发可复用软件的技术

设计可复用的类:
1.继承重写 2.泛型参数 3.委托4.重载

一.LSP(里氏替换原则)

里氏替换原则是重要的设计模式原则
概括地说:客户端允许以统一方式处理子类型
继承的目的就在于能够统一处理子类型,要求子类型不仅与基类有逻辑上的is-a关系,也应该有行为的一致性。否则我们的继承是没有意义的。

子类型在保证
1.必须重写抽象空方法,不能删除方法。
2.重写的返回值,异常要求协变
3.重写参数要求逆变
4.子类型的前置弱于基类
5.子类型的后置强于基类
6.更强不变量

LSP保障——强行为子类型
前置不能强化,后置不能弱化,不变量要保障,返回值,异常协变,参数逆变
Java不支持逆变

二.泛型与数组的子类型行为

数组行为

    数组是支持协变的,Number[] a= new Integer[3]();
    在编译时可以通过,因为数组运行时保留类型,可以动态知道实际类型。a中不能添加Double 运行时出错。

泛型行为

对于泛型而言,泛型实际上进行类型擦除,不会有类型保留,所以如果像这样呀List a = new ArrayList();
是不被允许的,如果允许,那么a中添加元素时,是不知道添加的是否合法的。
所以泛型参数子类型,不能代表泛型子类型

泛型通配符

泛型中支持为泛型创建使用通配符。

<?> 支持所有类型,与相同

<?extends A> 参数是A的子类型,这个泛型的子类型是所有A子类型的泛型

<? super A> 参数是A的父类型,这个泛型的子类型是A所有父类型的泛型。 容器中的通配符是让人迷惑的。 我们不能实例化ArrayList<? extends A> 但我们可以创建一个引用 s,并把A子类型泛型赋给他。 此时s是不能set 的,因为他的泛型参数是所有A的子类型,但实际是明确的一个未知子类型。set无法保证放入的数据是 A1类型的。 但是可以get,所有数据都可以安全转型到A。
爬虫抓包:Reqable(俗称“小黄鸟”)——下一代移动端抓包与调试神器全攻略 凭借其标志性的明黄色图标,Reqable 在中文技术圈被亲切地称为**“小黄鸟”**(与大名鼎鼎的“小黄鸟”网络测试工具同名,但功能天差地别)。Reqable 以其**原生 C++ 编写的超高性能、堪比浏览器 DevTools 的现代化 UI、以及革命性的“无需 Root 绕过 HTTPS 限制”功能**,迅速席卷了开发者和逆向工程师的工具箱。 阅读详情

相关推荐

RBF神经网络训练三类非梯度优化算法实操指南

RBF神经网络是一种具有明确结构约束的前馈网络,其核心在于隐层径向基函数的中心、宽度与输出层权值的协同优化。区别于BP网络的端到端梯度更新,RBF天然将学习问题解耦为非线性参数(中心与宽度)和线性参数(权值)两个子问题,这使得正交最小二乘(OLS)、混合遗传算法(HGA)和粒子群优化(PSO)等非梯度方法成为更稳定、更可控的求解路径。这类方法规避了梯度爆炸、消失及局部极小等风险,在小样本、高噪声或需模型可解释性的工业场景(如设备故障诊断、医学指标判别)中展现出显著技术价值。本文聚焦OLS/HGA/PSO三类

weixin_33910759的博客 445

【软件构造】课件精译(十)可复用性的度量、形态与外部表现

前言 之前的章节介绍了软件构造的核心理论(ADT)与技术(OOP),其核心是保证代码质量、提高代码安全性。 本章面向一个重要的外部质量指标:可复用性——如何构造出可在不同应用中重复使用的软件模块/API。本节探讨可复用的软件应该“长什么样”,下一节学习“如何构造”。 一、什么是软件复用性 ...

无极阁 536

高精地图语义分割标注

什么是语义分割?语义分割与目标检测的区别?语义分割的关键应用场景有哪些?高精地图语义分割标注的难点?

weixin_52509513的博客 1647

android 布局文件怎么抽取共性,中台共性功能是如何抽取的?

引言中台建设一直是很多企业在做的事情,很多宏观上的概念及框架是无法认知到执行层面是如何做一个功能的,本文用一个功能来聊聊中台建设中,一个功能是如何诞生的。中台功能“新建标准表”“新建标准表”的由来先说明一下项目背景,这项目是一个“学生健康服务平台”的健康数据信息化网络管理系统;实现各级卫生业务数据的标准化、规范化和统一化管理。“新建项目信息”是业务操作人员进行新的体检体测项目创建时,流程节点中的一...

weixin_36125921的博客 233

UE4/5项目GPU崩溃?可能是Windows的TDR机制在搞鬼!深入浅出聊聊TdrDelay与显卡超时

本文深入探讨了UE4/5项目中GPU崩溃的常见原因,揭示了Windows TDR机制的工作原理及其对渲染进程的影响。通过调整TdrDelay参数和优化GPU负载,提供了解决显卡超时问题的实用方案,帮助开发者提升项目稳定性。

weixin_30691649的博客 411

单细胞分析实录(12): 如何推断肿瘤细胞

公众号后台回复20210418,获取本文的测试数据 1. 回顾 前面我已经讲解了inferCNV的基本用法,这一节继续学习:如何推断肿瘤细胞。本文应该是到目前为止,全网最详细的帖子(之一)。 关于肿瘤细胞的推断,比如研究上皮细胞起源的肿瘤,我见过的一些做法如下 简单粗暴型:将来源肿瘤病灶的所有上皮细胞都看成是肿瘤细胞 看CNV:将来源于肿瘤病灶的上皮细胞和参考细胞比较,将那些有明显CNV的细胞看作肿瘤细胞 看表达特征:考虑到有的肿瘤细胞可能没有CNV层面的变化,有的文章会根据肿瘤与正常的表达谱来区分是.

TOP生物信息 1万+

软件设计师备考笔记(十二)面对对象的需求工程概述(OOA、UML)

软考、软件设计师、面对对象共的需求工程概述、 OOA(面对对象分析法)相关概念、设计原则、UML

weixin_45975667的博客 307

【TiktokAPI】Tiktok直播API与实时互动功能开发完全指南

Tiktok直播API允许开发者创建、管理直播,并实现各种互动功能。/*** 获取Tiktok直播API访问令牌* @param {string} client_id - 应用ID* @param {string} client_secret - 应用密钥* @param {string} code - 授权码* @param {string} redirect_uri - 重定向URI* @returns {Promise<object>} 访问令牌响应*/try {}),

Mageia的专栏 3203

软件构造课复习笔记【4】

4-1可复用性的度量、形态与外部表现 复用的级别: 源代码级别的复用 模块级别的复用:类/抽象类/接口 库级别的复用:API/包 系统级别的复用:框架 什么是软件复用 面向复用编程:开发出可复用的软件 基于复用编程:利用已有的可复用软件搭建应用系统 复用的作用: 降低成本和开发时间 经过充分 测试,可靠、稳定 标准化,在不同应用中保持一致 但支持复用性越强的软件开发成本同时越高,性能差些: 针对更普适场景,缺少足够的针对性 使用已有软件进行开发: 可复用软件库,对其进行有效的管理 往往无法拿来就用,

weixin_43596418的博客 405

【QML初学者文档】一问读懂QML基础开发(内附大量简单源码)

QML是Qt的一大特色,拥有强大的UI制作能力。但是想要学好QML,还需要一些细节和技巧的掌握。本篇文章将为你提供完整的QML知识体系,让你成为Qt的UI魔法师!

BenBierBa的博客 2万+

《YOLO26/YOLO11/YOLOv8改进与系统实战》,改进与系统实战专栏目录和介绍

YOLOv8 是目前比较火和比较成熟的深度学习框架,是2023年1月发布的,由 Ultralytics 团队开发。Ultralytics自YOLOv5 开始一直积极维护和更新 YOLO 框架,因此 YOLOv8 也享有持续的维护与升级支持。因此我写下《手把手教你YOLOv8实战》专栏,专门为那些对计算机视觉、深度学习、以及目标检测技术感兴趣的读者设计。通过本专栏,你将深入理解 YOLOv8 的核心原理与实际应用,从0 开始学习并掌握如何使用 YOLOv8 完成各类目标检测任务,帮助你快速上手并掌握 YOLO

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1万+

软件构造第四章复习

4.1可复用性的度量,形态和外部表现 一.软件复用(面向复用编程+基于复用编程) 面向复用编程:开发可复用软件 基于复用编程:利用已有可复用软件搭建应用系统 复用的好处是可以降低成本和时间,但是需要标准化 二.复用方式和复用层次 1.复用方式 (1).白盒复用:源代码可见,可修改可扩展 (2).黑盒复用:源代码不可见,不可修改 2.复用层次 (1).代码复用:复制一部分或全部源代码,根据实际情况修改代码 (2).类或接口的复用:将一些架包以压缩包的形式打包放入classpath中使用 (3).API复用:类

aqaqawqar的博客 315

Calibre :Standard Verification Rule Format(SVRF) Manual (1-2)

摘要:SVRF规则文件是用于Calibre和ICverify工具的脚本文件,包含层定义、规则检查、注释、预处理指令等元素。规则文件支持全局/局部层定义、隐式层操作,以及条件编译指令(#DEFINE/#IFDEF等)。宏功能(DMACRO/CMACRO)可实现代码复用,支持参数化层操作和嵌套调用。预处理指令支持版本控制(#IFDEFCALIBRE_VERSION)和环境变量默认值设置(#PRAGMAENV)。宏中的层名具有局部作用域,可通过特殊语法实现全局层名指定,LOCAL()修饰符可创建调用作用域内的唯一

u013620135的博客 1342

软件构造总体复习

软件构造总体复习第一章 ——Views and Quality Objectives of Software Construction1-1 Multi-Dimensional Views of Software Construction-多维软件视图1-2 Quality Objectives of Software Construction-软件构建的质量目标第二章——Process and Tools of Software Construction2.1 Software Lifecycle a

sugarju的博客 548

uniapp - web-view嵌套H5网页白屏问题,<web-view>页面跳转出现白屏情况,强力解决uniapp嵌套webview页面时出现无法加载并白屏(无论本地还是线上H5网页链接都能解决)

uniapp微信小程序,uniapp APP端,uni-app web-view嵌套H5项目白屏问题分析及解决,uniapp嵌套webview页面时,出现白屏,uniapp <web-view>页面跳转出现白屏解决方法,uniapp <web-view>页面跳转出现白屏解决方法,解决uniapp的web-view打开网页在老手机上出现白屏的问题,uni-app web-view白屏处理,引入本地网页白屏,WebView 加载不出网页,一片空白webview白屏加载不出来,使用webview加载链接后白屏,u

🏆 前端领域优质创作者 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

软件工程软件产品质量要求与评价_软件工程概述(遥感院童鞋自取)

完整版pdf:http://www.northgis.cn/download/目录ref="https://http://zhuanlan.zhihu.com/write#_Toc9623119">第一部分 软件工程导论(重点)... 2href="https://zhuanlan.zhihu.com/write#_Toc9623120">第一章 概述... 21.1 软件工程... ...

weixin_39763953的博客 1885

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

软件工程复习

第五章.结构化分析与设计 结构化分析与设计方法是一种面向数据流的楚江铜软件开发方法,以数据流为中心构建软件的分析模型和设计模型,结构化方法包括结构化设计,结构化程序设计,结构化分析; 抽象是指忽略一个问题中与当前目标无关的那些方面,以便更加充分地关注与当前目标有关的问题; 结构化分析过程 (1)获取当前系统的物理模型 (2)从物理模型抽象处逻辑模型 (3)分析目标系统与当前系统逻辑上的差别,建立目标系统的逻辑模型 (4)为目标系统的逻辑模型做补充 数据字典是模型的核心 数据流图 软件系统的功能建模,描述系统

Yuan_xii的博客 2310

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Review of Software Construction

ソフトウェア構築の復習 @1.0 ver. © Yongyan Wen 2019 2019.6.18 文章目录ソフトウェア構築の復習@1.0 ver.© Yongyan Wen 20192019.6.18@[toc]第一章第一节 软件构造的多维视图Buildtime概述Runtime概述第二节 软件开发的质量属性外部质量属性内部质量属性五个关键的质量属性第二章第一节 软件生命周期和版本控制(配置管...

FZ6576625523的博客 1217

[软件工程导论] 整理归纳

软件工程导论第一章 概述1.1软件1.1.1 软件的特性1.1.3 软件危机1.2 软件工程1.2.2 软件工程的三要素1.2.3 软件质量的特性1.2.5 CASE 计算机辅助软件工程1.3 软件工程知识体系(SWEBOK)1.3.2 SWEBOK的组成1.4 软件工程职业道德规范1.4.2 软件工程人员的职业道德建设第二章 软件过程2.1.3软件过程的基本活动2.2 软件过程模型2.2.1 瀑布模型暴露的问题2.2.2 快速原型模型大概步骤2.2.3 增量模型2.2.4 螺旋模型 第一章 概述 1968

qq_34364611的博客 799

论软件设计方法及其应写作框架软考高级论文系统架构设计师论文

软件设计(Software Design,SD)根据软件需求规格说明书设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及程序流程等,形成软件的具体设计方案。软件设计把许多事物和问题按不同的层次和角度进行抽象,将问题或事物进行模块化分解,以便更容易解决问题。分解得越细,模块数量也就越多,设计者需要考虑模块之间的耦合度。

科技互联网领域深度探索者,乐于分享与写作。 1444

【系统分析师之路】2008年下系统分析师上午综合知识真题

【系统分析师之路】2008年下系统分析师上午综合知识真题

千月星跡 1242

项目文档:基于MATLAB多分类器融合的手写数字识别系统设计与实现

摘要:随着计算机视觉、模式识别和图形化交互技术的发展,手写数字识别在邮政编码识别、票据处理、表单录入、教育实验和智能人机交互等场景中具有较高的应用价值。

ZSW1218的博客 157

Spring Boot+Vue3装饰工程管理系统源码解析与实战

前后端分离架构已成为现代企业级应用的主流形态,其核心价值在于通过清晰的职责划分与技术栈分层,实现业务逻辑与展示层的解耦。在工程实践中,Spring Boot凭借成熟的生态与极简的配置,成为后端服务的事实标准;Vue3配合Vite与Element Plus,则提供了高效且响应式的界面构建能力。而MyBatis-Plus在保留MyBatis灵活性的同时,通过条件构造器、分页插件与逻辑删除等特性,极大提升了单表CRUD的开发效率。MySQL 8.0作为稳定可靠的存储层,其新特性与配置细节也需谨慎处理。这套技术组合

weixin_36282234的博客 217

【山东大学】web数据管理——复习笔记

山东大学软件学院WEB数据管理复习笔记。期末考试复习总结。

欢迎你。 7657

华中科技大学计算机组成原理慕课,计算机运行奥秘:计算机组成原理

课程学完后,同学们能设计自己的CPU,并以此为基础开发自己感兴趣的各类智能硬件。同时,通过该课程的学习,还能极大提升大家软/硬件协同的系统级编程能力!为后续课程的学习和未来从事软件设计、硬件开发奠定坚实的基础!本课程的具有如下特点:1)注重科研向教学转化。教学团队来自华中科技大学系统结构国家重点学科和外存储系统国家专业实验室,具有主持和参与973等重大科研项目的经历;教学内容能与科研实际有机结合;...

weixin_29000891的博客 463

LLM / VLM / Agent 面试全链路复习指南:从 Transformer 八股到 RAG 与模型评估实战(Datawhale Hello-Agents 参考答案解析)

本文基于 Datawhale Hello-Agents 仓库 [Extra-Chapter/Extra01-参考答案.md](https://link.gitcode.com/i/dc08e9950a176b2e106bc08800392128) 这一面试复习文档整理成文。该文档系统覆盖了大模型(LLM)与视觉语言模型(VLM)核心理论、RLHF 对齐技术、Agent 应用开发、RAG 检索增强以

gitblog_00410的博客 379
上一篇: 通过一个软构问题了解System.out.println
下一篇: 软件构造第四章——委派,六种复用设计模式
入过栈你
博客等级 码龄7年 2粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值