`
- 浏览:
366872 次
- 性别:
- 来自:
北京
-
http://xp.c2.com/OnceAndOnlyOnce.html
http://c2.com/cgi/wiki?DontRepeatYourself
OAOO(Once And Only Once)是我们在软件开发中需要关注的基本原则之一. 唯一性当然是一个值得追求的目标. 从正交分解的角度上说,系统可以由少数的正交基通过组合构造出来。尤其在分析阶段,我们需要牢牢把握住系统内核的几个变化维度。但是这并不意味着我们最终能够做到每种可以想见的软件元素都是唯一的,也不意味着保持唯一性永远都是最好的。
唯一性在软件中最直接的体现就是代码的重用(reuse), 除了实现起来节省了工作量之外,代码重用的另一个作用在于维护了系统中概念的唯一性,或者更广泛的说,它维护了系统中知识的唯一性。例如,如果我们经常用到圆周率Pi,我们可以选择在各处都直接写3.1415926, 也可以选择定义一个系统常数PI, 在使用的时候引用这个常数,保持关于PI值的知识的唯一性。其实只要各处的PI值是相同的,甚至只要是在误差范围内相互匹配的(例如有些地方用3.14, 有些地方用3.1415926),程序就可以正确无误的运行,这样就达到了我们开发程序的目的,并不需要什么常数定义。只是为了保证这种知识的一致性,定义一个常数无疑是最简单直接的一种方法。从理论上说,我们实际需要的只是知识在软件中能够得到一致的表达,或者更加抽象一些,我们所需要的只是知识的自洽性,而唯一性无疑是维持自洽性的一种廉价方法。特别是在一个不断演化的系统中,保持形式上的唯一性可能是实现自洽性的唯一可行的方法。
但是, 我们需要认识到知识的一致性与代码的唯一性并不是等同的,例如同样是释放资源的函数, 在不同的应用情形下我们可能将其命名为close, 也可能是destroy, 或者是dispose, 如果我们使用一个接口IDisposable.dispose(), 则引入了一种形式上的唯一性要求. 在使用reflection的情况下, 我们可以放松要求, 不要求对象实现特定的接口, 只要提供指定的函数名(例如dispose)即可. 我们也可以更加宽容, 通过外部描述性数据指定函数的用途, 只要求概念上的一致性, 例如spring中通过destroy-method属性指定对象资源释放函数. 没有语言级别的形式唯一性, 我们就无法依赖于编译器来维护其隐含的知识的一致性, 此时我们所能使用的通用方法就只有测试(test)了. 实际上, 很多知识上的自洽性要求都无法在程序中直接得到表达, 而只能通过一个构造的测试网络来进行验证.
正如排他锁(exclusive lock)是实现transaction的一种强形式一样, 唯一性也是自洽性的一种强形式。在保持了唯一性的情况下,当然不可能出现冲突的情况,也就自然的维持了系统的自洽性。但是,很多时候概念的多样性也是我们不得不考虑的内容。在C语言中, memmove函数的功能包括memcpy的功能,到底要不要取消memcpy以避免无谓的错误可不是一件容易决定的事情. 在数学上,同一个定理可能存在着多种非平凡(non-trivial)的等价表述形式, 从表面上看,它们可以是完全不相关的,但是原理上是等价的. 而不同的表述往往适用于不同的应用情形. 同样的,在软件系统中,It is ok to have more than one representation of a piece of knowledge provided an effective mechanism for ensuring consistency between them is engaged. 在软件设计中, 引入中间层是在控制内在统一性的同时获得丰富的外在表现的一种重要方式. 在CORBA中idl编译器将idl文件翻译成不同程序语言的版本, 我们在程序中使用的是特定程序语言的版本而不是直接的idl接口文件, 这些版本之间的自洽性是通过idl编译器来保证的. idl编译器所做的只是一对一的翻译工作, 它本身并没有提供额外的知识, 而它所生成的各个程序语言版本所表达的知识也是相同的. 可以想见, 一种更加复杂的,甚至是具备一定推理能力的引擎(engine)可以基于元知识进行更加复杂的变换工作, 并可以融合其他外部的知识, 最终输出一系列自洽的表现结构.例如, 我们可以根据一个描述文件生成所有CRUD(Create Read Update Delete)操作的程序代码和界面代码. 这些生成的文件中可能存在着重复的代码,可能重复的表达了某个知识, 例如界面布局等, 但是它们之间通过引擎隐蔽的存在着稳固的联系
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
1. **自洽性原则**:自洽性是放射治疗剂量计算中的一个基本概念,意味着在计算过程中要考虑辐射束与组织相互作用的所有影响,包括散射、吸收和二次电子的生成,确保剂量分布的全局一致性和准确性。 2. **笔形束技术...
基于自洽性试卷设计要求与技术PPT学习教案.pptx
自洽求解薛定谔-泊松方程的matlab程序
我们提出了在重核和轻核中等标量巨型单极和四极以及等矢量巨型偶极子共振的完全自洽计算。 该描述基于Skyrme能量密度函数,该函数确定了静态Hartree-Fock基态以及在随机相位近似(RPA)和RPA内的激发光谱,并通过在...
与文献中先前计算的不同之处在于,在有效的QMSchrödinger问题中,始终将潜在的短程散射过程的影响与远程力一起包括在内。 我们的程序满足了先前计算失败的局部波统一性。 我们提供了现象学相关性的一些潜在分析...
通过将自洽有限元法的预测结果与数值试验结果进行比较,研究证明了采用自洽有限元法预测任意形状数值混凝土模型的有效弹性性能是可行的。 在复合材料细观力学领域,已有很多方法和模型被提出用于预测复合材料的有效...
脚本可以自动修改vasp的INCAR文件内容为scf计算参数并自动提交任务
通过在格林函数的外部胶子上进行纵向投影,我们表明该腿的胶子自能始终被幻影自能代替。 然后,通过评估壳外非异常动量配置的所有图来研究所得身份。 对于三点函数,这是最一般的动量情况,对于四点函数,我们考虑...
为了支持刚性超对称性,此类背景必须允许扭转旋子。 在古典水平上,该理论的对称性可以用共形对称超代数来描述。 我们证明,使用BV-BRST方法,完整的N $$ \ mathcal {N} $$ = 6超保形代数在量子水平上持续存在。
在模拟过程中,VSPC7a会根据材料参数(如晶格常数、滑移系统、位错 mobilities等)建立数学模型,然后通过迭代计算实现自洽的织构演化,即织构的发展与材料的塑性变形相互影响并达到平衡状态。 在实际应用中,VSPC...
我们基于自洽的手性夸克-孤子模型研究了最低位置的单重子的质谱。 我们考虑到旋转1 / Nc和奇怪的当前夸克质量(ms)校正。 关于ms的小扰动,我们将相对于ms的有效手性作用扩展到了第二阶。 计算了重质重子的质谱并将...
整体来看,该论文的研究成果对于理解相互依赖网络的渗流现象具有重要贡献,其提出的简化自洽概率方法为分析和预测复杂网络中的级联行为提供了一个新的工具,这对于提高网络的稳定性和可靠性有着显著的意义。
为了从减小的样本量中估计灵敏度,已经开发了一种称为自洽近似蒙特卡洛(SCAMC)的新分析方法。 仿真表明,理想的TOF模式可以在一个σ处实现sin2θ〜5×10-9的统计灵敏度,从而将标准模式提高了大约两倍。 如果考虑...
在早期的工作中,Kawai等人。 他提出了一种黑洞形成和蒸发的模型,在该模型中,研究了崩溃的零尘埃壳的几何形状,包括一致的霍金辐射的后反应。 在本说明中,我们将重点介绍信息丢失悖论的解决方案和防火墙问题,以...
根据描述中的内容,这篇文章首次通过自洽计算描述了变形核的质子放射性,并且以介子交换模型和点耦合模型为基础,这为稳定性极限下的相互作用提供了新的测试。这一计算可以探测单粒子波函数中不同角动量的混合,对于...
自洽-肖丁格-泊松 二维薛定谔-泊松方程的自洽解
【在线客服美洽】是一种流行的第三方在线客服解决方案,旨在帮助企业更高效、便捷地与客户进行互动。通过集成美洽SDK,开发者可以将实时聊天功能轻松地整合到自己的Android应用程序中,提升用户体验,优化客户服务...
我们改变了未知的2+共振能量,而没有改变核心和价粒子自洽计算的任何结构。 我们发现速率随温度低于2-4 GK迅速增加,此后我们发现速率与2+共振能量无关地变化约两倍。 捕获机制是通过f5 / 2质子核共振顺序进行的,...
两味Nambu–Jona-Lasinio(NJL)模型的自洽平均场近似(引入了自由参数α)(α反映了不同交互通道的权重),用于研究矢量通道在 计算结果表明,与超导相中的标准拉格朗日相比,矢量通道贡献的考虑导致超流体相中的...