c - 安全关键系统中的封装

标签 c embedded encapsulation ada safety-critical

<分区>

安全关键系统通常是否使用封装?假设一个用 AdaC 为卫星、喷气式战斗机、潜艇或客机实现的嵌入式系统。

我得到了这个问题,因为对我来说封装的概念是为了帮助软件开发维护过程,而不是软件本身。由于通过访问器访问数据而不是直接在内存中访问会增加一点开销,所以我想知道对于这样一个安全关键的应用程序来说,实现一个抽象层是否可以接受封装。

此外,我假设有大量代码为一架客机提供动力,因此如果他们不想在机上使用这些概念,那么软件开发可能会在某个时候失控。

附言如果问题看起来离题,请随意评论或编辑,因为这对我来说是一个真正的问题,我希望从已经从事过类似应用程序的人那里得到一些答案。

附言只是为了避免一些混淆,Ada 的现代版本具有 OOP 特性,并且也可以在 C 中简单地实现封装。

最佳答案

在安全关键系统中,最重要的方面之一是认证和可维护性。显然,第二部分使用封装会更容易,实际上第一部分也更容易,因为当您进行封装时更容易跟踪问题或证明某些事情(例如,您可以通过几行调试检查分配给执行期间的属性)。

关于开销,您可以使用 inline C 函数或 Ada pragma Inline(); 来避免大部分开销,因此您仍然有封装(您不能使用访问属性.-> 访问器)但使用 getter 将被内联,因此不会(或很少)增加开销。

我不知道它是否在实际工业中使用,但我不明白为什么要避免它。事实上,真正的问题可能是工业界并不像您所说的那样使用带有 OOP 的 Ada 的现代版本或带有 inline 函数(C99 附带)的现代 C 版本。

关于c - 安全关键系统中的封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23286924/

相关文章:

c - 是否可以使用 C 语言访问 DRAM 位单元?

c - Kernighan & Ritchie 代码示例混淆

c++ - C++ 中是否有标准的循环整数类?

java - 覆盖抽象字段 Java

c - 如何使用 minilibx 进行编译?

c - 如何防止通过原子比较和交换实现的并发lifo堆栈中的损坏

embedded - 手动重新获得嵌入式系统上的 ssh 访问权限(可以直接访问硬盘)

android - 嵌入式系统:我应该使用哪个操作系统?

c++ - 我的问题是我们可以避免 if 条件吗?

java - 状态模式和封装