通常安全关键系统是否使用 Encapsulation ?假设用于卫星,喷气式战斗机,潜艇或客机的 Ada 或 C 实施的嵌入式系统。
我得到了一个问题,因为对我而言,封装的概念可以帮助软件开发和维护过程,而不是软件本身。因为它通过 Accessors 而不是直接内存访问来增加访问数据的一点开销,我想知道这样的安全关键应用程序是否可以实现像这样的抽象层封装。
另外我假设有大量代码为客机供电,所以如果他们不想让这些概念出现在板上,那么软件开发可能会在某些时候失控。
P.S。如果问题似乎偏离主题,请填写评论或编辑,因为这对我来说是一个真正的问题,我希望从已经从事类似应用的人那里得到一些答案。
P.P.S。为了防止一些混淆,现代版本的 Ada 具有OOP功能,封装也可以在 C 中实现。
答案 0 :(得分:4)
在安全关键系统中,最重要的一个方面是认证和可维护性。显然,第二部分将更容易进行封装,事实上也是第一部分,因为在封装时更容易跟踪问题或证明某些东西(例如,您可以通过几行调试检查分配给执行期间的属性)。
关于开销,您可以使用inline
C函数或Ada pragma Inline();
来避免大部分开销,因此您仍然需要封装(您无法使用.
或{{1来访问属性访问者)但是使用getter将被内联,因此不会添加(或很少)开销。
我不知道它是否用于实际行业,但我不明白为什么要避免它。事实上,真正的问题可能是工业界并没有像你所说的那样使用具有OOP的现代版本的Ada或具有->
功能的现代C版本(附带C99)。