C 安全关键系统中的封装

C 安全关键系统中的封装,c,embedded,encapsulation,ada,safety-critical,C,Embedded,Encapsulation,Ada,Safety Critical,安全关键系统通常使用封装吗?比如说,在Ada或C中为卫星、喷气式战斗机、潜艇或客机实现的嵌入式系统 我得到了这个问题,因为对我来说,封装的概念是为了帮助软件开发和维护过程,而不是软件本身。由于通过访问器而不是直接在内存中访问数据会增加一些开销,我想知道这样一个安全关键应用程序实现抽象层(如封装)是否可以接受 此外,我假设有大量的代码为飞机提供动力,例如,如果他们不想在飞机上安装这些概念,那么软件开发可能会在某个时候失控 另外,如果这个问题似乎离题了,请随意填写,以便评论或编辑,因为这对我来说是一

安全关键系统通常使用封装吗?比如说,在AdaC中为卫星、喷气式战斗机、潜艇或客机实现的嵌入式系统

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

此外,我假设有大量的代码为飞机提供动力,例如,如果他们不想在飞机上安装这些概念,那么软件开发可能会在某个时候失控

另外,如果这个问题似乎离题了,请随意填写,以便评论或编辑,因为这对我来说是一个真正的问题,我希望从已经从事类似应用的人员那里得到一些答案


p.p.S.为了避免一些混淆,Ada的现代版本具有OOP功能,并且可以简单地用C实现封装。

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

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


我不知道它是否在真正的行业中使用,但我不明白为什么应该避免。事实上,真正的问题可能是,正如您所说,Industrial不使用带有OOP的现代版Ada或带有
内联
函数的现代C版(随C99提供)。

感谢@Holt的输入。我希望有实际经验的人在这里能有所启发,因为我在网上找不到任何解决这个问题的资源。除了明确使用
内联
,即使没有pragma/aspect,也应该有编译器/优化器自己解决如何避免开销的问题。它在您描述的系统中与在其他任何地方一样重要-非常重要。