オブジェクト指向プログラミング 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 →楽しいね!
© Copyright 2025 ExpyDoc