关于“接口”的理解

来源:互联网 发布:华为性格测试 知乎 编辑:程序博客网 时间:2024/05/29 08:21

【词语的定义】

接口;由两侧特性所定义的共享边界。接口可以在物理级、在软件级或作为纯逻辑运算来描述。


[1. 1.关于接口的理解。(这段话是我在网上看到的感觉说的很有道理)
接口从更深层次的理解,应是定义(规范,约束,有一定通用性)与实现(名实分离的原则)的分离。
我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为理解的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点繁烦。
接口的本身反映了系统设计人员对系统的抽象理解。
接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(
abstractclass);
第二类是对一个体某一方面的抽象,即形成一个抽象面(
interface);
一个体有可能有多个抽象面。
抽象体与抽象面是有区别的。

]


    [2.接口解决什么问题:
       1.解决实现与调用分离,耦合度降低
       2.多种不同实现共同协作(例如如下例子更换数据库操作)
    例如:填写员工基本信息保存到数据库中,数据库用的是Mysql。 ]


view plaincopy to clipboardprint?
  1. //实现很简单定义员工类:   
  2.  public Employee {  
  3.            
  4.   }        
  5. //定义接口  
  6.  public IEmployeeDAO {  
  7.      public int saveEmployee(Employee employee);  
  8.  }  
  9. //定义EmployeeDAOImpl 类 实现IEmployeeDAO 接口  
  10. public EmployeeDAOImpl implements IEmployeeDAO {  
  11.    public int saveEmployee(Employee employee);  
  12. }     
  13. //先公司将系统升级,数据改成Orcal  
  14. //我们只需将实现类更换掉就可以了 运行测试OK   


view plaincopy to clipboardprint?
  1. 3.如果没有接口怎么办  
  2.   1.刚刚那个例子要更换数据库,就要重新定义EmployeeNewDAO类和saveEmployee方法。  
  3.     上面的调用也要更改,工作量可想而知  
  4. 4.开放中如何更好的应用   
  5.   在实际的开发总如何更好的应用还在摸索和学习总,希望有看到这篇文章的人共同学习和 探讨.    
view plaincopy to clipboardprint?
  1. 5.接口不能做什么  
  2.   接口不能有实现方法,有人说这是接口的缺点,但是这正是接口最高的价值,把实现封装了,接口不能new,接口可以实例子类  



    [6.现在工作中的一些问题
      下面是我一直疑惑的一个问题,也是很多初学者相信也有类似的疑惑:
    在日常的应用都是定义一个类之前先定义一个接口,之前我有几个同学问我这样定义到底是什么意思,当时怎么回答的我也不记得了,只是别人都这么用我们也这么用肯定不会错的,现在才明白对Java的基础还是不扎实,只顾着写代码,去实现功能,没有深入的理解接口的涵义。其实在实际的开发中根本没有遇到要把某个模块重新实现的情况,我们只会在原来的基础上修改那些代码。] 


    ----------------------------------------------------------------------------------------------------------------------------------------------------------------分割线

    一个非常好的例题及解答。有助于接口的实现与调用的理解;以及回调函数如何使用的理解。


    2、(15分)现要为某网上商城实现一个商品价格查询服务,该服务具有以下功能:


    • 用户可以主动查询某个商品的价格。

    • 用户可以订购某个商品的价格,当商品价格低于用户指定的阈值时,该服务通知订购用户当前的价格。

    • 多个用户可同时使用该服务。

      现要使用面向对象的技术,如CORBA技术实现该服务:请描述该服务对象和客户端程序分别需要实现的接口。接口可以采用任何一种程序设计语言描述(甚至夹杂自然语言),但要明确每个接口名、接口中的方法名、方法的返回值和参数名以及类型。

       

      商品价格查询服务的接口:

       

      方法一:价格查询。

      Float  getPriceString goodIDthrows someFailure;返回值为价格。

       

      方法二:订购价格变化情况

      Void subscribe(String goodID, float myInterestPrice, Ref myCallback)throws some someFilure

      其中,myInterestPrice为指定的价格阈值,myCallback为实现nicePrice()方法的客户端回调接口对象引用。

       

      客户端实现的接口

      方法一:

       

      Void nicePrice(String goodID, float nicePrice) throws some someFilure;

      其中,nicePrice是低于阈值的新价格。

       

      参数类型和名字等,可在合理范围内变动。缺失红色部分,不扣分。

       

      每个方法5分。




参考资料:


API和接口的一些思考:http://www.programgo.com/article/66122929530/;jsessionid=CE2BB56135CCCE81D1A27CA54EBBADB1

Java中接口深入理解:http://www.programgo.com/article/59223693723/;jsessionid=CE2BB56135CCCE81D1A27CA54EBBADB1

Java接口:http://www.w3cschool.cc/java/java-interfaces.html

一篇对接口使用很好的说明,通俗易懂(转贴):http://www.programgo.com/article/9162133391/







0 0