我们对于图形会有中心对称的图形,比如函数f(x)=sinx的图形,是关于原点的中心对称的图形,还有一种就是成轴对称的图形,比如函数f(x)=conx的图形,是关于轴x=0的对称图形。
对于计算机往往也会呈现对称的操作,这只是个人的直觉,并非其他的东西。
要想说清楚我想表达的内容是困难的,我还是会尽我所能去说明白。我们举一个比较通用的例子,C++/JAVA的内存分配问题。
C++中的内存分配和释放是要成对出现的。这里会有一个假象,就是认为内存分配和内存释放应该是成轴对称的操作,其实不是,他们是一种互逆操作,应该是一直成中心堆成的操作,之所以会成对出现,只是因为他们是互逆的。如果你熟悉内存分配和释放的原理,你会明白分配和释放完全不是一个概念。
对于这种特性,我们会涉及到编码的完整性问题。比如C++,你会明显看到new和delete的操作,但是对于JAVA你只会看到new。这里有一个很好的设计思想,就是对于这种资源(存在申请和释放的操作)的操作,我们可以设计成开放的或者是封闭的。
内存这种资源对于C++来说就是开放的,开放的好处是开发者可以更好的控制资源的使用,坏处是如果开发者没有正常的维护资源,会造成资源的泄漏。
对于JAVA来说就是封闭的,封闭的好处是资源的管理,系统可以更好的维护资源,坏处是开发者不能控制系统的资源分配情况。
这种开放的设计和封闭的设计往往还会影响到代码的操作完整性。举个例子,客户端和服务器有个长连接和短连接的连接方式(可参考TCP长连接与短连接的区别),那么当使用连接资源的时候,长连接是可以重复使用同一连接资源,因为该资源并未释放。短连接就不同了,他必须来回重新分配资源,然后实现读写功能。