Object 指向プログラミング
Menu Menu
Simula 67
離散イベントシミュレーター
Lion 個々のLion, 位置、状態 並列にオブジェクトは動く オブジェクト = 自然の中にいる動物とか
Smalltalk 80
Xerox Parc
Ethernet, Mouse, Bitmap display, Multi Window, Workstion, Dynabook, Unicode Mesa, Smalltalk, Interlisp D Wyswig ( What you see is what you get )1984 年から
Alan Kaybyte code machine
inline compiler
MVC
Model/View/Controller (-> Rails )
Squeak
Smalltalk 80 の dead copy 。Opoen License。
Morph ( MVC の replace )http://www.squeak.org/
Squeakの技術
byte code machinex inline compilerbitblit ( bitmap display の基本操作)
Image File
Snapshot
Browser, Inpecter
Objective C
Squeak / Smalltalk の構文を、そまま持ってきている
Object 指向言語の特徴
self があるかどうか。
C++ this Java this
C++
C の構造体をオブジェクトとみなす。
Java
VM とかは Smalltalk から。構文は C++ から取っている。
型とオブジェクトID
Smalltalk は、すべてオブジェクト
数字もオブジェクト オブジェクトには id がある 対応するオブジェクトを書き換えられる become 全部オブジェクトだから、型はないC++ は、オブジェクトはメモリ上の構造体
メソッドは、構造体の中に入っている関数 ( virutal ) オブジェクトは構造体に対応する型を持つ => Template でコンパイル時に型を整合させる オブジェクトはアドレスで識別Java は、オブジェクトはメモリ上の構造体
メソッドはすべて virtual すべてのオブジェクトは型を持つ配列の中のオブジェクトは、型の情報を持ってない
=> generic でコンパイル時に型を整合させる オブジェクトはアドレスで識別
関数型言語とオブジェクト指向言語
オブジェクト指向言語はだいたい副作用を持つ
関数と、関数が定義された環境
a := 3 return fun x => a + x Closure = 関数 + 環境 Closure はだいたい Object と一緒 self は自分で用意する
オブジェクトとデーターベス
オブジェクトは、データベースの一つのレコード オブジェクトは、一般的にはキーをもたない オブジェクトどうしは、リンクで結ばれる サブクラスがあるので、レコードの型が一つとは限らない
オブジェクト指向プログラミング
利点
データやレコード、メソッドのグルーピングを提供するself を持つ モジュール / パッケージ
Wysiwig のような実際にあるものとの対応 デザインパターンが用意されている abstract factory state pattern command pattern
欠点
クラスとかモジュールは、一意に定まらない色んな設計があり得る
何をクラス/オブジェクトにして良いかわからないオブジェクト間の依存関係が複雑に密になる
=> 継承 デザインパターンを使うと、プログラムがわからりづらくなる
対処
クラスやオブジェクトの依存関係をなるべく小さくする デザインパターンを目標にプログラミングしない => ここにはデザインパターンが有効だと見えたら使う一般的な注意 / アンチパターン
プログラミング作法とか、達人プログラマー、コードコンプリートとかにあるが....
大域変数を避ける Singleton pattern を避ける インスタンス変数での結びつきを小さくする メソッド間での引数渡しにインスタンス変数を使わない オブジェクトの状態を少なくする 引数は状態に入らない 破壊代入しない インスタンスの再利用を避ける 継承を多用しない