除了Java之外你需要知道的事情1 ——通过equals方法讲讲离散数学

除了Java之外你需要知道的事情1

——通过equals方法讲讲离散数学

/**

* @author 和睦

*/

作为一个合格的Java程序员,你可以不知道鼠标是什么(我老妈说她在玩286的时候,她不大理解鼠标在DOS环境下的作用,现在很多习惯玩linux shell的老资格也未必常用鼠标,当出现图像化界面后才变得如此重要,不过在触摸屏即将普及的今天,鼠标······,好吧我承认跑题了不要拍砖)。但是如果想真正成为一个高级Java软件设计师,《离散数学》确实是一个灵感的源泉和强化逻辑思维体系培训教材。

Ok?某些自学成才的Java牛人未必知道《离散数学》是什么,如果您知道了请自动跳过此段。根据国防科技大学出版社(长沙)1998年出版,王兵山等人主编的《离散数学》一书我们可以知道,随着计算机科学地发展,为了解决计算机领域中的一些普遍问题,将大量的近代数学作为工具,进行了整合,从而形成了“离散数学”。由于它所用的数学工具具有“离散型”和“实用性”的特点,所以称之为“离散数学”。这下,各位知道了吧,“离散数学”就等于计算机数学,它就是专门为计算机从业人员服务的。不过按照愤“书”族的想法,肯定会说,“哇哦,NX,不过和我搞编程有几毛钱关系?······”(新时代读书无用论的新现象)。和睦童鞋希望大家带着问题进入接下来的阅读过程。

我相信地球的java程序员都知道到,一切Java对象都起源于Object,所以一切对象都有equals方法(虽然你可能没写,但是它是存在的)。提问:equals方法的设计规则是什么?

(愤书族的java高手可能回答:“哦,那个不用我写,我直接让eclipse自动生成就行了,%@%@#%@”。

由于反三俗规定,和睦不做回答。)

其实是有规则的,如果仔细阅览过《Java 核心技术:基础知识 V8》5.2.2的爱书族应该知道,equals的规范有五条:

1. 自反性

2. 对称性

3. 传递性

4. 一致性

5. 任何非空引用x,x.equals(null)应该返回false。

去掉第5条规则不谈,前四条规则的思想就是来自于《离散数学》中二元关系部分。并且从数学逻辑角度出发,第5条规则已经被前4条规则概括过了。其实就在我个人编程过程中出现过违反规则2与规则3的情况,由此可见eclipse的辅助功能不是万能的。后面经过我个人多年闭关修炼,参悟IT业秘籍《离散数学》,最终找到了解决办法(其实就是google+百度+CSDN=宅男技术路线图)。

秘籍(equals):

class OneObject

{

public boolean equals(Object otherObject)

{

If(this==ohterObject) return true;

//这个不解释

If(otherObject == null) return false;

//不需要解释

If(this.getClass() != otherObject.getClass()) return false;

/*这个大概解释一下,就是判断otherObject是不是OneObject的一个对象 如果不是的话就不用费事了。其实也可以采用if(!(otherObject instanceof OneObject)) return false;代替此行代码,不过请各位程序员牛人保证所有集成OneClass的类都拥有统一的语义。因为和睦是freshman所以还是保守用个了*/

OneObject other = (OneObject)otherObject;

/*将otherObject转换为相应的类类型变量*/

Return this.field1 == other.field1

&& this.fileld2.equals(other.field2)

...

&& this.fileldi.equals(other.fieldi);

/*这个部分的代码使用==用来比较基本类型域(有的书里称为类的属性),使用equals比较对象域。如果所有的域都匹配,就返回true;否则返回false。*/

}

}

以上代码如果各位需要作为基类来使用,就可以保证equals方法的要求。同时说明一下,代码中加粗斜体处可以根据各位的需要改变。(word自作聪明将部分代码大小写改变了,所以给位看官自己更正哈!)

如果每个类都这么写肯定会有点累的,所以各位可以把它当做Object类的替代类,作为项目中所有类的根类。使用方法参考代码如下:

Class MyClass extends OneObject

{

Public boolean equals(Object otherObject)

{

If(!Super.equals(otherObject)) return false;

MyClass other = (MyClass)otherObject;

Return this.field1.equals(otherObject.field1)

&& this....;

/*这部分只要添加MyClass相对OneObject添加的新域的比较即可以完成了*/ 

}

}

以上代码提供给各位看客看客是否满足equals的五条规范,如果您发现了问题请Email:lj5115714@126.com,我将尽早修改。

话说回来,继续聊聊《离散数学》在编程中的作用。总结一下目前和睦同学知道的当前默默为我们程序员发挥着重要作用的一些包含在离散数学中的理论与应用状况:

1. 集合论 亲,你知道吗?面向对象编程语言java、C++、Lisp的理论基础就是来自于集合论,当前在设计应用程序过程中提取对象时,可以参考一些结合论。关系型数据库已经不是什么新鲜玩意了,其实关系型数据库中运算规则正是来自于集合论,亲,你还记得当年那个著名的笛卡尔乘积吗?

2. 数理逻辑 亲,你知道吗?MVC设计模式,很难理解是吧?去补充点数理逻辑吧。

3. 图论 亲,还记得您学习的第一种编程语言吗?还记得算法与数据结构吗?和睦学的是标准c。传说中的欧拉图、哈密顿图、树、有向树等,都是从图论的实践啊。亲,还记得软件项目管理中的给您的项目节省了多少资金与时间的关键路径法吗?它其实就是图论中网络流理论的强大实现结果啊。

结束语:

21实际之前,所有的物理学家都是数学家,21世纪之后,所有的计算机牛人应该有一个良好的数学头脑。和睦并不是希望大家做数学NX,并且和睦推荐的书也非常薄,只要100多页(推荐理由有两个:1 这个是和睦当年的教材,个人比较熟悉;2 价格比较便宜,当然大家也可以参看其他关于离散数学的书籍)。和睦写这个文章的目的在于提醒一下,,当我们面对程序出现的问题,我们是不是应该考虑一下,计算机它爹——数学的教诲嘞?

版权所有:和睦,欢迎各位看官引用此文,不过请在email我本人(lj5115714@126.com)之后进行。和睦只想知道这篇文章对哪些人产生了影响,除了用于不正当商业用途之外,和睦当前希望各位能够引用我的文章。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值