软件设计中的数字:7

“ 使软件更易理解的秘密:米勒法则”

小游戏

学习之前先一起玩一个小游戏。

3秒钟时间,看看下面的图片中有多少个小块?

在这里插入图片描述
3秒到了,数出来了吗?22个。

没数出来也没关系,我也没数出来o(╥﹏╥)o

现在,我对上面的小方块施一下魔法,重新再来一遍,还是3秒。

准备,开始!在这里插入图片描述
这次怎么样?数出22这个数字了吗?还是6、10、6这几个数字?

神奇吗?

其实这就是米勒法则的魔力。

今日知识

依靠魔法数字7约束元素数量,可以使软件更易理解(降低认知成本、降低维护成本、增加可扩展性)。

开发中常见的元素有:

  • 包(父元素为项目)
  • 类(父元素为包)
  • 属性(父元素为类)
  • 方法(父元素为类)
  • 参数(父元素为方法)
  • 一行代码(父元素为方法)
  • ……

以方法为例,类中的方法数量也应该遵循米勒法则(即方法数量小于等于7个)。如果超出此数量,可以通过重构来优化软件结构(使用数字7约束,找到相似点分类)。

但需要注意的是,这样虽然可以降低代码的认知难度,但却也要付出不少其他成本(开发成本、风险成本等),实际操作时应权衡各个质量属性后进行综合决策。

后记

在这里插入图片描述
画图的时候,右图明明是我复制左图后一个个小块移动分组的,但写文章时怕数的不对,又重新数了很多遍,甚至还有几次数出23个(汗)。


但右图却很有信心,一定是6+10+6个,从没再数过。是不是又证明了文中提到的方法确实有效呢?还是挺有趣的吧

内容还感兴趣吗?公众号中会有更多相关内容持续更新哦
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用户需求甄别和筛选的6大标准

产品经理日常经常接收到大量的需求,并不是所有的需求都需要开发,需要进行甄别和筛选,这样有利于确保项目的成功、优化资源利用以及提高产品质量。 那么针对这些用户需求进行甄别或筛选的评判标准是什么?需求筛选可以说是初步的需求…

力扣刷题 day1

移动零 283. 移动零 - 力扣(LeetCode) 看到这道题,是否第一个想法就是双指针,下面我们就来使用双指针来完成这道题. 图: 代码: java: // 移动 0 双指针public void moveZeroes(int[] nums) {for (int current 0, dest -1; …

Android 系统省电软件分析

1、硬件耗电 主要有: 1、屏幕 2、CPU 3、WLAN 4、感应器 5、GPS(目前我们没有) 电量其实是目前手持设备最宝贵的资源之一,大多数设备都需要不断的充电来维持继续使用。不幸的是,对于开发者来说,电量优化是他们最后才会考虑的的事情…

全景3d云展览编辑平台让您的展示更加高效、专业、有趣

在当今数字化浪潮中,线上三维云展编辑平台以其独特的优势,成为企业展示自我、吸引客户的新利器。我们的平台专为不同行业定制,提供海量展厅模板,让您的云展厅快速成型,既提升了建展效率,又大幅节约了成本。…

宋仕强论道之新质生产力

宋仕强论道之新质生产力,宋仕强说当前5G通信、人工智能、万物互联、工业互联网、数字经济、新能源技术和产业等领域正蓬勃发展,成为未来经济增长的重要推动力,也是目前提倡的新质生产力的重要组成部分。而这些领域的发展都离不开数据的采集、…

如何在CentOS7本地搭建ONLYOFFICE办公套件结合内网穿透实现公网访问

文章目录 1. 安装Docker2. 本地安装部署ONLYOFFICE3. 安装cpolar内网穿透4. 固定OnlyOffice公网地址 本篇文章讲解如何使用Docker在本地服务器上安装ONLYOFFICE,并结合cpolar内网穿透实现公网访问。 Community Edition允许您在本地服务器上安装ONLYOFFICE文档&…

CoSeg: Cognitively Inspired Unsupervised Generic Event Segmentation

名词解释 1.特征重建 特征重建是一种机器学习中常用的技术,通常用于自监督学习或无监督学习任务。在特征重建中,模型被要求将输入数据经过编码器(encoder)转换成某种表示,然后再经过解码器(decoder&#x…

栈结构(详解)

1.栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈&am…

UE4 自定义shader获取灯光位置

UE4.26:How to get the direction of specific directional lights in custom node material? - #4 by Arkiras - Rendering - Epic Developer Community Forums 获取灯光位置的shader,应该是这个了atmosphere sun light vector 和vertexNormalWS的叉乘add一个固有…

【数据库系统工程师】2024年5月考前最后冲刺指南

一、备考关键: 高效率的备考方式:多轮迭代学习 △ 基础阶段 △ 大面积撒网(60%) 略读-> 做题 -> 回顾 -> 精读 △ 积累阶段 △ 有针对性的突破(30%) 完成所有章节之后,进行真题测试&#x…

【C++】命名空间、缺省参数、函数重载、引用

文章目录 1.认识命名空间2.命名空间的使用3.C的输入和输出4.缺省参数4.1缺省参数的概念4.2缺省参数的分类 5.函数重载6.引用6.1引用的概念6.2引用的特性6.3常引用(重点题目)6.4引用和指针的区别 1.认识命名空间 C总计63个关键字,C语言32个关键字 下面让我们学习一…

难以重现的 Bug如何处理

对很多测试人员(尤其是对新手来说)在工作过程中最不愿遇到的一件事情就是:在测试过 程中发现了一个问题,觉得是 bug,再试的时候又正常了。 碰到这样的事情,职业素养和测试人员长期养成的死磕的习性会让她…

常用的内外网文件传输方式及优缺点

在现代企业环境中,内外网文件传输是一项至关重要的任务。这涉及到数据的安全性、传输效率以及操作的便捷性等多个方面。 每种方式都有其独特的优缺点,下面我们将逐一进行分析。 1、FileLink 优势:FileLink是一款专用于企业内外网隔离后的文…

Spring Boot | Spring Boot 整合 “异步任务“ 的实现

目录: 一、异步任务1.1 "无返回值" 异步任务调用 :① 创建项目② 编写 "异步调用方法" ( 使用 Async 注解 )③ "主程序启动类"中 开启基于 "注解" 的异步任务支持 ( 使用EnableAsync注解 )④ 编写 "控制层" 相关…

Linux本地部署Nightingale夜莺监控并实现远程访问提高运维效率

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

轴承制造企业“数智化”突破口

轴承是当代机械设备中一种重要零部件。它的主要功能是支撑机械旋转体,降低其运动过程中的摩擦系数,并保证其回转精度。轴承是工业核心基础零部件,对国民经济发展和国防建设起着重要的支撑作用。 轴承企业普遍采用以销定产的经营模式&#xf…

Android Studio开发之路(九)创建android library以及生成aar文件

一、需求 我做了一个camerax相机opencv图像处理图片上传服务器功能的android应用,应客户需求要将其改成一个SDK,由客户加到他们自己的app里边。 于是,我需要制作一个library,打包成aar文件(jar:只有代码,没…

ATFX:美国通胀率平台期,或助力黄金延续涨势

ATFX金属:5月9日19:00至5月10日19:00,COMEX黄金的小时级别出现一波持续24小时的上涨走势,最高触及2385.3美元,累计涨幅2.78%,成为上周最佳的短线交易时机。R阻力线形成后,COMEX黄金进入下降通道&#xff0c…

2024年趋势:6款AI问答机器人工具推荐

众所周知,随着科技的发展,人工智能技术充斥着我们的生活。其中,AI问答机器人已经成为了我们生活和工作中不可或缺的一部分。它们不仅能够帮助我们快速获取信息,还能提供个性化的服务和建议,帮助我们快速解决问题。本文…

LayaAir引擎全面支持淘宝小游戏、小程序、小部件的发布

在最新的3.1版本和2.13版本中,LayaAir引擎已经全面支持了淘宝小游戏、小程序和小部件的开发和发布。这一重大更新,标志着LayaAir引擎与电商巨头阿里巴巴旗下的淘宝平台形成生态合作,在为广大开发者提供更加强大、高效的跨平台开发工具和解决方…