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 Kay
byte 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 machine
x inline compiler
bitblit ( 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 を避ける
インスタンス変数での結びつきを小さくする
メソッド間での引数渡しにインスタンス変数を使わない
オブジェクトの状態を少なくする
引数は状態に入らない
破壊代入しない
インスタンスの再利用を避ける
継承を多用しない