当前位置: 首页 > news >正文

婚纱网站建设 最开始网站推广软件推荐

婚纱网站建设 最开始,网站推广软件推荐,网站付费模板,西安做推广优化的公司我想#xff0c;对于各位使用面向对象编程语言的程序员来说#xff0c;“接口”这个名词一定不陌生#xff0c;但是不知各位有没有这样的疑惑#xff1a;接口有什么用途#xff1f;它和抽象类有什么区别#xff1f;能不能用抽象类代替接口呢#xff1f;而且#xff0c;…我想对于各位使用面向对象编程语言的程序员来说“接口”这个名词一定不陌生但是不知各位有没有这样的疑惑接口有什么用途它和抽象类有什么区别能不能用抽象类代替接口呢而且作为程序员一定经常听到“面向接口编程”这个短语那么它是什么意思有什么思想内涵和面向对象编程是什么关系本文将一一解答这些疑问。 1.面向接口编程和面向对象编程是什么关系 首先面向接口编程和面向对象编程并不是平级的它并不是比面向对象编程更先进的一种独立的编程思想而是附属于面向对象思想体系属于其一部分。或者说它是面向对象编程体系中的思想精髓之一。 2.接口的本质 接口在表面上是由几个没有主体代码的方法定义组成的集合体有唯一的名称可以被类或其他接口所实现或者也可以说继承。它在形式上可能是如下的样子 1: interface InterfaceName 2: { 3: void Method1(); 4: void Method2(int para1); 5: void Method3(string para2,string para3); 6: } 那么接口的本质是什么呢或者说接口存在的意义是什么。我认为可以从以下两个视角考虑 1接口是一组规则的集合它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。 例如在自然界中人都能吃饭即“如果你是人则必须能吃饭”。那么模拟到计算机程序中就应该有一个IPerson习惯上接口名由“I”开头接口并有一个方法叫Eat()然后我们规定每一个表示“人”的类必须实现IPerson接口这就模拟了自然界“如果你是人则必须能吃饭”这条规则。 从这里我想各位也能看到些许面向对象思想的东西。面向对象思想的核心之一就是模拟真实世界把真实世界中的事物抽象成类整个程序靠各个类的实例互相通信、互相协作完成系统功能这非常符合真实世界的运行状况也是面向对象思想的精髓。 2接口是在一定粒度视图上同类事物的抽象表示。注意这里我强调了在一定粒度视图上因为“同类事物”这个概念是相对的它因为粒度视图不同而不同。 例如在我的眼里我是一个人和一头猪有本质区别我可以接受我和我同学是同类这个说法但绝不能接受我和一头猪是同类。但是如果在一个动物学家眼里我和猪应该是同类因为我们都是动物他可以认为“人”和“猪”都实现了IAnimal这个接口而他在研究动物行为时不会把我和猪分开对待而会从“动物”这个较大的粒度上研究但他会认为我和一棵树有本质区别。 现在换了一个遗传学家情况又不同了因为生物都能遗传所以在他眼里我不仅和猪没区别和一只蚊子、一个细菌、一颗树、一个蘑菇乃至一个SARS病毒都没什么区别因为他会认为我们都实现了IDescendable这个接口注descend vi. 遗传即我们都是可遗传的东西他不会分别研究我们而会将所有生物作为同类进行研究在他眼里没有人和病毒之分只有可遗传的物质和不可遗传的物质。但至少我和一块石头还是有区别的。 可不幸的事情发生了某日地球上出现了一位伟大的人他叫列宁他在熟读马克思、恩格斯的辩证唯物主义思想巨著后颇有心得于是他下了一个著名的定义所谓物质就是能被意识所反映的客观实在。至此我和一块石头、一丝空气、一条成语和传输手机信号的电磁场已经没什么区别了因为在列宁的眼里我们都是可以被意识所反映的客观实在。如果列宁是一名程序员他会这么说所谓物质就是所有同时实现了“IReflectabe”和“IEsse”两个接口的类所生成的实例。注reflect v. 反映  esse n. 客观实在 也许你会觉得我上面的例子像在瞎掰但是这正是接口得以存在的意义。面向对象思想和核心之一叫做多态性什么叫多态性说白了就是在某个粒度视图层面上对同类事物不加区别的对待而统一处理。而之所以敢这样做就是因为有接口的存在。像那个遗传学家他明白所有生物都实现了IDescendable接口那只要是生物一定有Descend这个方法于是他就可以统一研究而不至于分别研究每一种生物而最终累死。 可能这里还不能给你一个关于接口本质和作用的直观印象。那么在后文的例子和对几个设计模式的解析中你将会更直观体验到接口的内涵。 3.面向接口编程综述 通过上文我想大家对接口和接口的思想内涵有了一个了解那么什么是面向接口编程呢我个人的定义是在系统分析和架构中分清层次和依赖关系每个层次不是直接向其上层提供服务即不是直接实例化在上层中而是通过定义一组接口仅向上层暴露其接口功能上层对于下层仅仅是接口依赖而不依赖具体类。 这样做的好处是显而易见的首先对系统灵活性大有好处。当下层需要改变时只要接口及接口功能不变则上层不用做任何修改。甚至可以在不改动上层代码时将下层整个替换掉就像我们将一个WD的60G硬盘换成一个希捷的160G的硬盘计算机其他地方不用做任何改动而是把原硬盘拔下来、新硬盘插上就行了因为计算机其他部分不依赖具体硬盘而只依赖一个IDE接口只要硬盘实现了这个接口就可以替换上去。从这里看程序中的接口和现实中的接口极为相似所以我一直认为接口interface这个词用的真是神似 使用接口的另一个好处就是不同部件或层次的开发人员可以并行开工就像造硬盘的不用等造CPU的也不用等造显示器的只要接口一致设计合理完全可以并行进行开发从而提高效率。 本篇文章先到这里。最后我想再啰嗦一句面向对象的精髓是模拟现实这也可以说是我这篇文章的灵魂。所以多从现实中思考面向对象的东西对提高系统分析设计能力大有脾益。 下篇文章我将用一个实例来展示接口编程的基本方法。 而第三篇我将解析经典设计模式中的一些面向接口编程思想并解析一下.NET分层架构中的面向接口思想。 对本文的补充 仔细看了各位的回复非常高兴能和大家一起讨论技术问题。感谢给出肯定的朋友也要感谢提出意见和质疑的朋友这促使我更深入思考一些东西希望能借此进步。在这里我想补充一些东西以讨论一些回复中比较集中的问题。 1.关于“面向接口编程”中的“接口”与具体面向对象语言中“接口”两个词 看到有朋友提出“面向接口编程”中的“接口”二字应该比单纯编程语言中的interface范围更大。我经过思考觉得很有道理。这里我写的确实不太合理。我想面向对象语言中的“接口”是指具体的一种代码结构例如C#中用interface关键字定义的接口。而“面向接口编程”中的“接口”可以说是一种从软件架构的角度、从一个更抽象的层面上指那种用于隐藏具体底层类和实现多态性的结构部件。从这个意义上说如果定义一个抽象类并且目的是为了实现多态那么我认为把这个抽象类也称为“接口”是合理的。但是用抽象类实现多态合理不合理在下面第二条讨论。 概括来说我觉得两个“接口”的概念既相互区别又相互联系。“面向接口编程”中的接口是一种思想层面的用于实现多态性、提高软件灵活性和可维护性的架构部件而具体语言中的“接口”是将这种思想中的部件具体实施到代码里的手段。 2.关于抽象类与接口 看到回复中这是讨论的比较激烈的一个问题。很抱歉我考虑不周没有在文章中讨论这个问题。我个人对这个问题的理解如下 如果单从具体代码来看对这两个概念很容易模糊甚至觉得接口就是多余的因为单从具体功能来看除多重继承外C#Java中抽象类似乎完全能取代接口。但是难道接口的存在是为了实现多重继承当然不是。我认为抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用而使用接口的动机是为了实现多态性。所以如果你在为某个地方该使用接口还是抽象类而犹豫不决时那么可以想想你的动机是什么。 看到有朋友对IPerson这个接口的质疑我个人的理解是IPerson这个接口该不该定义关键看具体应用中是怎么个情况。如果我们的项目中有Women和Man都继承Person而且Women和Man绝大多数方法都相同只有一个方法DoSomethingInWC不同例子比较粗俗各位见谅那么当然定义一个AbstractPerson抽象类比较合理因为它可以把其他所有方法都包含进去子类只定义DoSomethingInWC大大减少了重复代码量。 但是如果我们程序中的Women和Man两个类基本没有共同代码而且有一个PersonHandle类需要实例化他们并且不希望知道他们是男是女而只需把他们当作人看待并实现多态那么定义成接口就有必要了。 总而言之接口与抽象类的区别主要在于使用的动机而不在于其本身。而一个东西该定义成抽象类还是接口要根据具体环境的上下文决定。 再者我认为接口和抽象类的另一个区别在于抽象类和它的子类之间应该是一般和特殊的关系而接口仅仅是它的子类应该实现的一组规则。当然有时也可能存在一般与特殊的关系但我们使用接口的目的不在这里如交通工具定义成抽象类汽车、飞机、轮船定义成子类是可以接受的因为汽车、飞机、轮船都是一种特殊的交通工具。再譬如Icomparable接口它只是说实现这个接口的类必须要可以进行比较这是一条规则。如果Car这个类实现了Icomparable只是说我们的Car中有一个方法可以对两个Car的实例进行比较可能是比哪辆车更贵也可能比哪辆车更大这都无所谓但我们不能说“汽车是一种特殊的可以比较”这在文法上都不通。   原文地址 http://www.cnblogs.com/leoo2sk/archive/2008/04/10/1146447.html转载于:https://www.cnblogs.com/chaosimple/archive/2013/03/14/2960348.html
http://www.sadfv.cn/news/299232/

相关文章:

  • 微信开放平台与个人网站怎么四川建设网app
  • 南宁网站建设长春网站建设公司企业模板
  • 网站备案信息被删除查商标官网
  • 禅城南庄网站制作wordpress 文章路径
  • 浙江网站建设服务公司医疗器械备案
  • 织梦做的的网站首页显示空白网站搭建的
  • 网站首页布局设计安庆网站建设专业
  • 网站重构案例学网络营销有前途吗
  • 做的好的购物网站框架网站模板
  • 门户网站建设价格免费网站制作软件的app
  • 电商网站支付方案wordpress 通过电子邮件发布
  • 泰州网站制作专业做网站时点击显示
  • 网站推广手段有哪些免费发布信息网站大全666
  • 大气宽屏网站模板企业源码带后台石家庄正定网站建设
  • 电子商务网站建设与维护题库wordpress时间中文版
  • 百度推广手机网站做网站的公司现在还 赚钱吗
  • 网站版面布局结构图宝山专业做网站
  • 天通苑网站建设1 分析seo做的不好的网站
  • 在线代理浏览器网站营销与策划
  • 做网站的图片房产网站建设的类型
  • 新开传奇网站超变wordpress的文章调用
  • 盐山建网站wordpress 宕机原因
  • 烟台做网站电话自己怎么创建小程序
  • 乐昌门户网站新开传奇手游
  • 大网络公司做网站企业为什么要建设电子商务网站
  • 平台建设网站郑州市城乡建设规划网站
  • 宁波网站优化软件乔拓云微信小程序官网
  • 舟山网站网站建设后台网站开发文档
  • 地方网站程序wordpress页面模板怎么做
  • 做金融必看网站网站开发项目流程设计