abee2による解説がわかりやすかったので転載

  • これを読んでScratchで個別のスプライトにメッセージを送るを作った
    • オブジェクトを変数に代入できない(第一級オブジェクトではない)

    • これは事実だが、オブジェクトに一意なIDを振ることはできる。
    • そのIDは変数に入れることができる。
    • メッセージを送る際に宛先変数にIDを入れることで「個別のオブジェクトに対するメッセージ送信」に相当する処理をできる。

abee2

  • Scratchはテキスト言語です(たとえば、言語設定をアラビア語に変えると読めなくなる)。ブロックを組み立てるのはパーズを飛ばして構文木を作っているのと同じです。パラダイムは並行分散イベント駆動インスタンスベースオブジェクト指向型言語なので、同系統であれば論理型や関数型よりも近いです。

  • Scratchにおける抽象化はオブジェクト(スプライト)にまとめることですが、継承も移譲もないのでちょっと特殊です。目に付くのは機能抽象で「もし端に着いたら、跳ね返る」が最たる例です。つまり、高機能のライブラリを最初から組み込んでいるので、問題領域に対して抽象的な記述ができるわけです。

  • 自分で機能の抽象化を行う方法としては、ブロック定義とメッセージがあり、前者はプロシージャを書くのと同じです(関数ではない)。後者は、ブロードキャストを使って、GoFのオブザーバーパターン(送信者と受信者の関係が1:n)と同じことを実現できます。これでポリモフィズムを活かして書くとScratchらしいコードになります。

  • Scratchが他のオブジェクト指向型言語と異なるのは、オブジェクト間の結合が極端に疎なことです。オブジェクトを変数に代入できない(第一級オブジェクトではない)ので、オブジェクト間の関係を静的に記述できません。これがScratchの最大のチャレンジです。このアイデアはStarLogoからきています。