バベルの塔

Smalltalk勉強会＠京都
2008年12月3日

キャンパスプラザ京都

6F第2講習室

機械語

アセンブリ言語

テキストの「はじめに」の部分

ALGOL

FORTRAN

COBOL（これまで・今が旬・これから）BASICC

C#青木 淳

Perl

Ruby

C++

Java

SQL

Objective-C

JavaScript

PythonPHPatsushi@cc.kyoto-su.ac.jp
http://www.cc.kyoto-su.ac.jp/~atsushi/

Lisp

京都産業大学コンピュータ理工学部
研究室： 1号館 4階 1402研究室
客員研究員： 浅岡 浩子 ・ 澤本 依里

PrologSmalltalk

PostScript

Haskell

HTML

OCaml

XML

1

2

バベルの塔
1950~

1960~

1970~

1980~

機械語
Lisp
アセンブリ言語

バベルの塔
1990~

2000~

Haskell
OCaml

ALGOL

機械語

SmalltalkObjective-C

BASICCC++PostScript

PrologC++

LispHaskell

OCaml

Perl
PHP

Python

C#
Ruby

Java

Java

JavaScript
Perl

XMLC

BASIC

COBOL

HTML PostScript

FORTRANCOBOLFORTRAN

SQL

アセンブリ言語

ALGOL

Smalltalk

Ruby
PythonHTML

PHPJavaScript
PrologC#

Objective-C

XML

SQL

3

プログラミング言語を習得する早道

4

プログラミング言語の変遷

メタ系へ進みなさい！

手続き的

プログラム
言語仕様
いろいろなプログラミング言語をいちいち勉強するのではありません

まず、これをやって次に、あれをやって最後に、これを返す使えるようになることではなくていっそのこと作り出すことです
メタコンパイラ

非手続き的関数
論理
メッセージ（インタプリタ）

ソース
プログラム

機械語

コンパイラ
（インタプリタ）

5

翻訳系

解釈系

ビルド
（コンパイル＆リンク）

すぐ実行（スクリプト）6

プログラミング言語の変遷
データ型

最近の傾向

静的型チェック＆モジュール性

抽象データ型

情報隠蔽＆カプセル化

クラスベースド

総称性＆オーバーロード

オブジェクト指向

インヘリタンス＆ポリモーフィズム

並列オブジェクト指向エージェント

分散オブジェクト指向
形式オブジェクト指向

強い型チェック＆契約（表明と確証）

7

8

最近の傾向

最近の傾向

9

アラン・ケイ（Alan Kay）

10

すべての細胞は細胞から(all cells come from cells)

1940年生まれ
パーソナルコンピュータの父

1821年生まれ

1971年～1981年にXerox社パロアルト研究所（PARC）

解剖学と病理学の大家

画期的な「Dynabook」構想を提示

影響力のある言葉を多く残した人

オブジェクト指向プログラミング言語「Smalltalk」の開発

たとえば「すべての細胞は細胞から」や「医療はすべて政治であり、政治とは大規模な医療に他ならない」など

1981年～1984年にAtari社
1984年～1996年にApple社でフェロー

ルドルフ・ウィルヒョウ

1996年～2001年にWalt Disney社
2002年～2005年はHewlett-Packard社

すべてのオブジェクトはオブジェクトから子供たちとコンピュータとの関わりに注力(all objects come from objects)

私はコンピュータに関する発明をするときに、コンピュータに関する知識はまったく使いません。生物学や音楽など関係ない分野の知識と類推を利用します。私がオブジェクト指向の考え方を考えついたときにも、普通の人がコンピュータについて考えるようなことを考えずに、生物がどのようにして複雑な構造を作るかを考えました。

すべてはオブジェクト(everything is object)1112

細胞とオブジェクト

複製と差異

13

オブジェクトの能力

14

オートマトン（自動人形）
1940年代に神経生理学の研究者たちによって脳（神経回路網）の働きを数学的に説明するために開発された利用者からアクセス可能な要素であるオブジェク
トは、利用者が観察したり、操作したりする際に、いつも意味のあるやり方で、自分（オブジェクト）自身を提示できる能力を持ちます。

ポップアップメニューの状態遷移： Ｇ＝｛Ｑ，Ｘ，Ｙ，Ｐ，ε｝
有限個の内部状態の集合： Ｑ＝｛アイドル状態，メニュー表示状態｝
有限個の入力の集合： Ｘ＝｛マウスボタンプレス，マウス移動，マウスボタンリリース｝
有限個の出力の集合： Ｙ＝｛メニュー表示，メニュー項目ハイライト，メニュー消去｝
有限個の状態遷移関数の集合： Ｐ＝｛アイドル状態×マウスボタンプレス→メニュー表示，
メニュー表示状態×マウス移動→メニュー項目ハイライト，メニュー表示状態×マウスボタンリリース→メニュー消去}
初期状態： ε＝アイドル状態

15

16発生と文法

発生と文法
全能性幹細胞の発生（生成）文法：
有限個の非末端細胞の集合：

Ｇ＝｛Ｎ，Ｔ，Ｐ，σ｝
Ｎ＝｛全能性幹細胞，骨髄性幹細胞，リンパ球幹細胞，赤血球幹細胞，顆粒球幹細胞，好酸球幹細胞，巨核球幹細胞｝

有限個の末端細胞の集合：

Ｔ＝｛赤血球，好中球，マクロファージ，好酸球，血小板，Ｂ細胞，Ｔ細胞｝

有限個の生成規則の集合：

Ｐ＝｛全能性幹細胞→骨髄性幹細胞／リンパ球幹細胞，骨髄性幹細胞→赤血球幹細胞／顆粒球幹細胞／初期細胞：

好酸球幹細胞／巨核球幹細胞，リンパ球幹細胞→Ｂ細胞／Ｔ細胞，赤血球幹細胞→赤血球，
顆粒球幹細胞→好中球／マクロファージ，好酸球幹細胞→好酸球，巨核球幹細胞→血小板}σ＝全能性幹細胞

元来をたどることができ、どのような差異が生じて分かれたいったのかを物語る

インヘリタンス（継承）1718オブジェクトの自律性オブジェクトと日本（自分のことは自分で決める）（オブジェクト指向という訳語が悪かったかも…）○

1970年代の中頃に提唱されながら、メッセージ1970年代の後半から1990年代の前半に渡って、オブジェクトや抽象データ型の本質は日本の開発現場に浸透していない。
Liskov, B. H. and Zilles, S. N., "Programming with Abstract Data Type",
Proceedings of ACM SIGPLAN Conference on Very High Level
Languages, SIGPLAN Notices 9, 4, pp. 50-59, 1974.

×Cox「ハードウェアは進歩している。
ソフトウェア もそれに続いている。

直接操作

開発現場の保守性いちばん遅れているのが ヘッドウェアである。」（侵襲）

DeMarco「ソフトウェア開発上の問題の多くは、技術的 というよりも社会学的である。」

1920

オブジェクト（対象）

60兆個（自律性と分権性）

○
メッセージ

複製と差異

×
直接操作
（侵襲）

21

22

複製と重複

インヘリタンス（継承）
図形四角形

長方形

23

正方形

三角形

正三角形

二等辺三角形24

差異と節約（似非オブジェクト指向）

オブジェクト指向

真のオブジェクト指向プログラミング言語は少ない

面向対象（オブジェクトと向かい合える）
利用者からアクセス可能な要素であるオブジェクトは、利用者が観察したり，操作したりする際に、いつも意味のあるやり方で、自分（オブジェクト）自身を提示できる能力を持ちます。

インスタンス
クラス

クラスとインスタンスの区別がある
すべてがオブジェクトではない！

クラスとインスタンスの区別がない
すべてがオブジェクト！
25

26

ポリモーフィズム（多相）ポリモーフィズム＝同じメッセージでも受け手によって挙動が異なること

手続き的からオブジェクト指向へひとつのメッセージから多くの相（姿）が現れる
ことによる共有の可能性反転しなさい

データと手続きが別々だからデータの種別を常に考慮しなければならない

データと手続きが一緒だからオブジェクトの種別を考慮しないですむ

表示をつかさどる
手続き

Text
テキストデータ

イメージデータ

二進数列

真偽

画像true
テキストオブジェクト

イメージかイメージオブジェクト

自動車

表示せよ
ムービーデータ

1001010

表示を依頼する
オブジェクト

データはテキストか

ムービーか

ムービーオブジェクトサウンドか

1,2,…10

サウンドオブジェクト

サウンドデータ

ボディデータこのプログラム構造は、プリンタへの出力部分にも、ネットワークを介したデータ送信部分にも、受信部分にも見い出される。

新しい型のデータを付加すると、同じプログラム構造を持っている場所をすべて変更し、テストしなおさなければならない。

0110101

false

プリンタへの出力部分、ネットワークを介したデータの送信部分、受信部分どのオブジェクトの部分も、同一のメッセージを送っている。

ボディオブジェクト

新しい型のデータを付加しても、ポリモルフィズムが有効に働くため、メッセージを送っているプログラムには一切変更がない。

10,9,…127

オブジェクト指向のダイナミクス

まとめていろいろ複雑なことがあって、すべてはオブジェクト（もの）へと収斂していく

インスタンス変数()

オブジェクト（対象）

1

もの

24

インスタンス変数()

大きさを持つもの問題解決手段が複数あることを示すのに有効

クラス（部類・抽象データ型）
インスタンス（実例・抽象データ）

3･･･（の一種）である

28

改変容易性

5
6

･･･（の一種）である
インスタンス変数()

継承（インヘリタンス）

メッセージ
7

計算値

オブジェクトを分類し整理するのに有効

認知的経済性89･･･（の一種）である

14
xy

インスタンス変数(x, y)

多相（ポリモーフィズム）･･･の実例である

ある座標

座標

1011

他分野のオブジェクトを包括するのに有効

共有可能性

1213

インスタンス(100, 200)

クラス
(x, y)

メソッド（関数）メッセージ名 14

方法の辞書

メタクラス
平面上に原点を共有し、互いに直交する二本の数直線（ふつう縦横に画き、縦をy軸、横をx軸と呼ぶ）を定めれば、平面上の任意の点Pの位置はPからそれぞれの数直線への射影により与えられる。x軸、y軸への射影をそれぞれPのx座標、y座標をという。

2930