オブジェクトとは

Download Report

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
→楽しいね!