鱼的记忆只有“7秒钟”,所以常常游完一个圈,就什么都忘记了。
而人的记忆虽说比鱼好,但是人类的“一次性”记忆也会阶梯式减弱。如果你对一本书很感兴趣时,
第一次看这一本书,当天你可能会记得很牢固;第二天你就会发现有点模糊。。。随着日子增长,你会
发现自己慢慢的把书本的内容忘记(除非你在生活中,再此遇到这个内容——再次记忆)。所以,这次
就发这个博文来总结这个星期看得这本书——会说话的代码,副标题是《书写自表达代码之道》。不仅
这本书,以后看的书都会写个博客记录。这样不仅能够巩固学习的知识,而且能通过累计博客数量来增
加自己的信心。
这本书通过用Java语言来从命名、注释、结构、架构、编程风格等方面,做出了具体的阐述。而对
于Java里专有注释,这里不加于解释说明。这本书比较适合刚入门的读者。书中除了介绍的内容好以外,
还恰当的选取了一些容易理解的例子。例子不复杂,但却包含重要结构,对于代码的可测试性和后期的
可维护性都有重要贡献。下面我们来具体看看书本的内容(把书读薄!!)
书中前部分主要讲述命名规则。这类内容也是老生常谈的了,而这一些都是程序员的编程习惯。因
此在学习编程之初,就应该养成良好的习惯。注意对英文单词的妙用。如:名词是用来表示属性的常用
词性等等。而这命名的规则,就是为了方便后期工作人员的维护,还有自己的查看。
第二部分主要介绍了面向对象的基础知识以及其设计的基本原则。
1.1单一职责原则:
单一职责指每个类都应该只有一个职责。类不能有多个职责;同一个类的职责不应该定义到别的类中。
1.2开放封闭原则:
表示代码应该对扩展开放,对变更封闭。代码对扩展开放指当代码需要增加某个功能时,由于已经预
设好扩展的接口,在扩展时不需要对既有的代码产生很大的影响。对变更封闭并不是说不支持变更,当需
进行功能变更时,由于代码的功能模块已经拆分,不至于因为变更而引起大面积代码变动。
#不准循开放封闭原则的写法如下:
def calculate( a , b , symbol ):
if symbol == " + ":
return a + b
elif symbol == " - ":
return a - b
if symbol == " * ":
return a * b
elif symbol == " / ":
if b == 0:
returnFalse
return a / b
#对这种情况来说,扩展乘方功能时,需要增加一个elif:
#像这种写法,每次在扩展代码时都需要修改以前的代码,这回导致已经确保质量的代码产生变动
class Params:
def __init__( self ):
"""
"""
self.paramList = []
def addNewParam( self, param ):
"""
"""
self.paramList.append( param)
def getParamList( self ):
"""
"""
return self.paramList
#遵照开放封闭原则的代码则这样书写:
class Calculable:
@staticmethod
def Add( params ):
return params[0] +params[1]
def Sub( params ):
return params[0] -params[1]
def Add2Num( params ):
return params[0] + params[1] +params[2]
#工厂
class CalculableFactory:
@staticmethod
def create( symbol ):
calculator = getattr(Calculable , symbol)
return calculator
#调用的程序:
class calculate:
@staticmethod
def calculate( params , symbol ):
calculator =CalculableFactory.create( symbol )
return calculator.calculate( a, b )
params = Params()
params.addNewParam( 1 )
params.addNewParam( 1 )
calculate.calculate( params, "Add" )
结果输出:2
设计模型是针对一些常见的软件开发问题的可重用面向对象解决方案,它考虑各种对象和类的关系而
现有的设计模式有23种,而它又是那么的难于掌握。因此,另起一个博客说明之。在这里只是简单讲讲位
掩码的作用——减少类的个数。位掩码是一个很好的减少类数量的方法。位掩码可以用来管理多种不同维
度的变化。例如:
COLOR = 0X00F,
SHAPE = 0XFF0,
COLOR_RED = 0X001,
COLOR_GREEN = 0X002,
COLOR_YELLOW= 0X004,
SHAPE_RECTANGLE = 0X010,
SHAPE_CIRCLE= 0X020,
就上述的组合来说,红色矩形的值为0x011,绿色圆形为0x022。
对于位掩码的运算是通过“|”来将多种位掩码组合在一起,而通过“&”来计算其中对应的位是ON还是OFF.
如:获取一个物体的颜色用object & COLOR;判断颜色是否为绿色,则用 if object &COLOR_GREEN ==COLOR_GREEN
有时采用多态会产生大量的类,而采用位掩码则可以在一个类中完成等价的操作。
例如文本框的输入限制,文本框可以输入数字、电子邮件。。。
class InputType:
MASK_CONSTRAINT = 0x00fff,
CONSTRAINT_NUMBER= 0x00001,
CONSTRAINT_EMAIL= 0x00002,
CONSTRAINT_PHONE= 0x00008,
...
这样,只需一个类就可以实现该功能。