Инкапсуляция в критических для безопасности системах
Обычно системы, критические для безопасности, используют инкапсуляцию? Скажем, встроенная система, реализованная в Аде или Си для спутника, реактивного истребителя, подводной лодки или авиалайнера.
У меня возник вопрос, поскольку для меня концепция инкапсуляции призвана помочь процессу разработки и обслуживания программного обеспечения, а не самого программного обеспечения. Поскольку для доступа к данным через Accessors добавляются небольшие накладные расходы, а не прямой доступ в память, мне интересно, допустимо ли для такого критически важного приложения безопасности реализовывать уровень абстракции, такой как инкапсуляция.
Также я предполагаю, что есть тонны кода, например, для питания авиалайнера, поэтому, если они не хотят иметь эти концепции на борту, то в какой-то момент разработка программного обеспечения может выйти из-под контроля.
PS Если вопрос кажется не по теме, пожалуйста, не стесняйтесь комментировать или редактировать, так как это реальный вопрос для меня, и я надеюсь получить ответы от людей, которые уже работали над подобными приложениями.
PPS Чтобы избежать путаницы, современные версии Ada имеют функции ООП, и инкапсуляция может быть просто достигнута в C.
1 ответ
В системах, важных для безопасности, одним из наиболее важных аспектов является сертификация и ремонтопригодность. Очевидно, что вторая часть будет проще с инкапсуляцией, а на самом деле первая также будет проще, потому что легче отслеживать проблемы или что-то доказывать, когда у вас есть инкапсуляция (например, вы можете проверить с помощью нескольких строк отладки значение, назначенное для атрибут во время исполнения).
Что касается накладных расходов, вы можете избежать большинства из них, используя inline
С функция или Ада pragma Inline();
, так что у вас все еще есть инкапсуляция (вы не можете получить доступ к атрибутам с помощью .
или же ->
accessor), но использование метода get будет встроено, поэтому никакие (или несколько) накладные расходы не будут добавлены.
Я не знаю, используется ли это в реальной промышленности, но я не понимаю, почему этого следует избегать. На самом деле реальная проблема может заключаться в том, что промышленники не используют, как вы сказали, современную версию Ada с ООП или современную версию C с inline
функции (поставляется с C99).