面向对象编程(Object Oriented Programming)概念及延伸(三)

程序员的纯文本日志实践:programming.log 工作流 编程日志(programming log)是一种面向开发者思维过程的技术记录方式,其核心在于用最简化的纯文本格式,实现低认知负荷、高可追溯性的技术反思与知识沉淀。它基于时间线性结构而非标签分类,依托 Unix 工具链(grep/vim/git)达成零依赖、抗格式腐烂、跨平台一致的工程可靠性。相比传统笔记工具,它更强调‘记录即思考’的即时性与真实性,天然适配调试复盘、架构决策、代码审查等高频开发场景。作为 developer journal 的轻量级实现,它不替代文档系统,而是补全了从代码提交到思维留痕之间的 阅读详情

    昨天我发布了该系列文章的第二部分,今天我将做第三部分的总结,这也是该系列的最后一个部分,希望能写的更有质量些。

3.17 什么是多态(Polymorphisms)?

        多态是个专用的术语,它的意思是‘很多样子’(many shapes)。更精确的讲,多态是种能力,通过这种能力让相同的操作可以广泛地应用于不同类型的事物。

       在OOP中,多态是通过很多不同技术实现的,它们分别是方法重载(method overloading)、运算符重载(operator overloading)以及方法覆盖(method overriding)实现的。在下面的内容中我将对它们逐一进行介绍。

3.18 什么是方法重载(method overloading)?

        方法重载简单的说就是在类中定义具有相同名称多种方法。每个类成员都有一个唯一的签名,方法签名由方法名称、类型形参的个数及其每个形参(按从左到右的顺序)的类型和种类(值、引用或者输出)组成,只要签名不同,就可以在类中定义具有相同名称的多种方法。例如下面的代码示例:

 

        public class Test

        {

                void F() { … }                       //F()

                void F(int x) { … }                 //F(int)

                void F(ref int x) { … }            //F(ref int)

                void F(out int x) { … }           //F(out int),错误

                void F(int x, int y) { … }        //F(int, int)

                int F(string s) { … }              //F(string)

                int F(int x) { … }                   //F(int), 错误

                void F(string[] a) { … }         //F(string[])

                void F(params string[] a)       //F(string[]),错误

        }

 

        我们来仔细分析一下上面的例子,由于ref和out参数修饰符都是方法签名的一部分,因此F(int)和F(ref int)这两个签名都有唯一性,但是F(ref int)和F(out int)不能在同一个类中进行声明,因为尽管ref和out在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用ref参数,而另一个方法采用out参数,则无法重载这两个方法。此外返回类型和params修饰符不是签名的组成部分。不能仅基于返回类型或是否存在params修饰符来实施重载,因此上面列出的关于方法F(int)和F(params string[])的声明会导致编译时错误。

3.19 什么是运算符重载(operator overloading)?

        运算符重载(通常很少人知道它是ad-hoc多态)是一种特殊的多态,在运算符重载中,像运算符+、-或者==将会有多态的功能,它们将根据参数的不同的类型而产生不同的行为。下面是运算符重载的一个例子:

 

        public class Complex

        {

                private int real;

                public int Real

                {

                      get { return real; }

                }

 

                private int imaginary;

                public int Imaginary

                {

                       get { return imaginary; }

                }

 

                public Complex(int real, int imaginary)

                {

                        this.real = real;

                        this.imaginary = imaginary;

                }

 

                public static Complex operator +(Complex c1, Complex c2)

                {

                        return new Complex(c1.real+c2.real, c1.Imaginary + c2.Imaginary);

                }

        }

 

        上面的例子中我们对加号进行了运算符重载,重载后它将可以进行两个complex对象的成员相加。

3.20 什么是方法覆盖(Method Override)?

        方法覆盖是一种语言的特性,它允许子类覆盖父类提供方法的实现。

        子类需要给出自己的方法定义,但是它的签名要和父类的方法一样。这也就是说,当进行覆盖时,子类的方法应该具有和父类被覆盖方法一样的名称和参数列表。下面是方法覆盖的例子:

 

        public class Complex

        {

                private int real;

                public int Real

                {

                       get { return real; }

                }

 

                private int imaginary;

                public int Imaginary

                {

                       get { return imaginary; }

                }

 

                public Complex(int real, int imaginary)

                {

                        this.real = real;

                        this.imaginary = imaginary;

                }

 

                public static Complex operator +(Complex c1, Complex c2)

                {

                        return new Complex(c1.real+c2.real, c1.Imaginary + c2.Imaginary);

                }

 

                public override string ToString()

                {

                        return (String.Format(“{0}+{1}”, real, imaginary));

                }

        }

 

        在上面的例子中我们通过在运算符重载下增加了一个方法扩展了Complex这个类。这个类包含一个覆盖的方法,名字是“ToString”,它重写了默认的“ToString”方法的实现。通过以下代码可以进行测试:

        Complex num1 = new Complex(5, 7);
        Complex num2 = new Complex(3, 8);

        //在这里用到了运算符重载后的加法 

        Complex sum = num1 + num2;

        // 使用覆盖的ToString方法
        Console.WriteLine("({0}) + ({1}) = {2}", num1, num2, sum);
        Console.ReadLine();

3.21 什么是用例(Use case)?

        用例就是文本形式的情节描述,广泛地应用于需求的发现和记录工作中。一个用例可以说是参与者通过系统交互而实现的一个情节,一个用例将参与者和系统功能进行映射。有一点很重要的是,参与者不一定是实实在在的人本身。举个例子说,当系统与别的系统通信的时候,它也可以充当一个角色和参与者。下图是一个用例图:

 图1 用例图

        在另一个角度看,用例将用户和系统的交互表示了出来,它的特点是:

        (1)捕捉用户可见的功能;

        (2)获得用户明确的需求。

        一个完整用例将很大程度上定义了系统的需求:所有用户可见的信息以及用户可以通过系统做些什么。下面是个用例图描述了登陆模块:

图2 登陆模块用例

3.22 什么是类图(Class Diagram)?

        类图广泛地被用于描述系统中对象的类型和它们之间的关系。类图中的类结构和内容将被用来设计系统元素,例如:类、包或者对象。类图描述了在设计系统时的三种不同的方面,即概要设计、详细设计以及实现的过程。当类图设计好后,这些方面将明确,这也将巩固系统的设计。

        类图、物理数据模型以及系统整体模块图,在我看来对于现今快速应用程序的开发中是最重要的几个图。类图中,类之间的关系包括:关联、继承、实现、依赖、聚合以及组合,下面显示了类图中这些关系的UML标记法:

图3 类关系UML标记法

3.23 什么是包图(Package Diagram)?

        包图用来描述包和它们中的元素是如何组织的。当包图用来表示类元素时,包图将提供一个可见的命名空间。在我的设计中,我使用包图组织系统不同模块的类。

3.24 什么是顺序图(Sequence Diagram)?

        顺序图使用一种可见的方法描述系统逻辑的流程,它可以以文档的形式验证你的逻辑的正确性,顺序图既可以用来设计也可以用来分析。对于动态建模来说,顺序图是最重要的UML图,它将以识别系统行为为重点。

3.25 什么是两层架构(two-tier architecture)?

        两层架构通常指的是客户/服务器架构,对于现今来说,两层架构指的是客户端上的UI(或者ASP.NET和其它网页)和服务器上的数据库。实际的应用程序逻辑既可以在客户端上也运行也可在服务器上运行。所以在这种情况下客户端将直接访问数据库。两层架构也可以是无接口处理引擎,它为远程或者本地系统提供解决方案。总之,对于上述任何一种两层架构的使用方式,它们都没有三层架构模型那么普遍。两层架构的特点是它们很简单,但是简单却牺牲了扩展性。更普遍的三层架构则引入了应用程序逻辑中间层。下图显示了两层架构:

 图4 两层架构

3.26 什么是三层架构(three-tier architecture)?

        三层架构是为了解决两层架构扩展性低的缺点而建立的,它已经被现今的系统设计者广泛的采纳,无论是在网页系统还是应用程序中。

三层架构是客户端-服务器架构,它包括了UI、业务逻辑处理以及数据存储以及数据访问部分,这些部分将按照独立模块的方式进行开发和维护。另外,我们经常听到的N层架构其实通常是指三层架构。下面是三层架构的架构图:

图5 三层架构图

        三层架构通常包含以下三层:

        1.展现层或Web Server:UI,显示数据或者接收用户的输入;

        2.应用程序逻辑、逻辑层、事务层或者Application Server:数据验证、数据库插入前的检查以及其它业务和应用程序操作;

        3.数据层或者Database Server:简单的读写数据库或者其它存储、连接、命令以及存储过程。

3.27 什么是MVC架构?

        Model-View-Controller (MVC)架构将程序的领域模型和数据表示以及建立在用户输入基础上的动作进行了分离。MVC经常被错误的使用,因为很多技术(例如:java和asp.net)按照自己的方式定义MVC,这使得它很难被理解。通常,controller在不同的上下文中被理解为不同的事物。下面的定义是我从Asp.net中找到的可能的MVC版本:

图6 MVC架构

        1.Model:类型为DataSet的数据集(有时是业务对象、对象集合或者XML)是最常用的模型;

        2.View:ASPX和ASCX文件通常处理View的职责,对展现层的数据显示和接收用户输入;

        3.Controllers:事件处理或者控制在code-behind类中。

        在复杂的N层架构的分布式系统中MVC的关键作用是把系统的展现层组织了起来。

3.28 什么是SOA(Service-Oriented Architecture)?

        SOA本质上是一个服务的集合。这些服务间互相通信,服务间通信可以是简单的数据传送,或者两个或者多个服务一起协调一些活动。

        .NET技术中,SOA是通过Web Services实现的。下面的图显示了SOA的架构:

 图7 SOA架构

       SOA可以理解为连接多个系统,以这种方式提供服务。它在IT界中将会占有很重要的地位。

       根据上面的SOA架构图,我们可以看出SOA是怎么被用来向市民提供集中式服务的。市民每个人都拥有一张ID卡(唯一的,卡里包含市民的个人信息)。每个服务中心,例如购物中心、医院以及车站和工厂都安装了电脑系统,通过这些系统都连接到了城市中央服务器,这些服务器向城市居民提供了服务。例如:当一个客户进入购物中心时,购物中心电脑系统将与中央服务器通信获取客户的信息,完成身份确认后系统将会欢迎客户,客户就可以选择择自己的购买物了,当客户购买完商品后,在他离开时,将通过电脑系统的结算流程进行购物结算,这些过程都是购物中心电脑系统管理的。支付将根据客户的ID卡上获取的信息而被自动处理。

        区域系统将与城市中心系统通信,而城市系统将与全国系统进行通信。

3.29 什么是数据访问层(Data Access Layer)?

        数据访问层(DAL)是任何N层系统的关键部分,它包含了一些了与数据库或者其它存储设备交互的代码。这些功能通常是指CRUD(Create、Retrieve、Update和Delete)。

        数据访问层需要做的尽量通用、简单、快捷以及高效,它不应该包含复杂的业务逻辑。

        我在以前做的项目中看到了很多很长、复杂的存储过程(store procedures或SP),它们使用了不同的case语句只为了做简单的选择操作,它们包含了大量的业务逻辑。如果SP变的很长很复杂的话,这说明你正在将业务逻辑混杂在数据访问层中。

总结

        本部分到此就算是结束了,总而言之,良好的面向对象编程基础对于设计良好的系统是非常关键的,一个良好设计的系统是成功的关键。当我们讨论系统设计的时候,正确地处理OOP的概念真的很重要。希望大家在今后的学习中重视基础的掌握。

        本系列的文章分为三个部分,在写的过程中肯定有遗漏,因为OOP的概念过于复杂,希望大家能够理解,有什么疏漏的地方请大家提出来,欢迎多多交流,谢谢!

 

转自:http://www.cnblogs.com/talentbuilder/archive/2010/05/02/1725969.html

can例程 ecu_基于CAN的ECU刷写流程 ​ECU软件分为bootloader和application。ECU上电后,先进入bootLoader确定application程序是否有问题,如果没有问题则跳转至application,如果application出现问题,程序会停留在bootloader中,等待刷写命令。软件刷写主要分为三部分:1、pre-programming step2、programming step3、post-prog... 阅读详情

相关推荐

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

y_u_yu_yu_的博客 1万+

三层架构详解

主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。UI层和DAL层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当然这些操作都是基于UI层的。用户的需求反映给界面(UI),UI反映给BLL,BLL反映给DAL,DAL进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)每一层都各负其责,那么该如何将三层联系起来呢?

m0_51666421的博客 1353

别再为GEE注册发愁了!用谷歌Cloud Project,5分钟搞定谷歌地球引擎账户(保姆级图文)

本文提供2024最新版谷歌地球引擎(GEE)账户注册的保姆级教程,通过谷歌Cloud Project快速完成注册,5分钟极速通关。详细解析注册前的准备、分步图解流程、常见误区及解决方案,帮助用户避开90%的注册陷阱,直达GEE核心功能区。

weixin_42557830的博客 200

三层架构介绍

了解三层架构的概念、优势与应用

TestXzing的博客 1万+

FPGA SPI驱动ADC避坑指南:以ADC128S022为例,详解时序设计与代码调试

本文以ADC128S022为例,详细解析FPGA通过SPI驱动ADC的时序设计与代码调试中的常见问题。从时钟分频计算、SPI模式选择到状态机实现,提供避坑指南和实战技巧,帮助工程师解决数据采集系统中的时序匹配难题。特别针对FPGA与ADC通信中的微妙差异,给出精确的Verilog代码示例和ModelSim仿真验证方法。

weixin_42522374的博客 458

微信小程序码 createWxaCodeUnlimit 生成总是报错 41030 的解决方案

41030错误本质上就是路径不合法。路径多写了一个斜杠路径带了参数小程序版本未发布或 app.json 配置不一致。如果确认页面存在,可以通过来跳过检查。微信小程序 getUnlimitedQRCode 官方文档路径前不能加 /,参数放 scene,发布版本要有这个页面,不行就关掉 check_path。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 475

三层架构 详解

文章目录前言什么是三层架构?为什么要用三层架构?优缺点:怎么用三层架构?实例演练: 前言 当看到一个陌生的名词时你会怎么想?what?way?how? 现在就按照这个思维框架走进“三层架构”。 什么是三层架构? 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。 1、表示层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 2、业务逻辑层(BLL):针对具体问题的

潘小蓝的博客 5303

YOLOv9改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题

本文记录的是改进YOLOv9的损失函数,将其替换成Slide Loss,并详细说明了优化原因,注意事项等。Slide Loss函数可以有效地解决样本不平衡问题,为困难样本赋予更高的权重,使模型在训练过程中更加关注困难样本。若是在自己的数据集中发现容易样本的数量非常大,而困难样本相对稀疏,可尝试使用Slide Loss来提高模型在处理复杂样本时的性能。

Limiiiing的博客 2602

三层架构

三层架构分为三层,分别是 表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。当然软件业可以分四层、五层、六层、七层这主要看需求、 含义 数据访问层:数据访问层在作业过程中访问数据系统中的文件,实现对数据库中数据的读取保存操作。 表示层:主要功能是显示数据和接受传输用户的数据,可以在为网站的系统运行提供交互式操作界面,表示层的应用方式比较常见,例如Windows窗体和Web页面。 业务逻辑层:将用户的输入信息进行甄别处理,分别保存。建立新的数..

初听不知曲中意,再听已是曲中人。 2208

MeloTTS 生成 RKNN 模型

摘要: 本方案基于RK3588平台,利用RKNN工具链实现高效语音合成(TTS)。采用MeloTTS开源模型,支持中英文混合语音生成。部署流程包括:1) 导出ONNX模型;2) 转换为RKNN格式;3) 在RK3588开发板运行。关键步骤包含环境配置(RKNN Toolkit2≥1.4.0)、模型转换(非量化处理)及音频处理实现。方案充分发挥RK3588的NPU加速能力,适用于边缘设备语音合成场景

J。 347

CloudCompare 二次开发:插件中的 PCL 环境配置与编程

在进行 CloudCompare 的二次开发过程中,我们常常需要使用点云库(Point Cloud Library,简称 PCL)来处理和分析点云数据。在 CloudCompare 的界面中,选中一个点云对象,然后点击菜单栏中的 “插件” -> “MyPluginAction”。插件将对选中的点云对象进行体素滤波处理,并更新显示结果。下面我们将展示一个简单的插件编程示例,该示例使用 PCL 对输入的点云数据进行体素滤波处理。方法进行体素滤波处理,并将结果点云赋值给选中的点云对象。文件并点击 “打开”。

2301_79331387的博客 283

面向对象编程(Object Oriented Programming)概念及延伸(二)

    之前我编写了该文章的第一部分,今天接着写第二部分,希望大家能继续支持。3.10 什么是抽象(Abstraction)和泛化(Generalization)?        抽象强调的其实是一种思想和概念,而不依赖于实现的细节。抽象最重要的功能是,可以通过抽象名字去引用对象从而达到隐藏对象中不相关细节的目的。抽象对于建立程序是十分重要的,它说明了一个对象是什么,这个对象能做些什么,而不是解释了这个对象怎么实现了这些内容的,即抽象隐藏了对象实现的具体细节,是对象的代表和说明,因此抽象是管理大型程序复杂性

体会技术牛人的高傲 888

毕设助力!从0到1构建基于YOLO的家居安防异常活动监测系统,让你的毕设守护家庭安全

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护生活”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了家居安防的哪些痛点、对比了不同YOLO模型的性能差异、系统未来能怎么优化(比如对接智能门锁/报警器、实现语音交互)。未来,这个系统还能往“更智能”的方向发展:比如结合行为分析判断异常意图、开发移动端APP实现全屋设备联动、在智慧社区中实现多家庭联防……想象空间很大。

LXY_LOVE36的博客 124

面向对象编程(Object Oriented Programming)概念总结及延伸(一)

1.介绍    笔者的梦想是成为一个架构师,但是要成为一个合格的架构师是相当不易的,它既需要丰富的项目经验也需要不断地吸取新的知识,而且在这过程中我们也要不断巩固基础知识。我也注意到了,现在主流的文章大都集中到了新技术新的框架的学习,大家对于最新的技术都怀有无比好奇的学习态度,这点是好的,可是只是一味站在高层学习而忽略了最本质的知识,这是不好的,所以笔者在吸取了很多教训之后决定写此篇文章总结自己对面向对象知识的学习。    另外,需要提出的一点是,现在的开发大多基于框架或者现有类库,因为开发人员要在很短的时

体会技术牛人的高傲 1292

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Return-Oriented Programming (ROP) 攻防实战:从基础到进阶的技术解构

本文系统讲解了ROP(返回导向编程)技术在现代二进制安全中的应用。文章从ROP基础理论入手,解析其核心原理和关键概念,如Gadget、调用约定等。通过ROPEmporium的8个经典挑战实例,详细演示了从基础返回劫持到复杂Gadget组合、栈迁移等进阶技巧。同时探讨了ROP在现代攻防场景中的演进,包括对抗CFG、ASLR等防护措施的绕过策略,并提出防御建议。文章强调ROP作为漏洞利用的核心技术,既展现了二进制安全的攻防艺术,也揭示了构建多层次防护体系的必要性。所有内容仅供学习研究之用。

fearhacker的专栏 1036

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

HIT软件构造学习笔记6- Object-Oriented Programming (OOP)

在真实世界中的对象都有两个基本的属性特征,那就是状态和行为。那我们可以延伸思维,从定义真实世界中的对象的状态和行为开始,慢慢了解面向对象编程的含义。举两个例子:那么我们进行一下归纳总结:一个对象就是一捆状态和行为的集合体。状态,是对象包含数据所在字段;行为,是对象所支持进行的操作。每一个对象有一个类,在类中可以定义对象的方法,方法和变量的字段称为类的成员。类中同时定义了数据类型和实现方法,数据类型说明了对象可以怎么被使用,而实现方法表明了对象怎么做事情。不严格的说,一个类的方法就是他的应用接口,就是我们听过

Zy0712的博客 488

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

契约式设计(DbC)实战:programming-scala-book-code-examples 的 BankAccount 与不变式示例

想写出"自带说明书"的可靠代码吗?**契约式设计(Design by Contract,简称 DbC)** 正是这样一种让代码"自我约束、自我验证"的经典方法论。在 O'Reilly 经典书籍《Programming Scala》的官方代码仓库 programming-scala-book-code-examples 中,`BankAccount`(银行账户)示例用短短几十行 Scala 代码,把

gitblog_01165的博客 977

简单总结 Reactive Programming

Reactive Programming 作为观察者模式(Observer)的延伸,不同于传统的命 令编程方式(Imperative Programming)同步拉取数据的方式,如迭代器 (Iterator)。而是采用数据发布者同步或异步推送到数据流(Data Streams)的方 案。当该数据流(Data Streams)订阅者监听到传播变化,立即作出相应。在实现层面 上,Reacti...

m0_37732829的博客 507

程序员思维日志:用Programming.log沉淀可复用的技术认知

编程日志(Programming.log)是一种面向工程师认知演化的轻量级知识管理范式,其核心在于以时间戳为索引、以问题驱动为线索、以可验证代码为证据,实现思考过程的低摩擦记录与高复用回溯。它区别于传统技术博客,不追求传播性,而专注解决‘为什么这样选’‘bug为何难定位’‘概念何时真正理解’三类不可替代的认知资产沉淀。通过纯文本+静态站点的技术栈,天然支持离线编辑、全文搜索与Git版本化演进,成为程序员对抗信息熵增、构建个人技术复利系统的底层基础设施。本文详解其设计哲学、内容结构与工程落地实践。

a6t2007的博客 366

programming.log:程序员的思维操作系统与可执行日志实践

编程日志是一种面向开发者认知规律的知识沉淀范式,其核心在于将思考过程结构化、时间序列化、代码共生化。它基于 Unix 哲学与 Git 工作流,以纯文本为载体,通过语义化命名、YAML 元数据、可执行代码块等设计,实现‘思考即留痕、日志即文档、检索即复现’的技术价值。相比传统博客或知识库,它弱化展示性、强化可追溯性与可执行性,特别适用于需要高频复用诊断路径、沉淀底层原理、支撑技术决策的工程场景。本文深入解析 programming.log 的设计哲学、文件规范、检索体系与团队协作模式。

as2886089的博客 499

从Prompt Engineering到Prompt Programming:LLM开发者的思维跃迁指南

本文探讨了从Prompt Engineering到Prompt Programming的思维跃迁,帮助LLM开发者实现从简单提问到系统化设计的转变。通过介绍函数式、过程式、面向对象和条件逻辑四大编程范式,以及模块化设计、版本控制和测试框架等工程实践,指导开发者构建可维护的AI智能体系,释放大型语言模型的全部潜能。

weixin_29240343的博客 551

programming.log:程序员的时序化编程思维手账

编程日志(programming log)是一种以时间轴为组织核心的技术记录范式,区别于主题驱动的博客或知识库,其本质是捕捉开发者在真实工程场景中的认知演进过程。它基于 Unix 时间戳强制时序归档,融合观察-假设-实验的科学思维链,通过纯文本+Git+符号链接实现极简可靠的知识沉淀。这种模式天然适配调试复盘、Code Review 反思、架构决策回溯等高频工程实践,尤其适合已具备编码能力但面临系统设计模糊、技术选型摇摆、长期演进乏力等挑战的中高级开发者。programming.log 不是输出成果,而是思

a6t2007的博客 413

Programming.log:程序员的结构化思考训练法

编程日志(programming log)不是技术博客,而是一种面向工程实践的知识沉淀范式,其核心在于将碎片化经验转化为可检索、可验证、可演化的个人知识资产。它基于认知心理学的遗忘曲线原理,通过强制上下文记录、暴露思维盲区、构建动态知识图谱,显著提升技术决策质量与问题复用效率。相比传统笔记工具,它强调极简架构(纯文本+Git)、低记录成本与高可维护性,天然适配工程师工作流——如PR前同步、Debug即时录音、会议技术降噪等场景。关键词'programming log'与'工程思维训练'共同指向一种可持续的技

aobai7842的博客 334
上一篇: 面向对象编程(Object Oriented Programming)概念及延伸(二)
下一篇: 深入学习.NET Web Services概念
Csdbfans
博客等级 码龄18年 73粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值