- 博客(20)
- 收藏
- 关注
原创 java精神 (基于函数式组合子逻辑的java parser框架)
一。 释名。为什么叫精神?如果你熟悉c++,那么你可能知道一个叫做”spirit”的parser库。它利用c++的模板元编程能力,使用c++语言本身提供了一个递归下降文法解析的框架。我这里介绍的jparsec库,就是一个java里面的递归下降文法解析框架。不过,它并非是spirit的java版本。Jparsec的蓝本来自Haskell语言的parsec库。Parsec是一个基于monad的pa
2004-12-02 02:12:00 7936 3
原创 再谈树和线性化
前些日子,写了一篇关于二叉树和遍历的文章。原因是看到有些讨论热衷于研究怎么样给一个二叉树的库实现线性的ireator.结果文章出来,因为我本来想让代码说话,而csdn贴代码的功能太差,没人看懂了我的意思。但是,通过在allaboutprogram上和纸鹤兄的讨论,我发现好象这个东西无论如何是值得写明白的。搞明白它对理解面向接口,基于概念而不是实现的设计思想有很大好处。各位有兴趣的可以到
2003-06-10 12:04:00 4726
原创 从二叉树和iterator看代码结构设计 (关于adapter的运用)
前段时间,论坛上几个人很热烈地讨论二叉树里做iterator。还有人专为此给一些C++界的名人写信,俨然很专业的样子。老实说,我当时看了这个论题,感觉有点无聊,为什么?因为二叉树就是二叉树,它的结构就是:左儿子,右儿子,父节点等。iterator的结构是线性的前驱,后继。两者虽然不是风马牛不相及,但也应该是互相独立的概念。要给二叉树做一个iterator不是不能,只要定义一个遍历规
2003-04-08 14:25:00 4237
原创 编程语言的最终梦想:静态类型安全
常听人说“强类型”。但个人对强类型都有不同的理解。有的认为C++就是强类型,有的认为C也是强类型。因为它们都有类型检查。可见,如果没有一个明确的定义,谈“强类型”不免是自说自话。 那么,可以给“强类型”下一个什么样的定义呢?最原始的定义是这样: 静态类型系统将检查所有的错误。只要通过了静态类型检查,程序将不会有bug.但是,明显这是不现实的,因为有些bug是纯粹逻辑上的。比如说
2003-01-12 14:31:00 5204
原创 面向对象语言概论(四)
四,彻底划清界限(继续分离Subclassing和Subtyping)在第二节我们讨论了部分分离Subclassing和subtyping的方法,即subclassing-implies-subtyping. 现今的许多面向对象语言,如Java, C#都是采用了这种技术。除此之外,还有一种进一步分离Subclassing和subtyping的方法。这种被称作inheritance-is-
2002-11-02 00:25:00 4101
原创 面向对象语言概论(三) 基于类的高级特性
第三章基于类的高级特性 (Advanced Class-Based Features)传统的基于类的面向对象语言的一个主要特点就是inheritance, subclassing和subtyping之间的密不可分的联系。很多的面向对象语言的语法,概念,就是从这三者而来的。比如说,通过subclassing, 你可以继承父类的一些方法,而同时你又可以在子类中改写父类的方法。这个改写过的方法,通过
2002-11-01 23:23:00 4098
原创 面向对象语言概论 (一)
面向对象语言概论 (译自Martin Abadi, Luca Cardelli的对象理论一书的第一部分)译者前言这本书是我们上面向对象类型理论的教材。当时上这门课时,心里满不以为然,觉得自己的C++和OO已经颇有造纸,C++和Java的类型系统不说倒背如流,也是轻车熟路,上这么一门课不是白拿学分?哈哈! 但一上起来,才发现自己竟如井底之蛙一样。老天,原来就这么简单的面向对象竟有这么
2002-10-25 16:24:00 4864
原创 面向对象语言概论 (二)
4. Subsumption和Dynamic Dispatch (译者按:呵呵,黔驴技穷,找不到合适的翻译了) 从上述的几个例子来看,似乎子类只是用来从父类借用一些定义,以避免重复。但是,当我们考虑到subsumption, 事情就有些不同了。什么是Subsumption呢?请看下面这个例子: var myCell: InstanceTypeOf(cell) := new cell
2002-10-25 16:24:00 4160
原创 refactor遇到死胡同。
郁闷, refactor遇到死胡同。我有一个接口Pool, 如下:public interface Pool{ Worker getWorker();}用来从池中取得一个Worker对象。Worker的接口是:public interface Worker{ public void start(Runnable r);}另外有一个接口PoolOwner, 作为一个Pool的拥有者,可以对Poo
2002-09-08 11:17:00 3862
原创 OO随笔(关于connection pool系列的补充,兼答bonmot)
OO随笔(关于connection pool系列的补充,兼答bonmot)说起OO, 每个人都有每个人自己的见解。粗浅者如“obj.method的语法就是OO”;高深的则必侃“design pattern”.今天我也来说说我的一孔之见。什么是OO? 就是面向接口编程。无论你是用vtable, 或gp的function object, 或就是C的函数指针,正交分解也好,各种pattern也罢
2002-08-01 09:14:00 4058
原创 从一个ConnectionPool的实现看design pattern的运用 (七)
从一个ConnectionPool的实现看design pattern的运用 (七)这里是bonmot对这个Connection pool的一个意见:pooled Connection可能由于一个client忘记关闭,而导致整个pool阻塞。所以,应该对pooled Connection进行监控,对于超时的或其他invaild状态的pooled connection强制回收。下面,让我
2002-08-01 09:13:00 3847
原创 从一个ConnectionPool的实现看design pattern的运用 (source code for Java 1.1)
ConnectionPool.java:public interface ConnectionPool{ Connection getConnection() throws test.res.ResourceNotAvailableException, SQLException; Connection getConnection(long timeout) throws
2002-07-25 09:06:00 4024
原创 从一个ConnectionPool的实现看design pattern的运用 (六)
从一个ConnectionPool的实现看design pattern的运用 (六)要对不同资源重用pooling的算法?先让我们再从头审视一下我们ConnectionPool的实现。1。 Pooling算法由ConnectionMan来实现。它需要委托ConnectionFactory来具体创建Connection对象2。 ConnectionFactory负责建立连接。它封装了如何
2002-07-25 09:05:00 3748
原创 从一个ConnectionPool的实现看design pattern的运用 (续六)
这种ResourcesCollector的方法也有一点美中不足的地方,那就是,我们把我们在ResourceManImpl中使用java.util.Collection的实现细节暴露给了ResourcesCollection。如果一个ResourceMan的实现者不想用Collection,那就不太容易了。你可以说,反正Collection是个interface, 我们可以让那个Resou
2002-07-23 09:03:00 3807
原创 从一个ConnectionPool的实现看design pattern的运用 (一)
从一个ConnectionPool的实现看design pattern的运用 (一) 什么是ConnectionPool? 我们知道,JDBC提供了java.sql.Connection interface, 供我们连接不同的数据源。但是,因为与数据库建立连接是一个很大的开销,所以,我们可以把已打开的数据库连接缓存在一个连接池中,供后续的 Connection用户使用。用户使用完Co
2002-07-22 10:26:00 4202
原创 从一个ConnectionPool的实现看design pattern的运用 (二)
从一个ConnectionPool的实现看design pattern的运用 (二)好啦,现在让我们看看我们是怎样设计这个ConnectionPool的接口的。Public interface ConnectionPool{ Connection getConnection(); Void clear();}当然,这只是一个
2002-07-22 10:26:00 3855
原创 从一个ConnectionPool的实现看design pattern的运用 (三)
从一个ConnectionPool的实现看design pattern的运用 (三)根据上回对PooledConnection的分析,下面是对一个可重用PooledConnection的实现: public class PooledConnection implements Connection{ public interfa
2002-07-22 10:25:00 3709
原创 从一个ConnectionPool的实现看design pattern的运用 (四)
从一个ConnectionPool的实现看design pattern的运用 (四)好了,同学们,大家对上回的“李四猜想”有没有结果呀? 我们的口号是?。。。。。。“没有蛀牙”! No! 是“用户至上”! 既然用户有容易忘的可能,那就证明我们的工作做得不好。我们为什么非要用户做他们做不好或容易弄错的事呢? 好吧,让我们知错就改: public
2002-07-22 10:24:00 3736
原创 从一个ConnectionPool的实现看design pattern的运用 (五)
从一个ConnectionPool的实现看design pattern的运用 (五)OK, 现在我们已经把封装Connection的任务从ConnectionPool的开发者身上去掉了。他们只要实现一个辅助的ConnectionMan 接口,余下的事由PooledConnection类和ConnectionMan2ConnectionPool类来完成。 下面,再让我们仔细地看一下
2002-07-22 10:06:00 3855
原创 从C++的Return Value Optimization (RVO)到C#的value type
从C++的Return Value Optimization (RVO)到C#的value type 先看一段简单的C++代码:Type get(int I){ return Type(i);}Type t = get(1); 这里, 我们从C++的基本语义看上去, 应该是Type(i) 调用一次拷贝构造函数, 在堆栈中生成一个临时
2002-06-24 09:32:00 4528
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人