关键字interface

来源:互联网 发布:九莲宝灯算法 编辑:程序博客网 时间:2024/06/01 10:10

转自:http://www.javaeye.com/topic/7776

 

1、接口的定义是由谁来定义的,但是这样的思路其实存在以下几个问题: 
  1)按照先定义接口,在进行实现的思路,那么肯定是先有interface,才有class的,对吧。那么咱们讨论一个真实的系统时:这就必然导致一个至顶向下的开发过程,那么我就需要问你了,当你用这样一种思路进行开发时,对于一个Web项目,你是不是会先从jsp或者servlet写起呢? 
  2)还是按照先定义接口,再进行的实现的思路,那么一个class实现多个interface的情况如何才会出现呢? 
  3)当接口是我定义的,而实现是别人做的这样情况出现的时候,你的下面这句话就很难理解了“接口是你自己定义的。反映你自己的需求。什么叫没有完成? ”如果按照你的说法,那么需求怎么会变的呢?当需求变的时候,从哪里开始变起呢? 

2、关于单元测试的问题,我始终认为单元测试并不能等于100%测试。假设A要B一起工作的,你通过单元测试,可以确定的,是A和B可以各自独立工作。那么我们应该通过什么方法,来确认A和B可以协同工作呢? 

按照我的思路,假设A需要使用到B的功能,那么我会先测试B,在保证B通过了所有测试之后,我在测试A,假设出了问题,我就知道问题只会存在于A。就像一层一层打基础一样,当我的底层基础得到确认之后,我才能够再向上搭一层。 

ajoo,你现在应该可以看出来了,我们俩的思路是相反的,一个是至顶向下,一个是至底向上。但是按照TDD这样的思路,我相信本质上他就是支持至底向上的。当然,TDD蕴含至底向上大家可以讨论一下,看看我是不是理解正确。 

3、关于工作量的问题,我本来希望你通过代码来说明“什么情况下,才会出现,只需要改类,不需要改接口的情况呢?” 

而你的回答甚是标准“again, 接口IB围绕你的需求定义,并不依赖于B。抽象不依赖具体。B改了, 只要你的需求没改,接口就不用改。” 

那还是我来举例子吧。 

第一种,使用接口的情况 

Java代码  收藏代码
  1. //接口  
  2. public interface IA{  
  3.     public void doSomething();;  
  4. }  
  5.   
  6. //实现  
  7. public class A implementation IA {  
  8.     public void doSomething();{  
  9.         System.out.println("doSomething");;  
  10.     }  
  11. }  
  12.   
  13. //调用  
  14. IA a=new A();;  
  15. a.doSomething();;  


第二种,不使用接口的情况 
Java代码  收藏代码
  1. //直接实现  
  2. public class A{  
  3.     public void doSomething();{  
  4.         System.out.println("doSomething");;  
  5.     }  
  6. }  
  7.   
  8. //调用  
  9. A a=new A();;  
  10. a.doSomething();;  


无论以上的哪一种情况,只要doSomething这个函数的接受参数等等属性没有改变,那么接口和具体的对象都是不用改的。而如果doSomething的接收参数发生改变,第一种使用接口的例子,就需要改两个文件,而第二种则只需要改一个文件。当然,在调用者那里,都是需要改的。 

这就是工作量,ajoo说:“对你使用接口耦合的bonus啊。反正是免费的。”我可不认为是免费的,在需求尚未固化之前,我每次如果能少改一个文件,那也是很划算的。