你有大泥球吗/h2>
这是使您的朋友惊奇的实验。
您可能会通过某种耳机在手机上听音乐。 我们将在这里考虑的头戴式耳机由两个耳塞(入耳式耳机,而不是覆盖耳朵的头戴式耳机)组成,它们通过电线连接到插入电话本身的插Kong中。 断开耳机与手机的连接。 展示给你的朋友。 图1显示了这种耳机的典型示例。
图1:耳塞和插Kong的耳机。
当您用拇指和手指握住耳机线时,请晃动它们,直到您的朋友无聊流泪。 请注意,电线可能会暂时相互缠结,但始终会返回到图1的未缠结状态。现在,小心地将头戴式耳机折叠到裤子的口袋中,然后走很长的路,拖曳一个朋友与您目睹您没有触摸耳机更远。 最后,返回您的朋友,并从裤兜中小心取出耳机。
TA-DA!
这些金属丝将神秘地塌陷成缠结,无序的缠结,扭结和扭曲,这是最令人困惑的复杂性和创造力–所有这些都无需您触摸! 图2显示了从裤子的口袋里掉下来的抱歉的耳机。
图2:从口袋中取出耳机(实际结果)。
不要告诉任何人,但这是秘密……
为什么会这样为什么电线不缠结
为了回答这个问题,我们必须研究在两种情况下都扮演重要角色的三个角色,以下两种情况分别称为“自付费用”和“自付费用”。
首先是热波动。 这指的是头戴式耳机的晃动,既可以通过在自付费用场景中上下摇动,也可以通过在步入式场景中步幅较慢的动作来明确地晃动。 两种机制都会使耳机受到能量脉冲,从而导致其零件随机移动。
其次是重力。 重力往往会拉低耳机的所有部分,并且当插Kong和耳塞位于电线末端时(并且在图1中将耳机保持在其长度的大约一半位置时),那么耳塞和插Kong会倾向于将其自身朝向耳机。图1的底部
第三是空间扩展。 两种情况之间最大的差异也许就是它们所经营的竞技场的规模。 在自掏腰包的情况下,高举耳机可以使重力极大地拉伸耳机线。 结的形成依赖于两部分接触的导线。 随着体积的增加,这种接触变得几乎不可能。 在口袋里的狭窄空间中,将金属丝压在金属丝上,打结的可能性变得更大。
(摩擦也起着作用,在自掏腰包的情况下很容易通过重力克服风阻,但是在口袋内的情况下布对布的表面电阻使电线接触的时间比可能发生的时间长增加打结的可能性。)
因此,请在自费情况下考虑耳机。 拖拉耳机会导致其移动,并在电线中引入一些新的弯曲和扭曲。 然而,在整个过程中,重力不断地将耳塞和电线从其固定点向下拉,因此随着拖船能量的散失,重力已经开始消除松动的弯头。
但是,在口袋里的情况下,每个步幅都会给头戴式耳机带来微弱的能量冲动,足以使头戴式耳机移动很小的量。 钢丝被限制在口袋中,并且在上方不受任何支撑,它们在重力的作用下不会伸出来,甚至可能汇聚在口袋的底部,在它们的底部相互缠绕,从而形成最佳的结形成条件。
尽管这样描述很乏味,但我们可以从另一个角度来看这些事件:微观状态与宏观状态。 现在事情变得更加有趣了。
微观状态和宏观状态。
我们可以将耳机的“微状态”想象成不是耳机一小部分的状态,而是其完整的配置:在一个瞬间即可准确描述耳机的位置。它的耳塞,插Kong以及电线的整个长度和位置。
与此相反,“ Macrostate”是耳机的广泛且未详细描述。 出于稍后将要解释的原因,头戴式耳机的“顺序”是我们最感兴趣的-即它看起来如何凌乱和纠结-因此,我们将使用尽可能少的信息来描述此顺序。 我们将使用一小部分信息(是或否)来回答问题:“此耳机看起来有条理吗
我们可以说,从头戴式耳机的初始微状态A开始,只有一组微状态处于热可访问状态,因为这种微状态偏离A到即将到来的能量脉冲所允许的程度。 考虑到这种能量脉冲的随机性,进入这些可访问微状态中的任何一个的可能性均等。 让我们说系统正好从微状态A过渡到微状态B。
对于自费情况,重力不断尝试将耳机从微状态B拉回到微状态A(或类似的状态),因此微状态B可用的可热访问微状态集会略有偏差,因为重力会阻止系统到达距离B远至B距离A远的状态。但是,对于内装方案,一旦耳机到达微状态B,则新的可访问微状态集将包含相等数量的微状态,这些微状态会从A移回A它。 并且,鉴于新的微状态的选择是随机的,因此,自付费方案将允许耳机进入自付费方案无法访问的更多微状态。
想象一下,您可以算出耳机可以找到的所有微状态,也就是说,您可以拍摄耳机线可能占据的每个可能位置的快照。 如果仅关注一根导线,则可以说该导线在形成直线时看起来有序:它包含0个折弯。 它看起来仍然有1个折弯,或者可能是2个或100个折弯。但是在一定数量的折弯之上,它开始显得无序。 这完全符合对该术语的随意理解。 电线可以支撑多少个弯头也许数千。 或成千上万。 或数百万。 关键是,我们将电线的绝大多数微状态称为“无序”,而只有一小部分称为“有序”。
因此,并不是说将高昂的耳机放在高空时要比放在口袋里时少的方法,而是将耳机放在口袋中可以随机探索更多数量的可用微状态。这些微状态中的绝大多数对应于无序的大状态,因此内置式耳机极有可能最终陷入无序状态。
这到底与软件有什么关系/h2>
软件结构也表现出这种微状态/宏状态双重性。 Java程序的包结构揭示了通过依赖关系连接到其他包的包。 在任何给定时间的这种结构代表系统的一个微状态。 程序员增加了功能并进行更新,这是随机的热波动,略微改变了封装结构,使系统陷入了新的微状态。
(当然,程序员不会对代码库进行随机更新,因为他们不会从源代码中随机选择文本字符并将其翻转。但是,没有人能够提前准确地预测一年的更新价值。在这种意义上–在这种不可预测性和本质上无模式的意义上–程序员的编码可以建模为对该程序的随机输入。)
从各个微状态的细节退缩,我们通过询问“该程序看起来有序吗来评估系统的宏观状态。 如果订购的话,我们说程序是“结构完善”; 否则为“结构不良”。 几乎没有程序包间相关性的小型程序通常看起来是有序的。 但是,随着程序的增长,不可避免地会出现这样的情况,即程序包之间的依赖关系变得密集,过度拉伸并开始循环返回自己:这样的程序包结构确实值得描述“无序”。
布莱恩·富特(Brian Foote)和约瑟夫·约德(Joseph Yoder)令人难忘地将任何此类混乱的系统标记为泥浆大球 ,声称: “泥浆大球无规地构造,蔓延,马虎,风管带和吊索,意大利面条编码丛林。” 他们还声称,泥泞的球是事实上的软件结构,而不是例外,我们的耳机沉思表明了为什么会如此。 由于Java软件包可以自由相互依赖而不受限制,因此产生混乱的相互依赖的软件包的方法要多于有序的一组相同软件包,因此,鉴于程序员输入的热波动,程序会发现自己受到了推动。进入一系列随机选择的微状态,并且由于大多数微状态对应于无序的大状态,因此大多数系统最终都将处于无序状态。
图3显示了四个程序的程序包结构,这些程序被描绘为四个斯波克林图 ,其中每个圆圈代表一个程序包,每个直线表示从上到下的程序包的相关性,每个曲线表示从下到上的程序包的相关性。 尽管图形很小,但是大多数程序员只会认为这些程序中的一个结构良好。
图3 –答: JUnit 。 B: Spoiklin Soice 。 C: FitNesse 。 D: Struts 。
除了一个关键点外,所有这些都仅是一种美学上的好奇:程序的结构直接取决于更新成本的可预测性,通常还取决于实际成本本身。
结构良好的程序可以清楚地显示哪些软件包使用其他软件包提供的服务,从而简化了对任何特定软件包更改所涉及的成本的预测。 另一方面,结构不良的程序在这种令人窒息的依赖关系下令人窒息,以至于甚至识别出可能源自特定更改的受影响程序包也变得繁琐,使成本可预测性蒙上阴影,并经常导致成本成比例地过大增长。
在图3中,程序B是使用径向 封装设计的,该封装只允许在顶层封装的方向上进行封装依赖性。 这样的限制反映了耳机的高空支撑,允许重力将其拉长并保持自发性。 这样的限制使得形成一个大泥球就像在高空举起的头戴式耳机突然崩溃成一系列结一样不可能。 但是,精确的机制并不重要。 重要的是该程序是根据系统原理设计的,该原理积极限制了程序可能进入的微状态数量,同时确保这些可居住的微状态与有序的,结构良好的宏状态相对应。
没有人将结构不良的程序设计为结构不良的程序。 相反,程序的结构很差,因为构建程序所依据的结构原理不会阻止程序变得如此。
也许程序员不应该问:“为什么事实上的程序结构会陷入困境 但是,“为什么忽略良好的结构化原则
摘要
有些人发现诸如“热力学”,“平衡”和“熵”之类的词令人生畏,因此探讨这些概念的帖子应推迟引入它们。
翻译自: https://www.javacodegeeks.com/2014/08/the-most-important-factor-in-software-decay.html
文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览33845 人正在系统学习中 相关资源:android实现手机摇晃摆动效果_android开发-Android代码类资源…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!