日历

September 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
282930  

动态类型语言需要接口吗?

Home Forums 《冒号课堂》讨论区 动态类型语言需要接口吗?

  • This topic is empty.
Viewing 1 reply thread
  • Author
    Posts
    • #1128
      Todd
      Member

      最近考察了一下用Python做中大型项目的可能性。发现Python里面没有接口,只有duck typing,就好象C++ template一样,模板参数T的约束是一种隐式的。这样就只有通过文档,或阅读源代码才能知道类型的约束。这样对于大型的项目的模块划分和协作来讲是非常不方便的。我觉得这算是动态类型语言在大型应用中的一个明显缺点吧。动态类型语言加入接口支持的意义其实不限于静态类型检查,而是一种语言的抽象机制,能够让模块间的交互更加规范。Python目前有一些基于库的模拟接口的方法,但还远不如语言级别的支持来得直接和有效。另外,我觉得C++0x被否决掉的concept也是一种为模板参数增加显式约束的方式,这个思路其实可以为动态语言所借鉴。

      下面是Python作者关于接口的一些看法:

      http://www.artima.com/weblogs/viewpost.jsp?thread=92662

    • #1328
      hui
      Keymaster

      interface的type checking更能保障程序的正确性,并让设计者更用心地设计接口的规范,让使用者更明确接口的用法。但其缺点也是明显的,即不易应对需求或设计的变化。没有人能保证一个接口的选择是一成不变的,而一旦需要改变,则所有涉及该接口的代码都可能受到影响,有的是源码级的影响(比如接口名、接口方法名、接口方法个数、接口方法签名等的改变),有的是二进制级的影响。从这个意义上说,项目越大,受的影响越大。其结果往往是,为了避免这种影响,一些原来设计不合理的接口只能被保留,由此带来代码的丑陋和别扭。反观duck typing,虽然缺乏type checking,但会让代码更加简洁、灵活和优雅。但前提是要保证:设计者要明确制订规范,使用者要严格遵循规范,并且一旦规范发生变化,一定要修改文档,并核查所有相关代码,以确保程序的正确性。

      总的说来,规范比类型检查更加重要。一个只依赖编译器的类型检查而忽视类型规范的程序员,比使用动态类型语言但注重规范的程序员要危险得多。只是在实际中,不少使用动态类型语言的人对规范可能不如使用静态类型语言的人那么重视。究其原因,很可能是:目前最主流的语言,如C、C++、Java、C#等都是静态类型语言,由此集中了更多优秀的程序员。说到底,这并非语言本身的问题,而是程序员的素质问题。

Viewing 1 reply thread
  • You must be logged in to reply to this topic.
 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)