CodeSOD:型式安全の一種 ノート

CodeSOD:型式安全の一種

著者は、生物学的分類法を用いてオブジェクト指向の概念を説明するという一般的な慣習を、特に継承を過度に強調するその限界から批判しています。次に、開発者がオブジェクト指向の重要な原則を誤解し、問題のあるコードにつながっているC++のコードベースについて論じます。その例として、動物が触手を持っているかどうかを判断するためにポリモーフィズムではなく、実行時型チェック(IS_INSTANCE_OF)を使用するStealTentacle関数が挙げられます。IS_INSTANCE_OFマクロは、意図しない動作につながる可能性のあるCスタイルのキャストでdynamic_castを誤って使用しています。このマクロは、実際の型をチェックする前にオブジェクトポインタを基底型に強制しようとしており、C++のキャスト規則の理解不足を示しています。開発者のコメントは、dynamic_castが直接的な継承のチェックだけでなく、関連する派生型間のクロスキャスティングを実行できることについての彼らの混乱を明らかにしています。著者は、このような実行時型チェックはアンチパターンであり、解決しようとしている問題は型システム自体を使用してよりエレガントに処理できると主張しています。コードは、マクロチェック後にダウンキャストを試みるために、より多くのCスタイルのキャストを使用することで、これをさらに例示しています。最終的に、著者は、オブジェクト指向の機能は強力になり得るものの、特に実行時型情報との誤用は、複雑で非効率的なコードにつながり、言語のエレガンスを損なう可能性があるという意見に同調しています。