03. SNAP! でオブジェクト指向(2/4)

概念・用語:

日本語の解説サイト http://snap.wp.xdomain.jp/ Snap!で遊ぼう

第2回目の資料を参照、やり残したところから再開。

第3回目の課題に、第2回目の観覧車を描く課題の提出先を設けた。スクリーンショットを撮り提出する。

■SNAP!

Scratchに、関数型プログラミングを支援する仕組み を加えたプログラム学習環境。

http://byob.berkeley.edu/

SNAP!マニュアル

※ Chrome 使用を推奨

■演習内容

http://byob.berkeley.edu/ から run SNAP! now で、SNAP!のプログラムを作成し、以下の内容を確認。

言語は英語環境になっているので 歯車アイコン から Language を 日本語 に切り替えておくとよい。

ただしテキストは英語なので、ブロックの作成は英語モードで行うとテキストと同じブロックを選べばよいので楽かも。

部品を組み合わせた造形:

ネタ動画 ビャンビャン麺 ビィアンという漢字 https://twitter.com/aoyagibisen/status/912320067865518080

■関数スタイルのプログラミング 再帰呼び出し編

カスタムブロックの定義:

SNAP!マニュアル

P.23 ブロック(手続き)の作成

ペンを利用した描画

square ブロックを引数を設定できるように修正

タートルグラフィックス プログラム学習用言語 LOGO 由来のコマンド型グラフィクス描画スタイル

カスタムブロック(手続き作成)

四角形描画

(応用) 多角形描画

P.25 引数のあるカスタムブロック

四角形のサイズ指定描画

(応用)カスタムブロックを再利用する。

・カスタムブロックをループ処理(回転)するカスタムブロックを制作。 rot_sq

・ 四角形の4つのコーナーを rot_sq で飾る。 rot_sq2

・rot_sqのプログラムを、任意の分割数、任意のサイズ で利用できるように修正した、rot_sq3を作る。

ペンを一旦消去して、上記で作成したコマンドを実行した例)

・カスタムブロックによる再帰呼び出し

P.26 再帰呼び出し によるフラクタル図形の描画

上記の図形描画ブロックの演習では、

小さな図形ブロック→複数構成→

中くらいの図形ブロック→複数構成 →....

のように、ブロックを階層的に組み合わせて、最終的な図形を描画した。

次の例では、1つの図形描画ブロックだけで、上の例のような複雑な構成の図形を描くことを試みる。

アイディア 木を部品に分解 木→ 幹の枝分かれ →大きな枝の枝分かれ →一回り小さい枝の枝分かれ→・・・・→葉

木は、幹 枝 葉 で構成されている。

葉の無い木 + 幹は太い枝とみなす → 木 は 枝だけで構成されている。

フラクタル図形の描画

再起呼び出しの実行状態)

再帰処理に関するたとえ話

再帰処理は自分のブロックが依頼された仕事を、さらに別の自分と同様のブロックに依頼して処理させる構造になっている。

これは、今日の宿題を今日の自分が一部だけ済ませて、残りを明日の自分に任せて 宿題をする作戦と同様だ。

この作戦がうまく働くためには、未来の自分は依頼を必ず遂行しなければならない。

未来の自分はさらに未来の自分に宿題の一部を投げる。

未来のどこかの時点で、未来の自分が残りの仕事を未来に投げるのをやめて、残りの仕事(過去の自分が大部分を片付けているので、僅かな量の筈)を全部片づけるので、この作戦(アルゴリズム)はうまく働く。

関数ブロックの作成(モニターの作成)

以下の2例は数学的関数の再帰的定義の例。

例1) 階乗計算

関数の作成(モニター)

関数の値(report 値の返却)

例2) コンビネーション( n 個 から m 個 を取り出す組み合わせの計算) comb

今回の演習内容まとめ:

tree ブロックを修正して、フラクタル図形にランダム要素を追加した例)

■プログラムの保存と提出など

提出方法:

2018年度は プログラムエディターを開いて、作成したブロックの内容を表示し、

実行結果をスクリーンに描画し、スクリーンショットの画像で課題提出に変更。

保存されたファイルをWebClassにアップロードする。