Eiffel Tutorial : 6 The Dynamic Structure: Execution Model
Eiffel Tutorial の 6 章の半分くらい.概念的な話が多くなると英語で読むのしんどい.
Objects, vlaues and references
インスタンスって何?とかの話. 超ふつーなので略.
Features
異なる2つの視点から見た Feature の分類とそれぞれの意味の話. 内容は以下の図の通り.
右がサプライアクラスの内部実装の視点で左がクライアントクラスから見た視点.サプライアクラスの実装者は両方の視点からクラスを設計する必要があるんだけど,クライアントクラスの実装者は右側の視点を意識せずにすむようにした方がいいよね.そのために Eiffel は Query が Function として実装されているか Attribute として実装されているか区別しなくていいようになってるんじゃよーという話.
ぶっちゃけると Meyer タンの Uniform Access Principle の説明.この辺は試験に出そうなので要チェック(何の試験?).
A simple class
これまでの話を簡単なクラスで説明.どうでもいい.
Creating and initializing objects
オブジェクトの生成と初期化の話.
create <変数名> create <変数名>.<生成手続き> create <変数名>.<生成手続き>(<引数>...)
こんな感じで生成して初期化する.
他のメジャーなクラスベースOOPLは以下のようにクラス名を指定して生成するものが多いけど.
<クラス名> <変数名> = new <クラス名>();
えーと,オブジェクト生成時に生成するクラス名を書かなくてすむのがメリット,変数の型と異なるクラスのオブジェクトを生成していきなり代入とか出きないのがデメリットかな?たぶん.
Entities
一般のプログラミング用語で変数って呼ばれてるやつを Eiffel ではエンティティ(entity)と呼ぶらしい.以下の4種類のエンティティがある.
- クラスの属性
- ルーチンの引数
- ルーチン内部でだけ使えるローカルエンティティ
- 関数内でだけ使える Result という名前の特殊エンティティ
Calls
ルーチンの呼び方,あるいは属性へのアクセスの仕方.
"." 演算子でつなげて書く.超普通.
Infix and prefix notation
二項演算子の定義の仕方.
infix "+" (other: INTEGER): INTEGER is do ... end
単項前置演算子の定義の仕方.
prefix "-" (other: INTEGER): INTEGER is do ... end
実際書いてみる.
class POINT creation make feature -- Initialize make(a, b : REAL) is -- init with initial value do x := a y := b end feature -- Access x, y : REAL feature -- Basic Operation infix "+" (other : POINT) : POINT is -- plus operator do create Result.make(x + other.x, y + other.y) end infix "-" (other : POINT) : POINT is -- minus operator do create Result.make(x - other.x, y - other.y) end prefix "-" () : POINT is -- minus operator do create Result.make(-x, -y) end end
で以下のような感じで動くはず.動いた.
make is -- Creation procedure. local p1, p2, p : POINT do --| Add your code here create p1.make(10, 10) create p2.make(5, -5) print(p1) print(p2) p := p1 + p2; print(p) p := p1 - p2; print(p) p := -p1; print(p) end
続きはまた.