请选择 进入手机版 | 继续访问电脑版
朋艾箱包品牌 Romantic Walker 复古箱|ACTUS color’s复古拉杆箱厂家|复古旅行箱|复古登机箱|复古子母拉杆箱|

复古公文箱|复古航空箱|复古旅行包|复古箱pc拉杆箱|复古真皮拉杆箱|复古婚箱|布拉杆箱|拉杆箱批发|拉杆箱厂|礼品箱包OEM

代加工|官方网站 http://www.travelbags.cn Shanghai pengai Industry & Trade Co., Ltd. - ABS&PC Luggage, EVA Travel 

Bags, PVC Lugagge 上海朋艾工贸有限公司

中国复古箱包皮具网中文社区

 找回密码
 立即注册

 

查看: 105|回复: 0
收起左侧

[软件教程] 连载:面向对象葵花宝典:思想、技巧与实践(8)

[复制链接]

9932

主题

9932

帖子

2万

积分

管理员

Rank: 12Rank: 12Rank: 12

积分
29904
QQ
发表于 2017-7-20 07:37:52 | 显示全部楼层 |阅读模式 简体中文繁體中文
搜索看看:连载:面向对象葵花宝典:思想、技巧与实践(8)
接口”是我见过的面向对象领域中滥用、乱用、误用最多的术语
有的人说:兄弟,给我提供一个“查询XXX”的接口。。。。。。
有的人说:系统对外提供了“查询”、“插入”、“更新”、“删除”4个接口。。。。。。
有的人说:我们要基于“接口”编程。。。。。。
有的人说:你这样做破坏了我们的接口设计。。。。。。
。。。。。。。。。。。
倒不是在这里指责他们的水平有多差,而是接口这个属于的中文翻译确实难以理解。
台湾译为介面,仲介之面的意思;大陆译作界面,也译作接口,但无论是“界面”、“介面”、“仲介之面”还是“接口”,都远远没有“类”、“对象”那么直白和容易理解。
既然中文很难理解,那么我们从英文入手,看看是否会有什么新的发现。
“接口”英文为“interface”,按照英文的方法将其拆开,其实就是“inter–face”,也就是说其包含两层意思:
【Inter】:互相,与互相对应的是单个、多个,为什么这里要强调2个呢?
首先,“单个”不存在交互,你自己玩自己的,别人管不了,也就没法交互了;
其次,“多个”交互就混乱了,比如说,假设一个USB接口能够同时接鼠标和键盘,那么怎么知道收到的信号时谁发出的,发出的信号又是要发给谁呢?
【Face】:面,与面对应的是点、线,这里为什么要强调“面”呢?
首先,“面”很形象,围着你的电脑看一下,USB接口、网络接口、VGA接口,形状是不是都是“面”?
其次,“面”体现了功能的多样性。即:接口包含多个“功能点”,例如:USB接口有输入功能、输出功能、充电功能,这三个功能都是USB接口具备的,而不是三个接口。
基于上述分析,我们可以给接口下一个清晰和容易理解的定义:接口是一组相关的交互功能点定义的集合。
这个定义的三个关键点详细解析一下:
【相关】
接口中包含的功能点是相关的,而不是一堆无关功能的堆砌。
例如USB接口,你见过既支持USB协议、又支持VGA协议、还支持PS/2的接口么?
【交互】
接口是用于不同物体交互,如果只是自己玩,那么就不能成为接口;
【定义】
接口中的功能点只是定义,并不涉及具体实现。
也就是说,接口是一个交互协议,是交互双方的一个约定,但具体如何实现,由具体的交互实体各自实现即可。
就像USB接口,张三可以接鼠标、李四可以接键盘、王五可以接散热风扇,但无论是鼠标、键盘还是风扇,都必须遵循USB接口的协议标准。
【集合】
接口是多个功能点的集合,而不是一个具体的功能点。
但如果你说要我重新将interface翻译成简单易理解的中文,恕我才能不够,我也没法翻译。
回过头来看本章前面提到的关于接口的不同说法:
有的人说:兄弟,给我提供一个“查询XXX”的接口——这里说的是一个功能
有的人说:系统对外提供了“查询”、“插入”、“更新”、“删除”4个接口——这里说的是多个功能,这些功能合起来才是一个完整的接口
有的人说:我们要基于“接口”编程——这个符合接口的定义
有的人说:你这样做破坏了我们的接口设计——这个可能符合接口的定义,也可能不符合,关键看这里的接口是指某个功能还是一组功能。
Java语言中的接口很好的展现了接口的含义:
IAnimal.java

  • packagecom.oo.demo;

  • publicinterfaceIAnimal{

  • /*
  • *Java的Interface很好的体现了我们前面分析的接口的特征:
  • *1)是一组功能的集合,而不是一个功能
  • *2)接口的功能用于交互,所有的功能都是public,即别的对象可操作
  • *3)接口只定义函数,但不涉及函数实现
  • *4)这些功能是相关的,都是动物相关的功能,但光合作用就不适宜放到IAnimal里面了
  • */
  • publicvoideat();
  • publicvoidrun();
  • publicvoidsleep();
  • publicvoidspeak();
  • }
Pig.java

  • packagecom.oo.demo;
  • /**
  • *“猪”的类设计,实现了IAnnimal接口
  • *
  • */
  • publicclassPigimplementsIAnimal{

  • //如下每个函数都需要详细实现
  • publicvoideat(){

  • System.out.println("Pigliketoeatgrass");
  • }

  • publicvoidrun(){

  • System.out.println("Pigrun:frontlegs,backlegs");
  • }

  • publicvoidsleep(){

  • System.out.println("Pigsleep16hourseveryday");
  • }

  • publicvoidspeak(){

  • System.out.println("Pigcannotspeak");
  • }
  • }
Person2.java

  • packagecom.oo.demo;
  • /**
  • *实现了IAnimal的“人”,有几点说明一下:
  • *1)同样都实现了IAnimal的接口,但“人”和“猪”的实现不一样,
  • *为了避免太多代码导致影响阅读,这里的代码简化成一行,但输出的内容不一样,
  • *实际项目中同一接口的同一功能点,不同的类实现完全不一样
  • *2)这里同样是“人”这个类,但和前面介绍类时给的类“Person”完全不一样,
  • *这是因为同样的逻辑概念,在不同的应用场景下,具备的属性和功能是完全不一样的
  • *
  • */
  • publicclassPerson2implementsIAnimal{

  • publicvoideat(){

  • System.out.println("Personliketoeatmeat");
  • }

  • publicvoidrun(){

  • System.out.println("Personrun:leftleg,rightleg");
  • }

  • publicvoidsleep(){

  • System.out.println("Personsleep8hourseverydat");
  • }

  • @Override
  • publicvoidspeak(){

  • System.out.println("Hellowworld,Iamaperson");
  • }

  • }
Tester03.java


  • packagecom.oo.demo;
  • /**
  • *@authorliyunhua
  • *
  • */
  • publicclassTester03{

  • publicstaticvoidmain(String[]args){

  • System.out.println("===Thisisaperson===");
  • IAnimalperson=newPerson2();
  • person.eat();
  • person.run();
  • person.sleep();
  • person.speak();

  • System.out.println("n===Thisisapig===");
  • IAnimalpig=newPig();
  • pig.eat();
  • pig.run();
  • pig.sleep();
  • pig.speak();

  • }

  • }
有了类之后为什么还要有接口呢?我直接用类不行么?
例如,我想操作人的时候就用Person,我想操作猪的时候就用Pig
大部分情况下这样做是可以的,但有的时候,你可能并不知道你面对的是一个人还是一头猪,因为这个动物可能是别人创建的,或者是上帝创建的。你只知道这是个动物,但你又希望这个动物按照你的要求进行活动。这就是接口的用处所在,即:你不知道一个对象所属的具体“类”,只知道这些对象都具备某种功能
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

箱包代言人:LEINA 池端レイナ 池端玲名

箱包代言人:菅原沙樹

箱包代言人:七菜香

箱包代言人:菜々緒

箱包代言人:上田眞央

箱包代言人:菅原沙樹

箱包代言人:ダレノガレ明美

朋艾箱包品牌 Romantic Walker 复古箱|ACTUS color’s复古拉杆箱厂家|复古旅行箱|复古登机箱|复古子母拉杆箱|复古公文箱|复古航空箱|复古旅行包|复古箱pc拉杆箱|复古真皮拉杆箱|复古婚箱|布拉杆箱|拉杆箱批发|拉杆箱厂|礼品箱包OEM代加工|官方网站 http://www.travelbags.cn Shanghai pengai Industry & Trade Co., Ltd. - ABS&PC Luggage, EVA Travel Bags, PVC Lugagge 上海朋艾工贸有限公司
全局漂浮广告左侧
全局漂浮广告右侧
全局 对联广告左侧
全局 对联广告左侧

QQ|关于我们|联系我们|免责声明|隐私条款|合作共赢|Archiver|手机版|拘留所|复古箱包皮具网

GMT+8, 2021-9-25 04:27 , Processed in 3.098633 second(s), 41 queries .

Powered by LUHUICMS!

© 2008-05-14 guanfu.net.cn

快速回复 返回顶部 返回列表