,webservice   工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛,webservice
您的位置:Yesky > 软件 > 开发者网络 > 微软开发专栏 > 正文
漫谈多态性与Web服务的结合
[文章信息]
作者:编译 朱先中
时间:2005-05-18
出处:天极网
责任编辑:方舟
[文章导读]
本文回顾了多态性概念, 示范了XML Web服务。最重要的是本文将教你如何把多态性和Web服务结合起来
advertisement
热点推荐
· 图文详解:黑客入侵方式演示
· Java异常处理的陋习展播
· 多媒体系列教程:网页设计制作
· Powerpoint动画演示教程连载
· 光盘刻录手册:禁忌与技巧(下)
[正文]

1 2 3  下一页

  一、简介

  你可能知道多态性,或许也知道Web服务。但是跨越Web服务的多态性又是怎样的呢? 本文回顾了多态性概念, 示范了XML Web服务。最重要的是本文将教你如何把多态性和Web服务结合起来。

  二、多态性

  那些熟悉面向对象编程 (OOP)的读者应该对多态性非常熟悉,但并不是每个人都熟悉面向对象编程。 如果你是前一个读者群,可以直接跳到“XML Web服务”一节。 如果你是后者,请继续阅读。

  在面向对象编程语言出现之前,如果你想要打印不同类型的数据,需要写多个方法 ,象是PrintInteger(int i),PrintString(string s) 和 PrintFloat(float f) 。也就是说, 你必须通过命名来区别行为和数据类型,因为 OOP语言出现前任一语言象是C,不允许你用相同的名字写方法, 即使他们的参数类型不同。

  C++的来到实现了方法重载。因此,你可以写多个方法 , 象是 PrintInteger(int i)、PrintString(string s) 和 PrintFloat(float f),编译器自会准确调用特定的Print方法。方法重载被一种称为名称重整(name mangling)的技术所支持,在这种技术中,编译器通过把原方法名称与其参数相结合产生一个独特的内部名字来取代原方法名称。 如此,当你调用Print(1)的时候, 编译器可能在内部用源于参数类型的前缀重命名Print方法,这样一来Print(1)可能就变成 i_Print (1) 。

  方法重载仅是多态性的一种情形。 名称重整是一种支持方法重载的机制。更普遍的情况下,多态性是与继承相联系。 什么是继承呢?继承就是一个新类 (称为子类) 从被继承类(称为父类或超类)取得自身的部分定义同时增加一些自己的新的信息。 如果你在相同的类中重载方法, 数据类型必须是不同的。如果你在继承关系下重载方法, 子类与父类的方法可能完全相同,而且名称重整器生成同样的重整名称。

  举例来说, 假设一个超类定义一个Print(int i)方法而一个从它继承的子类也定义了一个Print(int i)方法。当你有一个子类的实例时,运用多态性调用Child.Print(int);而当你产生一个父类的实例时运用多态性调用Parent.Print(int)。这就是继承多态性:相同的名字和签字但是类却不同。

  继承多态性是通过使用一种与名称重整相关的另外一种机制实现的。编译器把方法放置在一个被称为虚拟方法表(其实是一个方法数组)的地方。每一个方法在VMT中都有一个索引, 如此当Print(int)被调用的时候, 编译器将被路由到VMT处找寻Print方法和类的内在索引。这样一来,编译器就可以调用正确的方法实现。由编译器负责管理所有的VMT索引和类偏移量。

  简言之,多态性使你能够用非常相似的名字定义许多方法,这里的名字往往都是直观易记的。 OOP编译器自会根据调用者类理解到底该调用哪个方法。多态性的最大好处之一就是,你不再必须写下面这样的代码了(这里使用的仅是描述性语言):

If type of arg is integer then
 PrintInteger(arg)
Else if type of arg is string then
 PrintString(arg)
Else if type of args is float then
PrintFloat(arg)

  现在,有了OOP语言,上面的表达只需用一句即可:

Print(arg)

  编译器的多态机制通过生成一个方法索引(这实际上相当于上面的条件语句),自会计算出应调用print方法的哪一个版本。

  要从语言的角度了解关于OOP内部工作机制的权威描述,可以参阅Bjarne Stroustrup的《The C++ Programming Language》 (ISBN: 0201700735)(Addison Wesley公司出版)。注意,许多OOP语言使用与C++非常相似的机制。

  三、XML Web服务

  如果你对XML Web服务和它的应用有所了解,那么你对XML Web服务的技巧和引入动机的理解应毫无困难,可以直接跳越到下一节“用Web服务支持多态性”。

  在过去十年左右时间当中, 分布式应用已经变得愈来愈普遍。象许多其他类型的工程学一样, 软件行业经历了发明然后标准化的时期。XML Web服务是一种基于HTTP和XML开放协议的标准,它不独属于微软,但是微软确实提供了基于.NET架构及其特性的XML Web服务的实现。

  基本的思想是,通过你的编码给描述Web 服务的类添加WebServiceAttribute,并给该类中的Web方法或者是允许消费者调用的方法加上WebMethodAttribute属性。微软的实现技术是,使用反射与代码生成技术来产生代理类型和代理代码,这使得调用分布式服务和方法变得容易。除了产生代理代码之外, .NET架构和Visual Studio还包含一个向导来为你代理Web服务和Web方法。

  为产生一个Web服务,运行Visual Studio .NET,然后选择File-New-Project(本文选工程类型为“Visual Basic Projects”),从新的工程对话框的模板列表中选择“ASP.NET Web Service ”。

  要运行该示例Web服务及Web方法,去掉工程模板向导提供的方法HelloWorld前面的注释部分,然后运行该方案。要了解更多的关于XML Web服务的产生及应用等方面的信息,可以参看前面的“VB Today”栏目, 特别是《Building Distributed Apps?Use XML Web Service, Not Remoting (Mostly)》(December 2004)。


1 2 3  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
,webservice相关内容,webservice焦点新闻
  • FVD刺激高清碟机加速商业化 抢占商机最重要
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • ,webserviceAdvertisement

    天极无线
    经典名曲 华语流行 欧美风情 人声音效 原声大碟
    你好周杰伦-安又琪
    直线-张韶涵
    天边-张韶涵
    看我72变-蔡依林
    乱世佳人-Twins
    全世界下雨-张娜拉
    我们的爱-飞儿乐队
    分手快乐-梁静茹
    爱在西元前-周杰伦
    三万英尺-迪克牛仔
    爱如潮水-张信哲
    爱情宣言-齐秦
    寻找玛依拉-刀郎
    驼铃-刀郎
    老鼠爱大米-杨臣刚
    功夫主题曲
    仙剑主题曲杀破狼
    天下无贼片尾曲
    冲动的惩罚-刀郎
    情人-刀郎
    爱情-莫文蔚
    挪威的森林-伍佰
    奔跑 - 羽泉
    因为爱 - 羽泉
      ·时尚女人圈
    ·经典影视专集
    ·美女秀场
    ·美丽大自然专题
    ·流行金曲
    ·科幻电影特区
    | 最新推荐
    ·你好周杰伦
    ·杀破狼
    ·寻找玛依拉
    ·孤单公园
    ·男人海洋
    | 魔术铃声
    ·少女丰胸
    ·少妇丰胸
    ·减肥魔铃
    ·增高魔铃
    ·美容魔铃

    今日报价查询 更多报价