手続き型プログラミングではローカルスコープを持つことができることを考えると、次のステートメントは正確ではないと言っても過言ではありませんか?
「手続き型プログラムでは、データはプログラム全体に公開されますが、OOP プログラムでは、オブジェクト内でアクセスできるため、コードのセキュリティが保証されます。」
(私は学生で、インターンシップの面接でこの質問をされました)
手続き型プログラミングではローカルスコープを持つことができることを考えると、次のステートメントは正確ではないと言っても過言ではありませんか?
「手続き型プログラムでは、データはプログラム全体に公開されますが、OOP プログラムでは、オブジェクト内でアクセスできるため、コードのセキュリティが保証されます。」
(私は学生で、インターンシップの面接でこの質問をされました)
正確に正しくない部分は「コードのセキュリティを保証する」というマークに同意します。
オブジェクト指向言語は、手続き型言語が行うことができるのと同じことを内部的に行っています: 型定義を隠し、データを含む構造体へのポインターを渡すのではなく、グローバルを使用します。例として、API のユーザーが内部データ構造を変更できないように不透明な型を使用する C の pthreads ライブラリがあります。(不透明とは、構造体がプライベート ヘッダーで定義されていることを意味するため、ユーザーはポインター トリックなしではその内部を見ることができません。)
しかし、データセキュリティ?いいえ、ポインターを使用して、不透明な構造体の内部をピークにしたり、スタック上のデータを検査したりすることもできるためです。これは C++ でも機能します。ハッカーは、プログラムのメモリも調べようとする可能性があります (デバッガー、コア ダンプ、その他のトリック)。