Eiffel Tutorial : 5 The Static Picture: System Organization
Eiffel Tutorial の 5 章を読んだ.
Systems
- Eiffel で書かれたシステムってのはクラスの集合である
- ルート手続きがプログラムの実行の開始地点となる
- ルート手続きに設定できるのは生成手続き(creation procedure)だけ
- ルート手続きの設定は EiffelStudio ではメニューの「Project」→「Project Settings...」からできる
http://d.hatena.ne.jp/sa-y/20061003 の Hello World の例で HELLO クラスの make 手続きが実行されるのはそのプロジェクトの設定で HELLO クラスの make という生成手続きがルート手続きとして設定されているからということです.
Classes
クラスって何?って話.まぁ普通.
Class relations
クラス間の関係について,以下の2種類の話.
- has-a の関係
- is-a の関係
has-a の関係
クラス A のフィーチャをクラス C が利用している場合にクラス C をクライアント(client)と呼んで,クラス A をサプライア(supplier)と呼ぶ.
この呼び方って Eiffel 以外であまり聞かない気がするんだけど Meyer 先生はこの言い方をよく使う気がします.これってやっぱり DbC(Design by Contract) が「契約」というメタファーを使っているのでそれに合せてこういう呼び方をするんでしょうねぇ.「クライアント」と「サプライア」との間の「契約」というメタファー.まぁ DbC はまだ出てこないので深くはつっこみません.
is-a の関係
クラスの継承関係の説明.これもまぁ普通です.
The global inheritance structure
- Eiffel は基底クラスが存在する言語で,名前を ANY という
- 全てのクラスの子孫クラスになるクラスとして NONE というクラスが概念上存在する
External software
C や C++ や他の言語で書かれたルーチンを呼出す方法.
C言語で書かれた "_fstat" 関数を呼びだす例は以下のようになるらしい.
file_status (filedesc: INTEGER): INTEGER is -- Status indicator for filedesc external "C" alias "_fstat" end
試しにabs(3)を呼びだす absolute 関数を作って呼び出してみる.
class ROOT_CLASS create make feature -- Initialization make -- Creation procedure. do io.print(absolute(10)) io.put_new_line io.print(absolute(-20)) io.put_new_line end absolute(i : INTEGER) : INTEGER is -- external "C" alias "abs" end end -- class ROOT_CLASS
ちゃんと動くっぽい.基本型を引数にして基本型を返すだけなら本当に簡単にCの関数が呼べる模様.Eiffelえらい. 引数や戻り値が構造体とかポインタとかの場合はまた今度.