65. 优先使用领域特定类型而不是基础类型

来源:互联网 发布:珠海市香洲区人口数据 编辑:程序博客网 时间:2024/06/05 07:20

优先使用领域特定类型而不是基础类型

        1999年9月23日,价值3.276亿美元的火星气候探测者号在进入绕火星的轨道时失去了联系,就因为地球上的一个软件错误。这个错误后来被称为“公制单位混淆”。地球上的指挥站的软件使用的是“磅”,而飞行器使用的是“牛顿”,导致指挥站把飞行器的推进器的动力低估了4.5倍。

        这是如果使用了更强大的领域特定类型的语言即可防止失败的例子之一。这也是一个Ada语言的多种特性背后的基本原理的一个例子,其首要的设计目标就是实现内嵌的安全攸关软件。Ada对于基础类型和用户定义类型都有着强类型静态检查:

type Velocity_In_Knots is new Float range 0.0 .. 500.00;type Distance_In_Nautical_Miles is new Float range 0.0 .. 3000.00;Velocity: Velocity_In_Knots;Distance: Distance_In_Nautical_Miles;Some_Number: Float;Some_Number:= Distance + Velocity; -- Will be caught by the compiler as a type error.
        对领域需求较少的程序员也可以通用应用领域特定类型而获得好处,不然他们也可以继续使用语言和库提供的基础类型,例如string和float。Java,c++,Python以及其它现代语言的抽象数据类型是class。使用Velocity_In_Knots和Distance_In_Nautical_Miles之类的class对于代码质量可以增添许多价值:

        1. 代码变得更易读,因为它能表达出领域的概念,而不只是float和string。
        2. 代码变得更容易测试,因为代码封装了很容易测试的行为。
        3. 代码促进了跨应用和系统的重用。
        这一点对于静态类型语言和动态类型语言的用户都同样有用,惟一的区别是使用静态类型语言的开发人员可以从编译器得到帮助,而使用动态类型语言的则更可能是依赖他们的单元测试。检查的方式可能不一样,但动机和表达的风格是一致的。
        为了实现开发高质量软件的目标,开始探索领域特定类型吧。

原文:Prefer Domain-Specific Types to Primitive Types by Einar Landre

原创粉丝点击