いまどきのAdaについて勉強中。Adaはプログラミング言語Adaの こと。超マイナーな言語です。勉強と いっても あくまで趣味の領域です。
特に気に なるのがAdaでのオブジェクト指向の実装。C++では構造体を拡張することでオブジェクト指向に対応していますが、ふむふむ、Adaは かたとプロシージャや関数を分離したままなのか。だから操作対象のオブジェクトをひき数として わたさないと いけないのか。慣習として第1ひき数で わたすんだね。
コンストラクタとデストラクタが自動的に よびだされないから、オブジェクトの初期化とクリーンアップは明示的に実行しないと いけないんだ。となると、例外が発生したときに そのブロックの すべてのオブジェクトのデストラクタをわすれずに よびだすのもプログラマの責任? あ、Controlledって いう かたが あるね。これを継承すれば いいんだ。
※ この記事の本文からは漢字の訓を排除しています。
特に気に なるのがAdaでのオブジェクト指向の実装。C++では構造体を拡張することでオブジェクト指向に対応していますが、ふむふむ、Adaは かたとプロシージャや関数を分離したままなのか。だから操作対象のオブジェクトをひき数として わたさないと いけないのか。慣習として第1ひき数で わたすんだね。
コンストラクタとデストラクタが自動的に よびだされないから、オブジェクトの初期化とクリーンアップは明示的に実行しないと いけないんだ。となると、例外が発生したときに そのブロックの すべてのオブジェクトのデストラクタをわすれずに よびだすのもプログラマの責任? あ、Controlledって いう かたが あるね。これを継承すれば いいんだ。
その うえでControlledのプロシージャをオーバーライドすると いうことだ。type MyObject is new Controlled with record ... end record;
procedure Initialize( Obj: in out MyObject);
procedure Adjust( Obj: in out MyObject);
procedure Finalize( Obj: in out MyObject);
※ この記事の本文からは漢字の訓を排除しています。