软件最大的追求是什么?

淘宝/天猫商家必看:不懂技术也能搞懂的奇门对接原理与ERP/WMS联调避坑指南 本文为淘宝/天猫商家详细解析阿里奇门对接原理与ERP/WMS联调避坑指南,帮助不懂技术的商家轻松管理数据对接流程。通过标准化接口和安全传输,奇门解决了代运营店铺数据获取难题,提升发货效率。文章还提供了联调阶段的实用技巧和常见问题解决方案,助力商家高效完成系统对接。 阅读详情
这段时间,Java世界有两件事情值得关注:工业界力推SOA;在开源领域,即将推出的Spring 2.0将支持非贫血模型,将OO编程推向一个新的阶段。   无论SOA全新架构推出还是OO的持续发展,他们都追求同一个终极目标:松耦合。   当我们在Java波涛汹涌的潮流中奋击时,我们常常会思考?我为什么要这样做?甚至,我们会想松耦合真的那么酷?可维护性真的是软件唯一?也许我们迷失了方向。   我们要好好探究一下,软件的最大追求是什么?   我们的大学计算机教育只是教会我们如何编程?这如同技工学校中教会学员如何使用车床一样,当我们学会了编程,接下来是什么呢?是不是就没有了呢?是不是就是如同车工那样只需日复一日的反复编程呢?   其实,当你在一个系统中持续编程(增加新的东西),这个系统就变得复杂了,你面临最大的挑战是如何整理你自己的产物。   也就是说:大学教育只教会我们如何“增加新的东西”,但是没有教育我们如何“整理这些东西”,而后者是目前软件领域日新月异不断发生的革命的新动力。   下面我们以具体代码来说明“增加新的东西”和“整理这些东西”完全属于不同层次的学问,有些人谈到软件只会想到算法和数据结构,认为这些才是科学,其实这是将软件数学化,软件不只是科学计算的工具,它自身也是一门科学,更象管理学/经济学一样,是科学和艺术的结合。   在最近Java(TM) Boutique网站上刊登出一篇文章Measuring the Complexity of OO Systems,衡量OO系统的复杂性,该文对软件复杂性几个著名公理进行了详细阐述,这些公理如果你不进行学习和培训,即使你使用OO语言Java等这样工具,还是显示你是“业余”的。   软件复杂性包括以下部分(引自Measuring the Complexity of OO Systems):    * Cyclomatic Complexity (圈复杂性)    * Response for Class (类的响应)    * Weighted methods per class (每个类重量方法)   Cyclomatic Complexity   Cyclomatic Complexity可以用下面代码来说明:   Cyclomatic Complexity (CC) = number of decision points +1   其中number of decision points是指一个if else之类的条件判断语句,比如,是下面这个条语句:   public void isValidSearchCriteria(SearchCriteria s){   if(s!=null) {     return true;   }else{     return false;   }   }   Cyclomatic complexity 对代码的可测试性和可维护性上有很大影响,正如上例指出,当你要测试isValidSearchCriteria()方法 ,你必须写三个测试用例来验证它。   如果这个CC值增加,将有更多的判断点(decision points)数量,也就意味着需要花费更多的力量来测试这些方法。详细更多说明可参考Measuring the Complexity of OO Systems一文。   所以,if else 或while 等条件语句是对真正OO的一种伤害(这是非OO公理见Thomas McCabe),可以极端地说:一个好的OO系统几乎在业务逻辑层看不到超出两个以上条件的if else等判断语句,这些条件语句都是可以被GoF设计模式的状态模式/策略模式等替代。   当你的Java系统中充满了大量的if else语句,虽然你使用很酷的语言工具,但是说明你的思维是传统过程的,需要重新学习和培训。   Response for Class(RFC)   这是著名的 Chidamber and Kemerer公理之一。以下面代码来说明:   public class RegistrationManager {   public void createRegistration(RegistrationData regData){     DataAccessManager manager = new DataAccessManager();     AuditManager auditManager = new AuditManager();     //save the registration     manager.saveRegistration(regData);     //audit the creattion     auditManager.createAuditRecord(regData);   }   public Registration findRegistration(String regNumber){     DataAccessManager manager = new DataAccessManager();     Registration reg = null;     //find the registration     reg = manager.findRegsitration(regNumber);     return reg;   }   }   这个类RegistrationManager 依赖其他两个类DataAccessManager 和 AuditManager 。   按照公理公式:   RFC = M+ R (M = 这个类中方法个数. R = 其他总数)   在上例中,我们统计类响应RFC数目如下:   在RegistrationManager中方法数目 = 2   调用了DataAccessManager的方法数目 = 2   调用了AuditManager的方法数目 = 1   这样:RFC(RegistrationManager) = 2 + 2 +1 = 5   当一个类和很多其他类存在依赖时,它就变得复杂甚至难以修改和维护,这样,RFC值越大,表示你的系统味道越坏。   当然,因为OO系统是基于类和方法,不可能开发出一个0值RFC的系统,但是我们追求的目标是一种平衡,当你设计OO系统时,必须时刻注意这些公理,尽量避免类的编码达到一个RFC高值。   我们如果使用现代一些模式:如Ioc模式,可以帮助我们方便不费力气地达到这样一个平衡,因此,使用Spring/Jdon之类框架是降低RFC值的一个捷径。   Weighted methods per class   之前几个公理是介绍如何通过类之间交互调用使得软件系统变得异常复杂,一个系统或一个特定的类自身也会变得异常复杂,有很多方法,Weighted Method Per Class公理帮助我们量化定义这些情况。   这个公理定义会依据两种情况:一个类实现;不同的实现。   WMC 1 = 一个类中所有方法个数.   WMC 2 = 所有方法的Cyclomatic Complexities个数.         无论你选择哪一种公式,一个WMC高值显示这个类也许需要被重整成多个类。   这个公式可以帮助你让类保持干净,并且和相关行为意义上更加靠近(cohesive)。   以前面的RFC例子说明:如果你将DataAccessManager和AuditManager类中的方法都定义到当前RegistrationManager类中,你会得到一个WMC高值,这说明这个类需要重整了。   良好的软件设计   前面章节我们反复提到重整(refactoring),它的意思就是:你不但会“增加新的东西”,而且还要学会“整理这些东西”(重整)。   正如儿童玩玩具一样,他可以无师自通很快学会玩一个新东西,但是,当他玩完很多新玩具以后,他就很难学会整理他到处乱丢的玩具。由此可见:学会编程不值得骄傲(可能源自天生),懂得如何整理才是真正的专业程序员。   现在,让我们回到问题的本质,上述列举了软件的复杂性,复杂会导致难于维护和测试,那我们需要整理,那么整理是否可量化一种程度呢?   我们使用“松耦合”这个概念来表示易于维护、易于测试、易于扩展的程度,当然,松耦合值越高,我们系统更易于维护。当前,软件世界的发展,SOA、Ioc/AOP不都是在追求松耦合的最大化吗?   松耦合一个反义词“紧耦合”,从我们学会玩编程这个玩具开始起,我们就面临两种选择:一种朴素的、无需训练的、近似自然的“紧耦合”路线;一种是经过科学培训的“松耦合”道路。选择哪一条道路就取决于你是否受过专业训练了。   所以,对于编程这个玩具,不在于你是否会玩,而在于你怎么玩?玩的水平。如果不明白这个道理,中国软件的萧条永远不会结束。
JW01二氧化碳传感器实战:5分钟搞定Arduino环境监测系统(附完整代码) 本文详细介绍了如何使用JW01二氧化碳传感器与Arduino快速搭建环境监测系统。通过简单的硬件连接和完整的代码示例,读者可以在5分钟内实现CO2浓度实时监测,并了解数据解析、常见问题解决及进阶应用扩展。JW01传感器的高精度和易用性使其成为创客和嵌入式开发者的理想选择。 阅读详情

相关推荐

通过JLink下载实现工控MCU批量烧录实战案例

利用JLink下载工具实现高效稳定的工控MCU批量烧录,提升产线效率。案例详细解析了脚本配置与自动化流程,突出jlink下载的可靠性和可扩展性,适用于大规模嵌入式部署场景。

weixin_30205153的博客 812

经典文摘:浅谈软件可维护性问题

一、前言很多包括自己在内的开发人员都会经常去借用(我们不用剽窃这个词了!呵呵)开源代码进行二次开发;或者在前辈的遗留代码下,继续修修补补。这种经历往往并不像看起来那么简单——有时看懂,进而修改别人的少许代码,都会觉得老虎天——无从下手,究其原因主要是代码晦涩,关系复杂,难以隔离影响等。而这时我们或者抱怨前人代码写的愚蠢,垃圾;或者又会自惭自己编码水平太次。其实这种困境的起源除了自己笨以外,更多是因...

我心依旧,明月长歌 2456

Python、Selenium实现问卷星自动填写(内含适配个人问卷的方法)

使用Python、Selenium实现问卷星自动填写,内含适配个人问卷的方法。

DaenCode的博客 3837

对Softmax函数的理解

目录 1.名字理解 2.优点 3.缺点 4.应用 5.总结 1.名字理解 1)软最大,相较于硬最大来说。硬最大非黑即白,只能输出一个最大值;软最大输出的是——每个类别最大的概率分布。 2)eg就像一篇文章,可能有多个主题,输出每个可能主题的概率值。 2.优点 作为激活函数,Softmax采用指数函数形式—— 1)将输出的数值拉开距离,以此来分类。 2)反向传播梯度下降更新参数的时候方便求导。 3.缺点 作为激活函数,Softmax采用指数函数形式—— 1)自变量大,输出值的数值

bosong的博客 1237

使用everything出现mem_virtual_alloc(): Fatal Error: out of memory解决方案

本文主要介绍了使用everything出现mem_virtual_alloc(): Fatal Error: out of memory解决方案,希望能对使用everything的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

打破RK3588 GPIO中断响应延迟的枷锁,开启高效编程

本文针对RK3588芯片在智能安防和工业自动化应用中出现的GPIO中断响应延迟问题展开深入分析。通过硬件原理剖析,发现延迟主要源于中断控制器优先级设置、线路干扰等硬件因素,以及中断处理函数复杂、内核调度延迟等软件问题。提出硬件优化方案包括合理布局布线、电源稳定设计,软件层面则通过精准配置设备树、精简中断处理函数、利用工作队列等内核机制进行优化。测试结果显示,优化后中断响应延迟从50-80ms降至10-20ms,高负载下也能稳定在50ms以内。文章最后展望了AI技术在中断调度中的潜在应用价值。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 362

Java代码质量检查工具及使用案例

前言在现在的软件开发中,由于软件的复杂度越来越高,业务也覆盖很广,各个业务模块业务错综复杂。这样就需要我们需要团队开发,在我们团队中开发人员的经验、代码风格样式都不一致,以及缺乏统一的标准,从而导致我们的整个项目的的代码难以阅读,不便于后期维护。这几天在研究代码质量管理,根据在网上搜集的资料及跟前辈学的一点经验整理一下,有需要的同学们可以查看,也便于以后自己回顾。主要对下面的七块进行分析编码格式规范代码重复代码覆盖率依赖项分析复杂度监控Java模拟技术代码评审和重构接下来的使用Eclipse 插件来揭示这些

Firstlucky77的博客 2340

Vue - 简约大气 404 页面

效果图 实现代码 复制即可。 <template> <div> <div class="error"> <!-- 图片可保存到本地 --> <img src="https://img-blog.csdnimg.cn/20210715111039922.png"> <p>抱歉!你访问的页面不存在或已删除 :( </p> <span class="back" @click="go(

🏆 前端领域优质创作者 3370

softmax的魅力

softmaxsoftmaxsoftmax(软最大值),势必有与之对应的HardMaxHardMaxHardMax(硬最大值)。hardMaxhardMaxhardMax其实就是我们常用的maxmaxmax函数,假如有三个数:z1,z2,z3z_1,z_2,z_3z1​,z2​,z3​,现在想求这三个数最大值,直接比较就可以,大就是大,小就是小,没有争议。所以叫“硬最大值”,如果不是直接比较数值本...

熊伟 385

ESM2蛋白预训练模型 蛋白质、氨基酸向量表示

参考: https://github.com/facebookresearch/esm https://huggingface.co/facebook/esm2_t33_650M_UR50D https://esmatlas.com/resources?action=fold tokenizer_对输入蛋白会头尾添加cls、eos特殊字符,占两个字符长度 参考:https://github.com/facebookresearch/esm 直接clone下来代码

weixin_42357472的博客 1万+

骚戴笔记公告

骚戴笔记公告

我从不打没有准备的仗! 2万+

软件最大的追求是什么?(转)

  这段时间,Java世界有两件事情值得关注:工业界力推SOA;在开源领域,即将推出的Spring 2.0将支持非贫血模型,将OO编程推向一个新的阶段。  无论SOA全新架构推出还是OO的持续发展,他们都追求同一个终极目标:松耦合。  当我们在Java波涛汹涌的潮流中奋击时,我们常常会思考?我为什么要这样做?甚至,我们会想松耦合真的那么酷?可维护性真的是软件唯一?也许我们迷失了方向。  我们要好好

Johnson技术天地 3679

【技能】伪真openclaw主动式智能体—告别‘巨婴’AI工具人:体验主动智能体的魅力

摘要: 传统AI常因被动执行、缺乏闭环而令人抓狂。Proactivity主动执行能力将AI从"指令跟随者"升级为"主动合伙人",具备预判需求、自动推进、断聊恢复、问题自解等能力。其核心原理在于建立AI专属工作体系(持久化内存、动态任务层、临时缓存层、归档复盘层),通过7步闭环(感知触发→状态恢复→边界校验→方案探索→动作决策→执行落地→状态留存)确保安全高效。

海兰 209

开发及软件工程:软件最大的追求是什么

这段时间,Java世界有两件事情值得关注:工业界力推SOA;在开源领域,即将推出的Spring 2.0将支持非贫血模型,将OO编程推向一个新的阶段。   无论SOA全新架构推出还是OO的持续发展,他们都追求同一个终极目标:松耦合。   当我们在Java波涛汹涌的潮流中奋击时,我们常常会思考?我为什么要这样做?甚至,我们会想松耦合真的那么酷?可维护性真的是软件唯一?也许我们迷失了方向。   我们要好...

sunxboy的专栏 175

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

窃以为软件的最大追求是在合适的地方做正确的事

  前段时间读了《软件的最大追求是什么》,击节叫好,深以为然,虽然该文章很多地方显得有点极端。       如今的软件系统越来越复杂,如果软件的结构不好会影响软件的可维护性,重构代码是一件极其痛苦的事情。       关于软件的复杂性问题,我做了一些思考:       1) Cyclomatic Complexity (圈复杂性 = number of decision points +1   

crispopo的专栏 716

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

mccabe java_Java编程:软件最大的追求是什么?(转)

Java编程:软件最大的追求是什么?(转)[@more@]  这段时间,Java世界有两件事情值得关注:工业界力推SOA;在开源领域,即将推出的Spring 2.0将支持非贫血模型,将OO编程推向一个新的阶段。无论SOA全新架构推出还是OO的持续发展,他们都追求同一个终极目标:松耦合。当我们在Java波涛汹涌的潮流中奋击时,我们常常会思考?我为什么要这样做?甚至,我们会想松耦合真的那么酷?可维护性...

weixin_39716510的博客 136

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

软件设计准则

这个帖子总结一下曾经huawei工作的一些理念以及zui

kalok_zhang的专栏 794

软件企业管理——无为而无不为

软件企业管理——无为而无不为  很高兴收到了林锐博士的新书《如何管理软件企业》,收到后基本上是一口气读完,读完后比较大的感受就是全书的可读性相当好,使阅读的过程很顺畅,而且很多内容都是作者多年研发管理实践的经验总结,最值得一提的就是全书没有太多的晦涩的理论词语,更多的是配合很多研发实践的案例和古往今来的案

华章IT官方博客 1087

和谐软件过程--和谐宣言之术数无定

和谐软件过程--和谐宣言之术数无定 和谐软件过程,是对整个软件过程的指导思想,是世界观是方法论,而不是对实施细节的明确规定,例如和谐软件过程不会告诉我们出差补贴需要给多少,而只是指导我们根据物质、精神补偿的需要给予补贴。 和者平也,谐则衡之。和谐软件过程的基本假设是各方都想把自己的利益最大化、做人做事浮躁。 和谐软件过程只有释义与宣言两部分,一个宣言一个释义,一个思想一个观点,一个原则一个方...

yansuqin1 307
上一篇: Java 开发环境的过去、现在和将来
下一篇: 面向对象的思维方式
netaspp
博客等级 码龄18年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值