置换的群特征

我们先来看看在计算机设计中最基本的三个置换,一个是从值到地址的置换方式,我们称为值-地址置换,一个是从地址到值的置换,我们称为地址-值置换。当然如果再加上对其值赋值为其他值操作或者对地址值赋值为其他地址值的操作我们称为赋值置换,那么对于这样的三个操作,其实就构成了数学意义上的群,如果我们设置地址到值的置换为a,设置地址-值置换为b,其值赋值作为其他值操作,或者对地址值赋值作为其他地址值的操作,我们统一设置为e,这样其就构成了一个群。

为什么是一个群呢?主要是构成了下面满足的性质。

设G是一个非空集合,*是它的一个(二元)代数运算(此就为置换操作),如果满足以下条件:

1. 封闭性:群内任意两个元素或两个以上的元素(相同的或不同的)的结合(积)都是该集合的一个元素。即假设对于群G操作(运算)是·,对于G里的任意元素a,b,那么a·b和b·a都必须是G的元素。

2. 结合律:虽然群元素不一定要求满足交换律,但必须满足结合律,即对G中任意元素a,b,c都有 (a·b)·b=a·(b·b) 或(a·b)·a=a·(b·a);

3. 单位元素:集合G内存在一个单位元素e,它和集合中任何一个元素的积都等于该元素本身,即对于G中每个元素a都有 e·a=a·e=a;

4. 逆元素:对G中每个元素a在G中都有元素a^(-1),叫做a的左逆元,使 a^(-1)·a=a·a^(-1)=e,而我们这里,a和b的操作就是一对逆元素对,即a·b = e;

元素的集合如果满足上述四个条件就称为群,注意,进行群运算的次序是重要的。换句话说,把元素 a 与元素 b 结合,所得到的结果不一定与把元素 b 与元素 a 结合相同。而对于G里的任意两个(可以相同)元素a,b有a·b=b·a,那么群G称为交换群,或Abel(阿尔贝群)。

从中我们可以看出,我们的这三个基本的操作其实就构成了一个阿贝尔群,同时由于在此上面进行的·操作实际上是一个叠加操作,所以我们将·符号换成 + 符号会更加贴切一些。

当前其他的置换,例如抽象的置换和继承的置换,面向方面的置换等等都是在这三个基础置换之上进行的群复合操作,也可以这样说,这三个基本的操作可以将之转换为几个集合上的三个元素,但是其他的复合置换操作就是一些在多维上的集合形成的一个大的集合,这些置换是否也构成一个更大的群呢?这恐怕需要数学家们的更进一步进行分析和探讨。

那么这样构成的群,当然具有群的一些特性,那么有哪些群特性能够更加指导软件设计的工作呢?这恐怕需要计算机理论学家更进一步进行分析和探讨。

如果我们再经过一些无法证伪的一些想法,来通过一种新的方式来思考一下,在《道德经》中有“道生一,一生二,二生三,三生万物”,而道是我们无法名状的,也就是无法通过准确的定义进行描述,“道可道,非常道。名可名,非常名”,那么我们可以简单作为类比软件设计中提到的这几个概念,针对“道”,我们是还无法准确定义的,而“一”就是我们的“置换”的动作,“二”就是我们的两个不可分离的“阴阳”,也就是我们的(值,地址)关系对,注意这种“关系对”是关键,不存在绝对的“值”,也不存在绝对的“地址”,而“三”就是我们上面谈到的三种基本置换操作,这些操作就形成了群,然后通过这三种基本的置换群,我们可以进一步演化为各种各样软件设计的方法,而通过不同层次的置换,就达到我们目前的引用、指针、函数、类、面向对象、面向方面、泛型、分层等等不同层面的置换,这些置换就是《道德经》中的“万物”。

好,上面是我的冥想,是否准确,还需证实,呵呵!

对于这一基础的置换所形成的群,其意义十分重大。由于此三个置换运算构成了群,所以此形成了一个完备的运算结果,所谓的完备性就是不多也不少的置换,形成了一个闭合的体系。在这个体系中,能够完整的表示所有在其之上的设计和实施,也就是说,如果我们只是采用这样的基本的三个置换运算,完全能够对一个软件系统进行完整的描述。而面向对象、泛型编程等等置换,判断其是否能够完整描述系统也可以通过完备性来表示,而形成群特征的集合,是完备性表示的一个简洁、有效和完整的划分。所以,将来在任何进行新的置换手法的提出,都需要考虑其是否具有完备性,同时如果能够让此层次上的置换关系的元素按照群的方式进行组合,那么将是一种更加有效、优美的划分方式,这也是群和对称密切相关所体现的。

由于置换所形成的群,表达了一种在数学意义上的“双射”的概念,而双射是一个什么意义呢?如图1-16可以看出来:

         图1‑16

广义上一切事物具有相同或者相似的系统结构就形成了同构的概念,在抽象代数中,同构指的是保持结构的双射,同时当同一集合上的双射置换就构成一个对称群。由此上面所谈到的软件设计中部分特性形成的对称群,其实表达了一个同构的概念,而在我们的设计过程中就能够通过“同构”的方法,来填补哪些可能欠缺的特性或方法。

所以,有时候,在软件设计中,如果我们采用“穷尽”的方法来验证或者表达我们的目的,此时,我们是否能够想到群的哲学意义:我们可以使用“群”自信地找到最后的结果,那么为什么我们还要进行那些毫无意义的实验呢?特别对于我们创造一些新的设计理念,此时我们也可以使用群的思维来帮助我们找到其他的“元素”,而且也可以以此来证明我们的整个体系是否是“完美”的。

转载于:https://blog.51cto.com/13832308/2132757

连载13:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...相关推荐

  1. 连载32:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

    线性化 其实本章节的设置就显得有些为难,按照常理需要大家针对后面的"线性化机制"一章节进行充分理解后,我们才能更好的进行线性化的数学抽象.然而又为了照顾统一在数学抽象的章节中,所以 ...

  2. 连载32:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...

    线性化 其实本章节的设置就显得有些为难,按照常理需要大家针对后面的"线性化机制"一章节进行充分理解后,我们才能更好的进行线性化的数学抽象.然而又为了照顾统一在数学抽象的章节中,所以 ...

  3. 连载12:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...

    信息熵观点 针对软件设计来说,我们可以将所有的设计通过结构化来表达,于是我们的所有的设计信息都可以表达成结构熵的处理.那么如果系统的结构熵越大,系统就越不稳定,系统的有序化就越小. 那么是否结构化就表 ...

  4. 连载01:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

    件设计公理化 软件设计公理化  现在是一个知识过剩的时代,培养独立思考的能力远比盲目看书更重要.                                                     ...

  5. 连载17:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...

    置换公理化的缺陷 虽然我浓墨重彩阐述了"置换"公理化作为软件设计中的种种优势,然而对于公理化过程来说,其本身的缺陷也是显而易见的. 首先需要明确的是:方法不是唯一的,公理化方法是处 ...

  6. 连载03:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

    统一化 打破了这种集合关系,那么我们需要重新整理一下我们的思路,这些特征到底是什么关系呢?感觉有点乱. 不过没有关系,我们先跳出面向对象的原有的思维方式,我们先从计算机的最基本的处理来看,在计算机里面 ...

  7. 连载03:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...

    统一化 打破了这种集合关系,那么我们需要重新整理一下我们的思路,这些特征到底是什么关系呢?感觉有点乱. 不过没有关系,我们先跳出面向对象的原有的思维方式,我们先从计算机的最基本的处理来看,在计算机里面 ...

  8. 连载08:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...

    置换的规范和度量 所以这里可以看出置换具有统一的"可替换"属性,在第二章描述的多重继承体.包含体.包容体.以及函数对象等多个结构中其置换都具有可互联的特征,比如多重继承就是将继承置 ...

  9. 连载26:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

    最小生成树 生成树: 如果连通图G的一个子图是一棵包含G的所有顶点的树,则该子图称为G的生成树. 生成树是连通图的包含图中的所有顶点的极小连通子图. 图的生成树不惟一.从不同的顶点出发进行遍历,可以得 ...

最新文章

  1. 直方图均衡化opencv(彩色、灰度图)
  2. 一张图读懂八大全国一体化算力网络国家枢纽节点一览
  3. scala 定义空list_Scala的存在类型
  4. 【CyberSecurityLearning 17】三层交换技术及实验演示、内部网络规划、HSRP
  5. 汇编工具安装三:已经配置好的汇编开发工具!
  6. [JSOI2007]字符加密
  7. nDPI流量协议分析(应用软件识别)
  8. html中鼠标左键自定义多级菜单,CSS多级菜单的实现代码
  9. wamp新建虚拟目录无法运行的解决方法
  10. 手机号段对应地区编码_什么是编码器?了解两种类型的编码器
  11. 程序员的离职小技巧之如何写出让接班同事无法维护的超级代码!建议收藏
  12. 英特尔CAS缓存加速软件优化SSD性能
  13. PTA - 二分查找
  14. 七、最短路径——弗洛伊德(Floyd)算法
  15. 阿昆同学的Java学习日记Day1
  16. 100个软硬件都要懂的示波器基础知识
  17. 攻防世界-MISC新手区
  18. 语音信号线性预测分析(MATLAB实战篇)
  19. buu [AFCTF2018]One Secret, Two encryption
  20. 学Java 这样入门 28天轻松掌握

热门文章

  1. matlab平差程序设计,基于MATLAB的水准网平差程序设计与实现
  2. 简明的后台样式查询模板
  3. 至尊版影视双端app源码对接苹果CMS 带商城码支付
  4. linux 卸载skype,如何将Skype与Ubuntu Unity集成 | MOS86
  5. 压测 mysql关闭连接_MySQL 压测
  6. PT短网址缩短还原网站源码,php版+html版
  7. Vue系列vue-router的项目打包(三)
  8. WebClient.Credentials 属性 (System.Net)
  9. 看图说cnblogs-强大的SEO功能【有实例】
  10. asp.net 2.0 防止密码框被清空的解决方案