不帅 发表于 2015-1-18 11:16:16

发布一篇诊断Java代码: 将时态逻辑用于毛病形式

你希望java的IDE整合。这个是没有必要的,重要的是你理解java有多深以及怎么组织你的代码,即使没有IDE,代码照样能够编译运行的。
只管传统的断言能够增添对Java代码所作的反省次数,但仅用它们,仍是有很多反省没法完成。处置这类情形的办法之一就是利用时态逻辑。请回想上个月的文章“AssertionsandtemporallogicinJavaprogramming”,时态逻辑有助于供应比程序中的办法更无力的断言,从而有助于加强用别的体例难以正式表达的稳定量。
我们不用吃力征采往发明有助于避免我们程序堕落的很多有效的稳定量。实践上,能够经由过程利用此类时态逻辑断言来加年夜我们打消一些最多见毛病形式的力度。在本文中,我们将研讨一些毛病形式,利用时态逻辑能会对它们发生最主动的影响。我们将把以下毛病形式用作示例:
吊挂复合(DanglingComposite)。当您的软件抛出空指针非常时这个毛病产生,由于递回数据范例的毛病暗示,以是这是个难以诊断的成绩。
损坏者数据(SaboteurData)。这类毛病在已存储的数据不克不及满意某些句法或语义束缚时产生;此时软件会由于代码利用的数据中的毛病而不是编码中的毛病而溃散。
SplitCleaner。当资本的猎取和开释按办法界限一分为二,同意某些把持流不开释它们本该开释的资本,其体现情势为泄露或过早地开释它们时,这类毛病产生。
孤线程(OrphanedThread)。当主线程抛出非常而残剩线程持续运转,并守候更多输出到该行列时,这类毛病产生;这类毛病大概招致程序解冻。
臆想完成。当您“完成”了接口,但实践上没有满意其预期的语义时,这类毛病产生。
吊挂复合毛病形式
吊挂复合毛病形式包含递回数据范例的毛病暗示、将一些范例的基础情形暗示为空值而非独自的类。如许做会招致难以诊断的NullPointerException。
比方,假定您创立了以下“厌恶的”数据范例来暗示二叉树:
清单1.一些十分糟的树
publicclassTree{
 publicintvalue;
 publicTreeleft;
 publicTreeright;
 //LeavesarerepresentedasTrees
 //withnullbranches.
 publicTree(int_value){
  this.value=_value;
  this.left=null;
  this.right=null;
 }
 publicTree(int_value,Tree_left,Tree_right){
  this.value=_value;
  this.left=_left;
  this.right=_right;
 }
}
人人注重,除作为糟的示例,请不要将这个代码用于任何别的用处!
这段代码形成了吊挂复合。二叉树叶子被暗示为摆布分支都是空值的Tree。假如我们实验向下递回如许的树,大概很简单激发NullPointerException
避免这类毛病形式的最好办法是:将数据范例的暗示重构为Composite类条理布局(请在参考材料一节参阅关于这个主题的文章)。假定您刚好已完成了如许的重构,以下所示:
<p>
多谢指点,其实我对.net网页编程和ruby也不是很了解,对与java也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。

飘灵儿 发表于 2015-1-20 19:02:07

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

小魔女 发表于 2015-1-25 21:13:08

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

海妖 发表于 2015-1-26 09:05:45

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

简单生活 发表于 2015-2-4 13:29:00

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

金色的骷髅 发表于 2015-2-9 23:32:09

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

莫相离 发表于 2015-2-15 12:01:01

是一种为 Internet发展的计算机语言

再见西城 发表于 2015-3-1 18:29:53

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

第二个灵魂 发表于 2015-3-7 05:30:28

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

活着的死人 发表于 2015-3-14 10:50:55

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

admin 发表于 2015-3-21 03:47:50

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
页: [1]
查看完整版本: 发布一篇诊断Java代码: 将时态逻辑用于毛病形式