Transcript オブジェクトとは
オブジェクト指向プログラミング
Using Smalltalk & Squeak
Presented by
アウトライン
オブジェクト指向の説明
プログラミング手法の変遷
オブジェクト指向とは
オブジェクト指向の実践
Smalltalkとは
Squeakとは
Squeakによる実習
目標!
ネットワーク対戦型カーレース作成
プログラミング手法の変遷
プログラミング手法
GOTO文によるプログラミング
GOTO文とは
GOTO文の問題点
構造化プログラミング
構造化プログラミングとは
構造化プログラミングの問題点
オブジェクト指向へ
GOTO文の紹介
行番号を使いある行からある行へ処理を移行
させるプログラミング手法
10
20
30
40
50
60
INPUT “あなたのなまえは?”, N$
IF N$ <> “Akinori” THEN 50
PRINT N$;”ひさしぶり”
GOTO 60
PRINT N$;”こんにちは”
END
GOTO文の問題点
10
20
30
40
50
60
70
80
90
100
101
120
130
INPUT “input =“,S
GOTO 50
PRINT “answer =“, A
END
A = 0
IF S > 10 THEN 100
IF S < 5 THEN 130
A = 1
GOTO 130
A = 2
IF S < 14 THEN 130
A = 3
GOTO 30
構造化プログラミングとは
個々の小さなブロックを作り、全体を組み立てる
#include
main()
{
int old;
printf("あなたの年齢は? >");
scanf("%d", &old);
if(old < 20)
{
/* oldが20未満だったら */
printf(“高校生ですか?!¥n");
}
else
{
/* そうじゃなかったら */
printf(“社会人ですか?!¥n");
}
}
構造化プログラミングの利点
全体の設計が分かりやすい
処理の手順(流れ)が分かりやすい
管理しやすい(部品の変更が簡単)
構造化プログラミングの基本原則
順次進行
プログラムをはじめから処理する
処理1
処理2
処理3
構造化プログラミングの基本原則
選択
「はい」又は「いいえ」で別れる処理
処理1
はい
ぬいぐるみを着る
条件
処理2
ぬいぐるみを着ない
ぬいぐるみを着ますか
いいえ
構造化プログラミングの基本原則
反復
ある処理の繰り返し
処理1
条件
寝る
眠い間
処理2
脱出
起きる
構造化プログラミングの問題点
巨大なプログラム
関数が入り組んで管理するデータが複雑になる
データが複雑になるとデバッグが大変
オブジェクト指向の説明
オブジェクト指向プログラミング
オブジェクト間のメッセージ送受信で処理を行
う
オブジェクト
オブジェクトとは
現実世界の「もの」と同じ
車
人
オブジェクトとは
オブジェクトはオブジェクトにメッセージを送る
ことができる
人オブジェクト
車オブジェクト
走れ!
オブジェクトとは
属性
内部にデータを保持
メソッド(操作)
メッセージを受け取ると反応
属性
オブジェクトそれぞれ固有のデータ
車オブジェクト
車オブジェクトの属性
・スピード
・乗っている人の数
メソッド(操作)
オブジェクトはメッセージを受け取ると反応
車オブジェクト
車オブジェクトのメソッド
・走る
・止まる
・人を乗せる
・人を降ろす
オブジェクトの生成
クラス
オブジェクトの設計
インスタンス
オブジェクトの実体
オブジェクトの生成
クラス=車の設計図
インスタンス=車
インスタンス
クラス
インスタンス
インスタンス
オブジェクト指向の利点
オブジェクト指向ではない場合
処理
データ
オブジェクト指向の利点
オブジェクト指向を適用させた場合
オブジェクト
オブジェクト
カプセル化
カプセル化とは
オブジェクト内部の情報を隠すこと
○
×
×
×
カプセル化の例
時計工場を例とした説明
時計作って
カプセル化適用前
オブジェクト内部の属性
外部からのアクセスが可能
時計作って
○
カプセル化適用後
オブジェクト内部の属性
外部からはメソッドを介したアクセス
時計作って
○
×
カプセル化の利点
サービス提供側
サービス内部を保護
サービスの動作を保証
ex.車のタイヤの曲がる角度に限界を設ける
サービス利用側
安全な部品として利用可能
サービス内部の知識は必要ない
継承
継承の必要性
クラス定義の冗長化
車
潜水艦
-int スピード
-int 客
-boolean 窓状態
-int スピード
-int 客
-int ミサイル
+走る()
+止まる()
+人を乗せる(int 人数)
+人を降ろす()
+窓を開ける()
+窓を閉じる()
+走る()
+止まる()
+人を乗せる(int 人数)
+人を降ろす()
+発射()
スケボー
-int スピード
-int 客
+走る()
+止まる()
+人を乗せる(int 人数)
+人を降ろす()
+ジャンプ()
継承
冗長性の排除
再利用性
差分プログラミング
継承
Sub Class
車
- boolean 窓状態
+窓を開ける()
+窓を閉める()
Super Class
のりもの
-int スピード
-int 客
+走る()
+止まる()
+人を乗せる(int 人数)
+人を降ろす()
継承
継承
Sub Class
潜水艦
Sub Class
スケボー
- int ミサイル
+ ミサイル発射()
+ジャンプ()
Squeak
Squeakで継承!
車、潜水艦、スケボーそれぞれのオブジェクトが
乗り物クラスを継承
多相性
異種レース
Using polymorphism
走れ!
走れ!
走れ!
多相性
サブクラスで共通のメソッドを作成
インスタンスが同じメッセージに対して違う反
応
走れ!
走れ!
多相性
クラス図
のりもの
-int スピード
-int 客
+走る()
+止まる()
+人を乗せる(int 人数)
+人を降ろす()
車
- boolean サンルーフ状態
+窓を開ける()
+窓を閉める()
潜水艦
スケボー
- int ミサイル
+ ミサイル発射()
+ジャンプ()
Squeak
1つのメッセージによる挙動の違い
スケボー
車
潜水艦
オブジェクト指向の実践
オブジェクト指向言語
Java
C++
C#
Ruby
Smalltalk
今回はこれで説明
etc…
Smalltalkとは
1980年頃Xerox Palo Alto研究所で開発
Alan Kay
Dan Ingalls
世界初のオブジェクト指向言語
「DynaBook」のOSとして考案
対話型インターフェース
安価でコンパクト
ネットワーク
誰でも使えるコンピュータ
Smalltalkの系譜
70s
80s
SmallTalk-72 Dynabook発案
実験的要素の追求
安定性
試作機テスト
商用化 SmallTalk-80Dynabookの概念
(ALTO)
ObjectWorks
VisualWorks1.0
90s
VisualWorks2.0
VisualWorks7.1
Apple版 SmallTalk-80
Smalltalkの特徴
理解しやすい記述
全てがオブジェクト
制御構造
理解しやすい記述
anObject doSomething: likethis
オブジェクト
メソッド
引数
理解しやすい記述
pitcher throw: ball to: catcher
オブジェクト
メソッド
引数
キーワードメッセージ
理解しやすい記述
配列のコピー
java
system.arraycopy(Object1,0,Object2,0,size
);
C
memcpy(Object1,Object2,size)
コピー元
コピー先
理解しやすい記述
smalltalk
Copier copyfrom: Object1 to: Object2 size:
aSize
引数の意味を見ただけで想像しやすい
全てがオブジェクト
Smalltalkのif文
(a < 0)
ifTrue:[anObject doSomething]
比較の結果がbooleanオブジェクトを返す
booleanオブジェクトのifTrueメソッドを呼び出す
引数が実行するコードのオブジェクトを渡す
Squeak
70s
80s
SmallTalk-72
SmallTalk-80
ObjectWorks
Dynabook発案
試作機テスト
(ALTO)
Apple版 SmallTalk-80
VisualWorks1.0
90s
VisualWorks2.0
VisualWorks7.1
Squeak
Squeak Project
Squeakとは
和訳:チュウチュウ鳴く
タイルスクリプト
Smalltalkの開発者が新たに開発
Alan Kay
Dan Ingalls
グラフィカル!!
Squeakの特徴
VMを含めすべてオープン
コンパクトでマルチプラットフォーム
つまり、誰でも使える→DynaBook基本概念
Squeak
project
Squeak
project
VM
VM
OS依存しない
OS (A)
OS (B)
Squeakで何ができるか?
プレゼンテーションの作成
ゲームの作成
オーサリング
ネットワーキング
サウンド合成やサンプリング
2次元/3次元グラフィックスの描画
VMのカスタマイズ
Squeakによる実習
まとめ
オブジェクト指向
→マスターすると便利なツールに!
Squeak
→楽しいね!