问题是:使用派生类型/子类型还是使用条件和异常处理来限制Ada中子程序的可接受输入是更好的做法吗?我知道在Ada2012中您可以使用契约,但是对于Ada95这样的早期版本呢?
上下文:我想做一系列的过程,这些过程可以读取/写入包中的特定字段(由私有的无符号字节数组表示),以便从嵌入式设备广播到ASIC。许多字段大小不同,不与字节边界对齐,因此使用标准类型将允许使用这些过程的程序在不检查的情况下输入非法值。
额外注意事项:除了通过这些子程序操作数据包内容之外,这些类型不会在其他地方使用。此外,如果它产生了影响,此代码将用于安全关键系统。
发布于 2018-11-28 16:13:33
您肯定应该选择子类型来指定某个类型的哪些子集对于操作某个类型的单个操作是有效的。
您也可以使用派生类型来完成此操作。这是有意义的,如果您(例如)有有限数量的子集,而且您的大多数操作都不会更改特定实体所属的类型的哪个子集。
通常,即使在Ada 95中,您也可以编写相当好的子类型合同。Ada 2012只是在合同形式中添加了更细粒度的细节。
很抱歉,我的答案有点抽象,但我希望它能帮助你开始工作。
发布于 2018-11-27 07:49:29
Ada语言历来非常关注类型系统,通过编译时和运行时检查赋值是否合理,变量是否持有在其有效范围内的值。
这段历史让我相信--我不能肯定,因为我不是Ada程序员--一种带有编译器生成的派生/子类型方法将比手动检查更受欢迎,即该值在预期范围内。
除了Ada特有的考虑之外,人们通常认为尽早发现问题是更好的。如果您的编译器(或其他构建工具)可以显示您正在编写非法值,那么这比在运行时的测试中找到它更可取。越早通知您问题,您就可以越早地修复它,并且越少的努力来了解需要修复什么。
https://softwareengineering.stackexchange.com/questions/382070
复制相似问题