10/3LTメモ:オブジェクト指向について

発散しそうなので、演目を変えそうな予感がします。
自動車とトラックと乗用車をオブジェクト指向モデリングするより、オブジェクト指向モデル/プログラムを実物でモデリングしてみる演目にしよう…かな。それにしても5分じゃキツい。

オブジェクト指向とは

オブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方である。英語の object-oriented (直訳は、「対象物志向の」・「目的重視の」という意味の形容詞) の日本語訳である。
オブジェクト指向 - Wikipedia

だいたい合ってる。
オブジェクトの相互作用で云々を逆に言うと、オブジェクトと呼ぶ単位で処理を分割していくこと。つまり、他のオブジェクトへ委譲して、目的を達成すること。

クラスとは

クラス(class)は、クラスベースのオブジェクト指向においてオブジェクトの設計図にあたるもの。抽象データ型の一つ。クラスから生成したオブジェクトのことをインスタンスという。
クラス (コンピュータ) - Wikipedia

オブジェクト生成器かつメッセージの委譲先。Smalltalkの定義。を個人的には採用。Javaでも同様の考えは可能なので。

オブジェクトとは

オブジェクト(英: object)はオブジェクト指向プログラミングにおいて、プログラム上の手続きの対象を抽象化する概念である。

オブジェクトの具体的な実体を、インスタンスと呼び、抽象的なオブジェクトの性質をクラスと呼ぶ。たとえば、ファイルやコンピュータなどのアイコンは、オブジェクトのインスタンスであり、一般的な「ファイルというもの」、「マウスカーソルというもの」が、クラスである。

これはない。
単に、処理対象をまとめたもの。

メッセージとは

オブジェクトへ送る依頼、命令、プロパティ取得更新、など。普通は文字列。
何らかの結果が返ってきたり返ってこなかったり。例外を含む。
メッセージ"add"を引数"1"と"2"とともに渡す⇒3が返ってくる
存在しないメソッド呼び出し⇒メソッドが見つかりません例外が投げられる
返ってきたメッセージを捨てたり

オブジェクトとクラス

オブジェクトはクラスを変更できるか?つまりメッセージ処理の委譲先を変更できるか?
Iokeはおk
Smalltalkはおk
Pythonは?
Rubyはだめ
Javaは絶対にだめ
C++は?Scalaは?

プロトタイプベースとは

メッセージ処理の委譲先を「プロトタイプ」とよぶ。親オブジェクトとか呼んだりする。
プロトタイプ=クラスとして扱えるが、そうとも限らない。

インスタンスとは

クラスによって生成されたオブジェクトのことを言ったり。
「オブジェクトの実体」って意味わからん。
クラスの実体という説明は全く間違い。
オブジェクトの中にメソッドを持つ。とは考えない方がいい。
どこから来た用語なんですかね、これ。

継承、多態性カプセル化

クラスの定義方法の一つでしかないので、大した問題ではない。

型(Type)ってなに?

同じ外形を持つ=同じインタフェースを持つ=同じメッセージ処理ができる
強いクラスベース⇒オブジェクトのクラス=オブジェクトの型
弱いクラスベース⇒オブジェクトのクラス=オブジェクトの型とも扱えるが、そうとも限らない。
プロトタイプベース⇒オブジェクトのプロトタイプ=オブジェクトの型とも扱えるが、そうとも限らない。
強い型付け⇒'10'+10 ⇒ error
弱い型付け⇒'10'+10 ⇒ 20 perl

動的型付けと静的型付け

変数の型付けのこと。オブジェクトの型、ではないらしい。
変数が参照するオブジェクトが規定のインタフェースを備えていることを保証するのが、静的型付け。
変数が参照するオブジェクトを制限しないのが、動的型付け。

関数型との関連は?

関連は?