日記帳

日記です。

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/20061003Hello 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

クラスの継承関係は以下のような感じらしいです.
http://docs.eiffel.com/eiffelstudio/general/guided_tour/language/tutorial-4.png

  • 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えらい. 引数や戻り値が構造体とかポインタとかの場合はまた今度.