![見出し画像](https://assets.st-note.com/production/uploads/images/37008306/rectangle_large_type_2_453eea4ffc6bf1bdaff53413b88c0d6a.png?width=800)
オブジェクトを視たことありますか
対話環境ではオブジェクトを視ることができる。例えば Python + Jupyter の環境で、class を使うとオブジェクトを実在させることができる。そこにどんな属性やメソッドが組み込まれているか明らか。
この例では class として MyRobot を定義し s として実在させ、メソッド hello で操作している。
s だけで何か分かるし、型 (type) や 属性およびメソッド (dir) で視ることができる。
対して、C言語の struct でできるのはデータ構造の定義だけ、メソッドは関数として定義して、開発者の頭の中でオブジェクトを実在させるしかない。大昔にインタプリタ型の C-terp というのもあるにはあったが。
もちろん Lisp 環境での CLOS では総称関数なので特定のオブジェクトに限定されることなく、C言語と同様に別々に定義されるが、総称関数はオブジェクトの識別を自動で行うのでさらに機能的になっており、SLIME 環境では容易に視ることができる。
いずれにしても、オブジェクトを実在させてメソッドで操作できるというのは、モデルを使って演技させている感覚で使いやすい。
オブジェクトは継承やコンポジットで装飾できるし、メソッドもオーバーライドなどで変更できる。ただし一定の配慮は必要だが。
例えば、6人がテーブルに向かい会って座っている状況で、コロナがどう感染するかをシミュレーションしたいとする。
その場合、各人をオブジェクトとしてモデル化すれば、どんな属性やメソッドが必要かを考えやすい。ウイルスの滞留環境もオブジェクトとしてモデル化してもよい。あとはタイム・ステップで個々のオブジェクトの振る舞いの状況を計算し属性に保持しておけば、シミュレーションが終わったときにトレースとして取り出せる。何度か作り変えればよりよいものが得られるだろう。
これを非オブジェクトでやろうとすると、相当に面倒なプログラミングになりバグりやすい。オブジェクト指向の技術を習得するのはちょっと大変だが十分に見返りが得られる。
最初に書いたように、対話環境でオブジェクトを実在させて、視ながらモデルを洗練していけば、彫刻を削り出すような感覚でプログラムを開発できる。
さらに、SageMath や FEniCS などで定義されている数学的なオブジェクトを視てみると、頭の中だけでは理解が難しい概念、例えば多項式環やベクトル空間や有限要素空間なども実装されているので、理論を理解する上でも非常にありがたい。いろんなオブジェクトを視てみませんか。
#IT #AI #Python #プログラミング #ソフトウエア #数学
この記事が気に入ったらサポートをしてみませんか?