2007年01月21日

FunctionalJ

functional program 不是某些语言的专利,使用了这个库,我们也可以在java中进行方便的函数式编程了。实际上java设计之初忽略了函数也是对象,使我们只好在很简单的情况下也要使用Interface,使得代码过于复杂。另外也由于我们更习惯命令式编程。
使用java时如果注意interface、匿名类、不变类的使用,或充分应用反射(一个java发展),我们也可以进行函数式风格的编程。

例子很多 Google一下吧。

2005年06月23日

将球编号,先选8个球,天平两边各4个,如果平衡,则不一样的在剩余的4个中,比较简单,不再赘述。

如果天平不平衡,假设左边1,2,3,4比右边5,6,7,8重。首先可知9,10,11,12为标准球。将5,6,7换成9,10,11,然后将9,10,11和2,3,4交换位置,可能出现三种情况:

1。天平变平衡了,可以得知特殊球在5,6,7中,且特殊球比标准球轻。

2。天平仍然是左边重右边轻,可以得知特殊球是1或者是8。

3。天平变成了左边轻右边重,可以得知特殊球在2,3,4中,且特殊球比标准球重。

上面三种情况均可以在剩余的一次称量机会中找到那个特殊球,问题得解。

2005年04月30日


1、Extract Method:导出方法,将大方法变为多个小方法
2、Replace Temp with Query:使用函数代替临时变量
3、Extract Class:导出类
4、Extract Interface:导出接口
5、Introduce Parameter Object:当参数列表过长时,将这些参数封装成一个对象
6、Preserve Whole Object:保持对象完整,当一个方法的参数从一个类获取时,传递类实例而不是这些值.
7、Move Method: 将方法从一个类转移到另一个类中
8、Move Field: 将域从一个类转移到另一个类中
9、Replace Data Value with Object:将基本数据类型用类代替
10、Replace Type Code with State/Strategy:使用State或Strategy模式替换枚举类型值
11、Replace Conditional with Polymorphism: 使用多态改写原来case分支代码(Templet)
12、Replace Parameter with Explicit Methods:以明确函数取代参数,减少参数个数,增加函数个数
13、Introduce Null Object:引入Null Object
14、Inline Class:将一个类去除,并将代码直接引入到引用的类中
15、Rename Method:方法改名
16、Hide Delegate:将委托关系隐藏
16、Remove Middle Man:去除中间对象
17、Inline Method:将一个方法去除,并将代码直接引入到引用的方法中
18、Extract Superclass:导出基类
19、Introduce Foreign Method:通过增加一个以类实例为参数的方法,达到给该类实例增加功能的目的
20、Introduce Local Extension:通过继承或包装,达到给某类实例增加功能的目的
21、Replace Inheritance with Delegation:将继承关系变为委托关系

2005年03月29日
面向对象设计时类有几种类型:值类、服务类、业务类、工具类
值类不言自明,所说的服务类指负责程序框架的那些类[比如Struts等等],业务类指真正系统要实现的业务功能的类、
工具类就是那些全是static函数的那些类。
主要进行建模和分析的应该是业务类,即有一些行为的类是我们应当首先分析的。

封装性-面向对象方法的一个重要原则
    1、把对象(类)的属性和服务结合在一起
    2、尽可能的隐蔽对象的内部细节
    3、值对象和工具类是误用
    4、对有行为的类进行分析
    5、反射、指针会破坏封装性
    6、对象的创建(组装)和使用应该分开
    7、多接口


多态性-与面向过程的核心区别
重写:子类中可以重新定义父类中已有的方法,从而体现出子类自己的行为
定义重写
Interface (java关键字)
Abstract  (java关键字)
重载:同一个类中至少有两个方法用同一个名字,但有不同的参数
慎用重载(提供有意义的名称,参数类)

继承性-从继承到抽象
面向对象的基石
代码重用的基本方法(实现继承)
子类是对其父类的职责进行扩展,而非重写或废除
抽象的同义词
继承侧重于代码重用
抽象侧重于接口重用
GOF 设计模式(几乎全是接口继承)

2005年03月17日

一年多来,总是有一些支言片语想写下来与人分享,但又没有好的方式,突然想起blog,而且以前见过”竹笋炒肉”的blog,于是自己也申请一个,记录一些想法。(内容为空)