〖软件开发〗
holy_phoenix
这个作者很懒,什么都没留下…
展开
-
通过实验看 Java 中私有成员是否能被继承
关于 Java 中,子类能不能继承父类中的私有成员的问题,似乎颇有争议。在 SUN 授权 Java Language Specification 一书中,作者认为子类可以继承父类的私有成员,只是不能访问罢了。我们知道,子类可以通过声明具有相同名字的属性来覆盖掉从父类中继承而来的相应属性,也可以声明具有相同名字相同签名的方法来覆盖掉从父类中继承而来的相应方法。也就是说,如果子类可以从父类中继承私有成原创 2005-09-23 12:48:00 · 4948 阅读 · 13 评论 -
设置 Tomcat 自动重新加载 web 应用程序
Tomcat 中自动重载 web 应用程序的配置:修改 TOMCAT_HOME/conf/server.xml 文件,添加 标签让指定的 web 应用程序自动重载。内容如下: ... /yourwebapp" docBase="youwebapp" debug="0" reloadable="true"/>原创 2007-02-01 18:43:00 · 2925 阅读 · 0 评论 -
Refactoring to Patterns 读书笔记(三)
应用 Strategy 模式替代条件逻辑结构Martin Fowler 在他的 Refactoring 一书中写道:“One of the most common areas of complexity in a program lies in complex conditional logic.”我们通常使用条件逻辑结构决定程序中的哪个算法代码会被执行,而业务相关的算法经常会发生变化,例原创 2007-03-18 23:39:00 · 1330 阅读 · 0 评论 -
Refactoring to Patterns 读书笔记(二)
用 Factory 模式封装具体类对于在一个包中实现了同一接口的具体类,不必让客户代码来直接地实例化这些实现类,应该创建一个 Factory 类来负担这样的责任。这样做的好处是: 1. 遵守了“面向接口编程,而非面向实现编程”的原则。 2. 减轻了代码中的“概念负担”(conceptual weight)。使用 Factory 类屏蔽有关包内实现类的细节,客户代码就只需要了解接口和 Facto原创 2007-03-17 14:02:00 · 1182 阅读 · 0 评论 -
Refactoring to Patterns 读书笔记(四)
应用 Template Method 模式 在继承结构的各个子类的方法实现体中,可能会出现这样一种情况,即方法体中的代码按照相同的顺序执行类似的步骤,而它们的步骤之间略有不同,也 就是说在方法体中不变行为(invariant behavior)和可变行为(variant behavior)混合在一起。因此在子类中存在着重复代码用来表示其不变行为。(Number one in the stin原创 2007-03-25 00:00:00 · 1335 阅读 · 0 评论 -
Refactoring to Patterns 读书笔记(五)
应用 Composed Method 模式 这大概是最简单的模式之一了,甚至可能有人会觉得如此简单的咚咚居然被成为“模式”是非常可笑的。不过,Kent Beck 曾说过:“some of his best patterns are those that he thought someone would laugh at him for writing.”Kent 就是在他的 Smalltal原创 2007-03-25 22:13:00 · 1199 阅读 · 0 评论 -
测试驱动开发
作为极限编程的核心实践之一,测试驱动开发的大名我已仰慕许久。但将测试阶段放置在开发过程的最前端,对于很多像我一样学习、应用传统重量级开发流程的程序员而言,这样的做法似乎实在是太不可思议。所以,我在开发中,还是保留着先实现,后写测试用例的做法。但最近因为工作流程的一些变化,让我不得不重新审视自己的一些做法,即使是找寻不到“银弹”,期望好歹也能找到些有用的“铜弹”、“铁弹”。于是又捡起了在书架中染尘已原创 2007-07-19 23:26:00 · 1576 阅读 · 1 评论 -
Ubuntu 下安装 Oracle XE
Oracle 为 Ubuntu 用户设立了专门的 apt 源服务器,只需要在 /etc/apt/source.list 中添加一行:deb http://oss.oracle.com/debian unstable main non-free 即可。在运行 apt-get update 命令之前,还需要将该源服务器的公钥添加在本地 apt 系统的密钥库中。首先下载公钥:wget http://os原创 2007-08-15 19:34:00 · 4105 阅读 · 2 评论 -
有关函数返回值类型的问题
李卫公在他的 blog 中讨论了一个有关函数返回值的问题。其在文章中的初始问题,大致可以描述为:需要编写一个函数,从 HMLT 源代码中提取某个节点的文本,在提取失败的情况下,应当返回一个空字符串还是 null 值。李卫公在文中说明了,如果在失败的情况下返回一个空字符串的话,对于该函数的调用者而言,是无法区分出该函数是从目标节点中提取到一个空字符串,还是实际上什么也没有提取到。通常来说,一个函数所原创 2007-08-22 14:29:00 · 3423 阅读 · 0 评论 -
Refactoring to Patterns 读书笔记(一)
应用 Create Methods 模式代替构造器(constructor)在面向对象的语言中,类的构造都是通过类的构造器完成的。但是OOP技术经过这么多年的发展,发现直接把构造器暴露给客户使用,在实践中并非一个很好的技术方式,故此各种 Factory 模式应运而生。就 Java 语言而言,构造器的缺点或者限制至少有如下三点:1.应为构造器的名字是不能随意选择的,只能和类名保持一致。因原创 2007-03-13 23:36:00 · 1506 阅读 · 0 评论 -
关于 Rich Client 应用的一些想法
今天在孟岩的 blog 上看到一篇关于 rich client 的旧文,文中的主题很明确,认为以 Expression/VS、Flex/Apllo 为代表的 rich client 开发终将代替现有 web 开发。个人素来青睐 rich client 程序,毕竟即使到现在 web 开发技术发展十余年,即使 Google 利用 Ajax 给用户带来了相当不错的体验。但是,至少到目前为止,这些技术原创 2006-12-07 10:01:00 · 1975 阅读 · 0 评论 -
运行 RMI 程序找不到类的一个原因
前几日写了一个基于 RMI 的程序,在部署的时候发现:运行 Server side 程序的时候,总是报告 java.lang.ClassNotFoundException。虽然把所有的 JAR 都放置在了该放置的位置,运行 Server side 程序时候也指定好了 -cp 参数,但似乎一切无济于事。后来通过不断尝试发现,在运行 RMI 程序之前,首先执行命令: export CLASSPA原创 2006-05-31 23:40:00 · 2259 阅读 · 2 评论 -
Java 中子类是否只继承父类的非私有变量和方法?
今天在 CSDN 论坛中见到有人问在 Java中子类是否只继承父类的非私有变量和方法(原贴在此)。大部分跟贴都认为这句话是正确的,但是对于这个问题背后的本质理解却是错误的。首先我们明确一下“继承”一词的概念,在 Java 中,继承一词的意义是有限制的。一个子类只能继承其父类的可访问的成员,并且该子类没有覆盖或者说隐藏父类中的那些可访问成员。所以,一个类的成员就是指在这个类中所声明的属性和方法,原创 2005-09-22 00:25:00 · 10739 阅读 · 7 评论 -
《通过实验看 Java 中私有成员是否能被继承》续
我在蔽文《通过实验看 Java 中私有成员是否能被继承》中所举的例子有一个错误,使用了属性而不是方法来验证私有成员是否能够被子类所继承。在 Java Programming Language 中,有这么一段:“字段(field)只能被隐藏,而不能被覆盖。如果在子类中声明了一个和父类中相同名字的字段,那么父类中的字段仍然存在,但是不能再简单的使用其名字来访问父类中这个被隐藏的字段。”所以,在上文所涉原创 2005-09-24 19:22:00 · 5138 阅读 · 5 评论 -
需求的难题
需求的定义:(1)用户解决问题或者达到目标所需要的条件或者权能(capability);(2)系统或者系统部件要满足合同、标准、规范或者其他正式规定文档所需具有的条件或者权能;(3)一种反映(1)或者(2)所描述的条件或权能的文档说明。——1997版 IEEE 软件工程标准词汇表 在软件开发中,我们通常会遇到许多问题,这其中有很大一部分问题就涉及到对非正式信息的收集、不明确或者未明确的功原创 2005-09-25 23:54:00 · 1198 阅读 · 0 评论 -
如何从 CVS 中删除文件和目录
1. 删除文件的步骤: a) 确保没有对需要删除的文件进行过任何未提交到 CVS 的修改。 b) 将需要删除的文件从工作目录中删除。 c) 使用“cvs remove filename”命令将文件从 CVS 中删除。 d) 使用“cvs commit filename”命令提交删除操作。 例子:$ cd test$ rm *.c原创 2005-12-02 23:18:00 · 23926 阅读 · 0 评论 -
怎样在从服务器 log out 之后继续运行程序
一般来说,通过终端连接到 Linux服务器上运行服务器的程序,如果终端和服务器之间的连接断开的话,通过该终端启动的服务器程序也会相应的终止运行。如果想要程序在用户从服务器注销之后继续运行,我们可以使用nohup 命令来做到这一点。通过 nohup 启动的程序,将会忽略系统的挂起(hangup)信号,也就能够使得程序会在用户注销之后依然在后台运行下去。原创 2006-01-05 09:48:00 · 2185 阅读 · 7 评论 -
信息技术发展的四条自然法则
1. 软件,而不是硬件,决定着技术的状态和变化的步伐。2. 社会取代一样事物是为了发现更好的事物,而不是更新的事物。3. 有形的总是战胜无形的。4. 技术终究只是手段,而不是目的。原文摘自 David Gelernter 的 Tapping into the Beam,该文可见于 The Next Fifty Years(中文版《未来五十年》)一书。转载 2006-04-19 08:16:00 · 1588 阅读 · 0 评论 -
Smalltalk for Everyone Else
在 ONLamp.com 上看到 Keith Fieldhouse 的《Smalltalk for Everyone Else》一文。开篇 Keith 即鼓励开发者们保持旺盛的学习欲望,努力做到每年了解学习一门新的程序设计语言,因为“Learning a new language, especially one that forces you to re-examine some of your原创 2006-10-06 14:51:00 · 1410 阅读 · 0 评论 -
RMI 程序能在 Windows 上运行,却在 Linux 上报错的一个原因
上周因为工作需要,写了一个 RMI 程序。程序在我自己的电脑(Windows 平台)上可以正常运行,但是当把程序提交到公司的 Linux 服务器上之后却出了意想不到的问题。在命令行中启动 rmiregistry 之后,启动程序的服务器端,这时 JVM 提示:java.rmi.UnmarshalException: Error unmarshaling return header: java原创 2006-05-21 23:40:00 · 2373 阅读 · 0 评论 -
利用正则表达式反向选择数据
最近有朋友问如何在文件中选择不包含诸如1900、1901、……1999字符串的行,目标文件中所有数据都是由数字字符组成。如果使用 grep 这样的工具,只用写很一个非常简单的正则表达式就能解决问题:grep -v 19/d/d target_filegrep 的 -v 选项表示选择 target_file 中不匹配目标正则表达式的行。对于诸如 Java 或者 Ruby 这样的程序设计语原创 2007-11-26 16:50:00 · 14101 阅读 · 0 评论