软件这个行业越来越注重编程的可重用、可扩展、高内聚这几个特性,无非就是为了日后软件可以进一步改善所作的努力,使得日后扩展的时间成本减低,以及难度的减低。既然如此,那有什么办法可以帮助我们在编程的时候把代码写得具有以上所说的特性呢?
这个说法就像是问写作怎样才能写出好文章一样,那么答案也是与之类似的,无非就是见仁见智,不同作家有不同的写作风格,软件工程师也一样,各有各的技巧。
在这里我想与大家分享的是其中一种技巧,就是利用接口合理地将软件分离出不同的功能模块,以达到代码具有这些好特性的目的。接口,按照最基本的定义就是:在面向过程中接口是一大堆功能独立的函数的集合,在面向对象中就是一大堆可被其他类调用的方法的集合。简单地说,接口就是用来统一不同模块中调用时的方法名称,并以此来达到不同模块的开发互不影响的目的,这就实现了不同模块开发时的合理分离的作用。
但本人觉得接口还可以这样理解:接口就像一个技能代词,比如说游泳。当定义了一个接口,它就代表了它里面所拥有的技能,任何实现它的对象都可以视为是学会了这种技能,就像会游泳的人一样。但是不同的人游泳方式不同,这就刚好说明了不同对象实现接口里面的方法是不同的。而怎样把这个观念加到编程分层的思想中呢?我觉得这样去理解比较容易,也比较具有现实意义一些。我是这样理解的:还是拿游泳作例子吧,游泳是一个接口,实现它的对象就是会游泳的人,不同人有不同的游泳方式,而且可以直接拿游泳这个接口来指代实现它的对象,就跟游泳老师问学生说有谁已经会游泳了的道理是一样的,会游泳可以指代所有会游泳的人,而最关键的一步就是在编程中要拿一个队列来装这些已经实现接口了的对象,之后调用它们各自的实现方法,也就是叫会游泳的所有人排好队,然后直接下去游泳了,但是有人用蛙式,有人用蝶式而已。这也是接口在java源码中的实现方法,用一个队列去装载,然后遍历队列去实现。
当你理解到这一步的时候,我相信你应该知道怎样在编程中去实践代码分离的思想了吧,无非就是确定有什么类,类与类之间的关系,然后确定这些类中有什么方法的功能类似的,或是说是同源的,然后尽量把这些方法归到接口中,让类去实现接口,这样就能比较有效地使代码变得清晰、可重用、可扩展了。
这个说法就像是问写作怎样才能写出好文章一样,那么答案也是与之类似的,无非就是见仁见智,不同作家有不同的写作风格,软件工程师也一样,各有各的技巧。
在这里我想与大家分享的是其中一种技巧,就是利用接口合理地将软件分离出不同的功能模块,以达到代码具有这些好特性的目的。接口,按照最基本的定义就是:在面向过程中接口是一大堆功能独立的函数的集合,在面向对象中就是一大堆可被其他类调用的方法的集合。简单地说,接口就是用来统一不同模块中调用时的方法名称,并以此来达到不同模块的开发互不影响的目的,这就实现了不同模块开发时的合理分离的作用。
但本人觉得接口还可以这样理解:接口就像一个技能代词,比如说游泳。当定义了一个接口,它就代表了它里面所拥有的技能,任何实现它的对象都可以视为是学会了这种技能,就像会游泳的人一样。但是不同的人游泳方式不同,这就刚好说明了不同对象实现接口里面的方法是不同的。而怎样把这个观念加到编程分层的思想中呢?我觉得这样去理解比较容易,也比较具有现实意义一些。我是这样理解的:还是拿游泳作例子吧,游泳是一个接口,实现它的对象就是会游泳的人,不同人有不同的游泳方式,而且可以直接拿游泳这个接口来指代实现它的对象,就跟游泳老师问学生说有谁已经会游泳了的道理是一样的,会游泳可以指代所有会游泳的人,而最关键的一步就是在编程中要拿一个队列来装这些已经实现接口了的对象,之后调用它们各自的实现方法,也就是叫会游泳的所有人排好队,然后直接下去游泳了,但是有人用蛙式,有人用蝶式而已。这也是接口在java源码中的实现方法,用一个队列去装载,然后遍历队列去实现。
当你理解到这一步的时候,我相信你应该知道怎样在编程中去实践代码分离的思想了吧,无非就是确定有什么类,类与类之间的关系,然后确定这些类中有什么方法的功能类似的,或是说是同源的,然后尽量把这些方法归到接口中,让类去实现接口,这样就能比较有效地使代码变得清晰、可重用、可扩展了。