第1回 Smalltalk の概要(4月9日; 10日)
今日の課題
- Squeak の操作
- オブジェクト
- メッセージ
- クラスとインスタンス
■ Squeakの操作
準備
- イメージファイル: イメージファイルは、Squeak のオブジェクトの世界を構成するファイルである。デフォルトのイメージファイルは、/usr/local/lib/squeak/SqueakPlugin.image に存在する。これを自分のディレクトリにコピーして使用する。
たとえば、~/2009-Lect-3/Squeak/ というディレクトリを作成し、その下に MySqueak.image という名前でコピーしよう。 ⇒ 具体例 1
起動方法
- Linux のコンソール上で以下を実行する:
squeak イメージファイル名
よく使うウインドウやスイッチ
- ワールド: 基本操作のメニューとなるウインドウ
出し方:背景のところにマウスカーソルを移動させ,「コントロールキーを押しながら右クリック」
- ワークスペース(Workspace): Smalltalk のプログラムを実行するウインドウ
出し方:「ワールド」のウインドウの中の「デスクトップメニュー…」の中の「開く…」の中の「ワークスペース (k)」を選択
- トランスクリプト(Transcript): Smalltalk の実行結果を表示するウインドウ
出し方:「ワールド」のウインドウの中の「デスクトップメニュー…」の中の「開く…」の中の「トランスクリプト (t)」を選択
- ブラウザ(System Browser): Smalltalk のオブジェクトを定義するためのウインドウ
出し方:「ワールド」のウインドウの中の「デスクトップメニュー…」の中の「開く…」の中の「ブラウザ (b)」を選択
- ナビゲータ: 便利なスイッチ群
- 「新しく作る」: モーフィック(Morphic)プロジェクトという「ウインドウの集合体のインタフェース」を作るスイッチ
演習課題ごとに作っておくと、実行結果の画面を整理しやすい。名前は変更できる。
- 「前へ」: モーフィックプロジェクトから戻るスイッチ
画鋲のボタン:「ワールド」などのウインドウの右上には、画鋲マークがある。そのマークをクリックすると画面にウインドウが固定される。
終了方法
- 「ワールド」の中の「デスクトップメニュー…」の中の「保存して終了」あるいは「終了」を選択
その他
- 無限ループの停止:ALTキーを押しながらピリオドを押すと、無限ループしている処理を止めることができる。
- イニシャルの入力:初めてクラスやメソッドを定義するとき、作成者のイニシャルが問われる。自分のイニシャルの入力を忘れずにしておくこと。
練習1
Squeak の実行環境を準備しよう。以下を実行しよう。
- コンソールを開く。
- 演習のための、Squeakのためのディレクトリを作る。
- そのディレクトリに移動する。
- イメージファイルを準備する。
- Squeak を起動する。
- 「ナビゲータ」より、プロジェクトを作る。
- プロジェクトの名前を「lect01」とする。
(「名無し」をクリックすると、緑色になるので、新しい名前を入力する。)
- 「保存して終了」より、終了する。
- 再び Squeak を起動し、環境を確認する。
→ 実行時の様子
以上ができた人は、プロジェクト「lect01」に移動したり、前へ戻ったりしてみよう。また、以降の練習は、プロジェクト「lect01」で行なうようにしよう。
■ メッセージパッシング
オブジェクトにメッセージを送ることを、メッセージパッシングという。
ワークスペース上で、メッセージパッシングの操作ができる。幾つかの操作方法がある。
- ALT + p メッセージを送り、結果をワークスペースに表示させる。
- ALT + d メッセージを送り、結果を表示させない。
※ ALT キーを押しながら、p や d のキーを押すという意味
- マウスで領域を指定し、ALT + p または d 複数の行にまたがるメッセージを実行する。
- 領域指定の後、「Ctrl + 左クリック」 操作メニューを表示する。括弧内のアルファベットは、ショートカットキーである。例えば、ALT + d は、「式を評価」のショートカットキーであったことが、メニューより分かるだろう。
練習2
(1) 数のオブジェクトに、単項メッセージを送り、結果を表示させよ。具体的には、「123.456」という数のオブジェクトに、「rounded」という四捨五入のメッセージを送ろう。
(2) 数のオブジェクトに、2項メッセージを送り、結果を表示させよ。具体的には、「2」という数のオブジェクトに、「+ 3」のメッセージを送ろう。
(3) 文字列のオブジェクトに、キーワードメッセージを送り、結果を表示させよ。
- (3-1) 「'Hello'」という文字列のオブジェクトに、「at:」というキーワードメッセージを、引数「3」を添えて送ろう。
- (3-2) 「'Hello'」という文字列オブジェクトに、「copyFrom:to:」というキーワードメッセージを、引数「2」と「4」を添えて送ろう。
■ 変数
Sqeuak でも、変数を使うことができる。しかし、C言語とはちがい、変数には型が無い。つまり、変数は、どんなオブジェクトでも指すことができる。
書き方は、下記のどちらでも良い。
- :=
- ← アンダーバーを入力すると、左矢印が表示される。
練習3
下記を実行し、結果をワークスペースに表示させよう。
a := 2.
b ← 3.
c ← 4
a + b * c
|
※ 複数のメッセージを、マウスで領域指定して実行する方法を試してみよう。そのために、行の最後にピリオド「.」が付いていることに注意しよう。
■ 色々なオブジェクト
Squeak には、色々なオブジェクトがある。
- 定義ずみのオブジェクト:数値、文字($が付く)、文字列(シングルコーテーション' で囲まれたもの)、真理値(true, false)、無(nil)
- グローバルオブジェクト:トランスクリプト(Transcript)
- インスタンスというオブジェクト:クラスというオブジェクトから作られたオブジェクト(new というメッセージで作ることができる)
練習4
(1) 色々なオブジェクトを使ってみよう。以下のコードを1行ずつ実行してみよう(ALT+p)。
●数のオブジェクト
-123 abs
123.456 rounded
2 + 3 * 4
2 + ( 3 * 4 )
●文字列のオブジェクト
'abcdefg' size
'abcdefg' capitalized
●配列のオブジェクト
#( 123 456 'abc' 'def') size
#( 4 3 1 5 9 3 2 ) sort
#( 123 456 'abc' 'def') at: 3
(#( 123 456 'abc' 'def') at: 3) capitalized
●時間のオブジェクト
Time now
●日付のオブジェクト
Date today
(2) トランスクリプトオブジェクトにメッセージを送ってみよう。
- (2-1) 表示のためのキーワードメッセージは、「show:」である。
Transcript show: 'Hello World!'
|
- (2-2) 改行をつけて送ってみよう。
Transcript show: 'Squeak World!'.
Transcript cr.
Transcript show: 'Smalltalk is fun'.
Transcript cr
|
(3) インスタンスを使ってみよう。
- (3-1) インスタンスを作り、変数がそれを指すようにしよう。具体的には、「StarMorph」という「星の図形」というクラスのオブジェクトに、「new」というインスタンス作成のメッセージを送る。その結果を変数「a」が指す。
- (3-2) 星のオブジェクトを画面に出現させよう。「openInWorld」は「出現せよ」というメッセージである。
- (3-3) 星の色を変えてみよう。「color:」は「色よ変れ」というメッセージである。色のインスタンスをこのメッセージに添える必要がある。色のインスタンスは、色のクラス「Color」にメッセージを送って作成する。
- (3-4) インスタンスの状態を観察しよう。「inspect」は、状態を表示させるためのメッセージである。
a inspect (ALT + d を押すとウインドウが表示される。
さらに、color のラベルをクリックすると、
右側に「Color green」と表示される。)
a color: Color red (ALT + d を押すと、「Color red」に変化する)
a color: Color blue (ALT + d を押す)
|
- ※ オブジェクトの状態については、次回の「インスタンス変数」にて理解できるようになります。
伝達事項
プリント類を綴じるための安いファイルフォルダーを準備して下さい。
情報工学演習3では、小レポートを採点した後に、いったん返却します。返却されたレポートを各自がフォルダーに綴じておいて下さい。最終課題レポートの提出時に、全ての小レポートを提出してもらいますので、それまで、大切に持っていて下さい。小レポートを無くした人は、提出無しとして扱いますよ!
2009.4.8 by tokuhisa