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

软件之禅(七)面向对象(Object Oriented)

黄国强 2023/11/11

        前文提到面向对象构建的模块控制器,根据第一性原理,从图灵机的角度,面向对象不是最基本的元素。那么面向对象是不是不重要呢?
        答案是否定的,面向对象非常非常重要。当我们面对一个具体的领域,比如我从事的半导体设备领域,面向对象是我们分析和理解半导体设备这个领域最强大、最有效的工具。所以面向对象这个工具非常值得我们花时间去研究学习。
        我个人用面向对象的方法写了三十年的程序了,介绍这个技术的文章非常多,我这里只是简单的说一下我的体会。

1 对象即神经元
        根据生物解剖学,我们知道动物的大脑是一个由众多神经元为节点接而成的神经元网络。神经元是神经系统最基本的结构和功能单位,神经元通过突起来传递信息。
        我之前提到一个观点,即所有面向对象的架构都是bridge+NVI模式或者变体。面向对象的模型可以说是对大脑的一个仿生。下图是我绘制面向对象通用模型,和神经元网络高度类似。

        面向对象的分析过程的结果就是获得这些节点的类型。这些节点通过函数或过程连接起来。当然目前这些连接完全靠人工编程,我觉得不久的将来(不超过50年),人工神经元网络将接过这方面工作。
2 发掘需求
        有了经过我们分析获得的这个模型,可以很方便与客户沟通,搜集客户需求,学习专业知识,不断修正我们的模型。行业专家与常人的主要区别在于是否拥有专业概念,我们作为开发人员要擅长学习和理解专家掌握的概念。
        我之前做过一款建筑软件,一个客户用了我写的软件,专程到公司点名要见我,他误以为我也是能和他交流的行业专家。其实很惭愧,我只是擅长用面向对象工具的专家,具体行业知识很肤浅。现在我从事半导体设备行业,我觉得我行业知识方面水平依然很一般。
        提到这件事,我想表达的观点是,作为软件开发人员,掌握面向对象工具非常重要,要成为这方面的专家。而具体行业知识,只要够用就可以了,人的精力是有限的,侧重点要分清。
3 来自于用户高于用户
        有种错误的观点是,既然专家是权威,面向对象的节点是不是完全按专家说的建立呢?
        答案是否定的。我们从用户中搜集的需求往往过于具体。比如,半导体设备公司做的设备估计有几百种类别,每个类别的设备都有不同和独特的功能,在这个层面上你是无法写出一个通用设备框架的。这时候就要祭出人类思考的最伟大的工具——抽象。
        从第一性原理,找出领域中最本质的元素,在此之上构建整个软件模型和框架。
        综上可以看出,这个抽象分析能力才是人与人产生差距的地方。当然,随着人工智能的发展,我们人类自傲的这个能力也会被取代,所以我对于整个人类的未来异常悲观。

[参考]
  1 软件之禅(六)图灵机

相关文章:

软件之禅(七)面向对象(Object Oriented)

黄国强 2023/11/11 前文提到面向对象构建的模块控制器,根据第一性原理,从图灵机的角度,面向对象不是最基本的元素。那么面向对象是不是不重要呢? 答案是否定的,面向对象非常非常重要。当我们面对一个具体的领域…...

汽车之家车型_车系_配置参数数据抓取

// 导入所需的库 #include <iostream> #include <fstream> #include <string> #include <curl/curl.h> #include <regex>// 声明全局变量 std::string htmlContent; std::regex carModelRegex("\\d{4}-\\d{2}-\\d{2}"); std::regex ca…...

RabbitMQ的 五种工作模型

RabbitMQ 其实一共有六种工作模式&#xff1a; 简单模式&#xff08;Simple&#xff09;、工作队列模式&#xff08;Work Queue&#xff09;、 发布订阅模式&#xff08;Publish/Subscribe&#xff09;、路由模式&#xff08;Routing&#xff09;、通配符模式&#xff08;Topi…...

原型制作神器ProtoPie的使用Unity与网页跨端交互

什么是ProtoPie&#xff1f; ProtoPie是一款面向设计师的软件原型设计工具&#xff0c;例如制作App界面交互展示&#xff0c;制作好的原型可以一键发布到Web服务器&#xff0c;就可以浏览器访问。由于其内置了大量常用交互类型&#xff0c;以及"程序化"模块&#xf…...

另辟奚径-Android Studio调用Delphi窗体

大家都知道Delphi能调用安卓SDK&#xff0c;比如jar、aar等&#xff0c; 但是反过来&#xff0c;能在Android Studio中调用Delphi开发的窗体吗&#xff1f; 想想不太可能吧&#xff0c; Delphi用的是Pascal&#xff0c;Android Studio用的是Java&#xff0c;这两个怎么能混用…...

SOLID 原则,程序设计五大原则,设计模式

SOLID 是让软件设计更易于理解、更加灵活和更易于维护的五个原则的简称。 单一职责(Single Responsibility Principle)&#xff1a;修改一个类的原因只能有一个。开闭原则(Open/Closed Principle)&#xff1a;对于扩展&#xff0c;类应该是“开放”的&#xff1b;对于修改&…...

Java基础——数组(一维数组与二维数组)

文章目录 一维数组声明初始化与赋值内存图解 二维数组声明初始化与赋值内存图解 数组练习 数组是多个相同类型的数据按一定顺序排列的集合。 说明&#xff1a; 数组是引用数据类型&#xff0c;数组的元素是同一类型的任何数据类型&#xff0c;包括基本数据类型和引用数据类型…...

Python爬虫抓取微博数据及热度预测

首先我们需要安装 requests 和 BeautifulSoup 库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install requests pip install beautifulsoup4然后&#xff0c;我们需要导入 requests 和 BeautifulSoup 库&#xff1a; import requests from bs4 import BeautifulSou…...

Qt QTableWidget表格的宽度

默认值 QTableWIdget的表格宽度默认是一个给定值&#xff0c;可以手动调整每列的宽度&#xff0c;也不填满父窗口 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {this->resize(800,600);QStringList contents{"11","111111111111",&…...

OpenCV(opencv_apps)在ROS中的视频图像的应用(重点讲解哈里斯角点的检测)

1、引言 通过opencv_apps&#xff0c;你可以在ROS中以最简单的方式运行OpenCV提供的许多功能&#xff0c;也就是说&#xff0c;运行一个与功能相对应的launch启动文件&#xff0c;就可以跳过为OpenCV的许多功能编写OpenCV应用程序代码&#xff0c;非常的方便。 对于想熟悉每个…...

常见排序算法之插入排序类

插入排序&#xff0c;是一种简单直观的排序算法&#xff0c;工作原理是将一个记录插入到已经排好序的有序表中&#xff0c;从而形成一个新的、记录数增1的有序表。在实现过程中&#xff0c;它使用双层循环&#xff0c;外层循环对除了第一个元素之外的所有元素&#xff0c;内层循…...

Dubbo服务消费端远程调用过程剖析

1 Dubbo服务消费端远程调用过程概述 &#xff08;1&#xff09;当消费方调用远程服务的方法时&#xff0c;会被InvokerInvocationHandler拦截&#xff0c;执行其invoke()方法&#xff0c;创建RpcInvocation对象&#xff1b; &#xff08;2&#xff09;接着会选择远程调用的负…...

华硕荣获“EPEAT Climate+ Champion”永续先驱称号

华硕持续深耕永续理念&#xff0c;努力提供低碳排放、高效能产品&#xff0c;并被全球电子委员会授予“EPEAT Climate Champion”称号。这一荣誉再次表明了华硕在永续管理方面的承诺&#xff0c;并凸显了华硕在追求永续发展上的决心。 华硕通过设立“科学基础减碳目标”、“再生…...

基于QT使用OpenGL,加载obj模型,进行鼠标交互

目录 功能分析&#xff08;需求分析&#xff09;技术点分析OpenGL立即渲染模式可编程渲染管线模式 QOpenGLWidget派生类 glwidget逻辑glwidget.hglwidget.cpp 鼠标交互功能obj格式介绍 效果bunnyCayman_GT 功能分析&#xff08;需求分析&#xff09; 基于QT平台&#xff0c;使…...

三大赛题指南发布!2023 冬季波卡黑客松本周末开启 Workshop

2023 年一众黑客松赛事中&#xff0c;为什么我们建议您选择波卡黑客松大赛&#xff1f;或许答案在于——作为开发者极度友好的技术生态&#xff0c;波卡能够从参赛者的立场出发&#xff0c;为大家提供从 0 到 1 实现项目孵化成长的机会。这里聚集了一线技术专家的资源力量&…...

数据结构与算法(Java版) | 算法的空间复杂度简介

关于算法的空间复杂度&#xff0c;下面我给大家作一个简单介绍。 类似于时间复杂度的讨论&#xff0c;一个算法的空间复杂度&#xff08;Space Complexity&#xff09;定义为该算法所耗费的存储空间&#xff0c;同样&#xff0c;它也是问题规模n的一个函数。 其实&#xff0c…...

大数据-之LibrA数据库系统告警处理(ALM-12037 NTP服务器异常)

告警解释 当NTP服务器异常时产生该告警。 当NTP服务器异常消除时&#xff0c;该告警恢复。 告警属性 告警ID 告警级别 可自动清除 12037 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称。 RoleName 产生告警的角色名称。 HostName 异常N…...

烟草5G智慧工厂数字孪生可视化平台,赋能烟草工业数字化智慧转型

随着卷烟工厂提质增效需求增强&#xff0c;信息化建设推进及生产制造系统智能化改革发展&#xff0c;各生产单元逐步升级完善数字化&#xff0c;最终实现智能制造成为必然趋势。因此&#xff0c;5G卷烟加工工厂的数字化转型迫在眉睫。中国烟草制造行业正迈向全新的市场经济时代…...

PHP编写采集药品官方数据的程序

在 PHP 中编写爬虫程序&#xff0c;首先我们需要引入一些必要的库&#xff0c;如 curl 和 file_get_contents。然后&#xff0c;我们需要设置爬虫ip信息&#xff0c;以便我们可以从指定的爬虫ip服务器上获取数据。 // 引入必要的库 require_once curl.php;// 设置爬虫ip信息 $p…...

解决Jenkins执行git脚本时报错:No such device or address问题

问题现象&#xff1a; Jenkins执行BeanShell脚本时&#xff0c;报错&#xff1a;jenkins fatal: could not read Username for http://112.11.120.1: No such device or address 解决方案&#xff1a; 解决服务器拉取git仓库的代码权限&#xff0c;使用高级子模块克隆功能。…...

泵箱控制协议

安装泵箱调试电路板基于CIU32步进电机的驱动 D:\zhuoqing\window\ARM\Keil\CIU32\2026\April\TestF003PWMPIO-V1\Source\main.c AD\Test\2026\April\StepMotorDrvF003A4950V1.SchDoc 01 泵箱控制协议一、接口修改 泵箱中的接线&#xff0c;包括有三组线缆&#xff0c; 一是步进…...

WinUtil:5分钟掌握Windows系统管理工具的一键优化与软件批量安装

WinUtil&#xff1a;5分钟掌握Windows系统管理工具的一键优化与软件批量安装 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 还在为Windows系…...

别再手搓UART了!5分钟搞定Quartus RS232 IP核,让你的FPGA秒变串口调试利器

5分钟极速部署Quartus UART IP核&#xff1a;告别Verilog手搓串口的低效时代 第一次接触FPGA串口通信时&#xff0c;我花了整整三天调试自己写的UART模块——波特率不对、数据错位、时序冲突...各种问题接踵而至。直到发现Quartus内置的RS232 UART IP核&#xff0c;才意识到原…...

避开这些坑!SAP Smartforms打印配置详解:从打印机选择到预览设置

SAP Smartforms打印配置避坑指南&#xff1a;从参数解析到实战调试 每次调试SAP Smartforms打印功能时&#xff0c;那些看似简单的参数背后往往藏着无数"坑"。作为从业多年的SAP技术顾问&#xff0c;我见过太多因为一个参数设置不当导致整个打印流程崩溃的案例。本文…...

3小时变3分钟:Dify Workflow可视化开发终极指南

3小时变3分钟&#xff1a;Dify Workflow可视化开发终极指南 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-Dify-Workfl…...

Manjaro新手避坑指南:从依赖缺失到签名错误,一次搞定所有安装报错

Manjaro新手避坑指南&#xff1a;从依赖缺失到签名错误&#xff0c;一次搞定所有安装报错 第一次打开Manjaro的终端&#xff0c;输入sudo pacman -S命令时&#xff0c;那种期待和忐忑交织的感觉我还记得很清楚。作为一个刚从Ubuntu转投Arch系的新手&#xff0c;我完全没预料到接…...

用MCNP模拟NaI探测器:从137铯源设置到能谱分析的全流程实战

用MCNP模拟NaI探测器&#xff1a;从137铯源设置到能谱分析的全流程实战 在核技术研究领域&#xff0c;精确模拟探测器响应是实验设计的关键环节。NaI(Tl)闪烁体探测器因其高探测效率和良好的能量分辨率&#xff0c;成为测量伽马射线的首选设备之一。本文将带你完成一个完整的MC…...

从需求文档到报价单:我是如何用FPA功能点分析法,成功说服甲方接受项目预算的

从需求迷雾到数字共识&#xff1a;FPA功能点分析法在预算谈判中的实战艺术 当客户第三次推翻需求文档时&#xff0c;会议室的白板上已经布满了相互矛盾的箭头和模糊的标注。甲方技术主管敲着桌子强调&#xff1a;"这个报表功能很简单&#xff0c;不就是从数据库里取个数吗…...

PyAnnote Audio技术深度解析:构建企业级说话人识别系统的全面指南

PyAnnote Audio技术深度解析&#xff1a;构建企业级说话人识别系统的全面指南 【免费下载链接】pyannote-audio Neural building blocks for speaker diarization: speech activity detection, speaker change detection, overlapped speech detection, speaker embedding 项…...

GitHub 国内访问太慢?2026 最新中国镜像站 + Git 换源指南(亲测有效,速度翻10倍)

&#x1f935;‍♂️ 个人主页&#xff1a;小李同学_LSH的主页 ✍&#x1f3fb; 作者简介&#xff1a;LLM学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...