Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

オブジェクト指向入門1

306 vues

Publié le

ソフトウェア基礎講座資料

Publié dans : Formation
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

オブジェクト指向入門1

  1. 1. オブジェクト指向 プログラミング入門 ソフトウェア基礎講座 第 1 回 2011年2月9日 服部健太
  2. 2. オブジェクト指向とは  “Object” は最も汎用的な英単語  認識できるすべてのものはオブジェクトである  要するにほとんど何の意味もない  オブジェクト指向の決定的な定義はない  いろいろな人がいろいろなことを言ってる 2011/2/9 オブジェクト指向プログラミング入門 1 2
  3. 3. 2011/2/9 オブジェクト指向プログラミング入門 1 3 オブジェクト指向の重要な特徴  カプセル化( Encapsulation )  情報 / 実装の隠蔽( Information/implementation hiding )  状態保持( State retention )  オブジェクトの固有性( Object identity )  メッセージ( Messages )  クラス( Classes )  継承( Inheritance )  多態性( Polymorphism )  総称性( Genericity )
  4. 4. 2011/2/9 オブジェクト指向プログラミング入門 1 4 カプセル化( Encapsulation )  カプセル化の概念はソフトウェアと同じくらい古い  1940 年くらいには,プログラマ達は同じような命 令のパターンが同じプログラムに何度も現れること に気づいた  人々は,そのような繰返しパターンはプログラムの 隅っこの箱の中に閉じ込めておき,メインプログラ ムの異なる場所から単一の名前単一の名前で呼び出し得ること を理解した ⇒  こうしてサブルーチン( subroutine )が発明されたカプセル化とは,関連する概念を一つのユ ニットにグループ化し,それ以後,単一の名 前で参照できるようにすることである
  5. 5. 2011/2/9 オブジェクト指向プログラミング入門 1 5 サブルーチン( Subroutine )  サブルーチンは当時の貴重なメモリを節約する良い 手段だった  後に人々は,人間の記憶も節約できることに気づい た  人が単一の観念として捉え,操作できる概念の塊として表 される 月々のローン 返済額の計算 元金 ローン期間 利率 返済額 ローンの許可 入力変数 出力変数サブルーチン コードはサブルーチン の中にカプセル化され る
  6. 6. 2011/2/9 オブジェクト指向プログラミング入門 1 6 オブジェクト指向におけるカプセル 化  オブジェクト指向におけるカプセル化の目的もサブ ルーチンのそれと同じ  ただし,構造的にはより洗練されている オブジェクト指向におけるカプセル化とは, データを取り巻く手続きをグループ化したも のである direction location set-in-grid turn-left turn-right advance location facing-wall display メソッ ド 変数
  7. 7. 2011/2/9 オブジェクト指向プログラミング入門 1 7 オブジェクト指向におけるオブジェ クト  複数のメソッドと複数の変数から構成される  変数はオブジェクトのメソッドからアクセス され更新される  それぞれの変数は非公開であり,他のオブ ジェクトは変数に直接アクセスすることはで きない  他のオブジェクトがそのオブジェクトの変数の情 報が必要なら,そのオブジェクトのメソッドにお 願いしてアクセスする
  8. 8. 2011/2/9 オブジェクト指向プログラミング入門 1 8 情報 / 実装の隠蔽 ( Information/Implementation Hiding ) カプセル化されたユニットは外( public view )と 内( private view )から眺めることができる  良いカプセル化に対する報酬はプライベートビュー に見られる無数のこまごまとしたことを,パブリッ クビューでは伏せておけることである  情報の隠蔽と実装の隠蔽 情報 / 実装の隠蔽とは,カプセル化された構 造の内側にある特定の情報や実装上の決定に ついて,外部への見せ方を制限することであ る
  9. 9. 2011/2/9 オブジェクト指向プログラミング入門 1 9 情報 / 実装隠蔽によるオブジェクト のブラックボックス化  外部の観察者は,オブジェクトが何( what )がで きるかについては知っている  オブジェクトがどのように( how )するのか,中 がどうなってるのか,についてはまったく知らない  情報 / 実装隠蔽の2つの利点  設計上の決定を局所化する  情報の内容を表現の形式と分離する set-in-grid turn-left turn-right advance location facing-wall display
  10. 10. 2011/2/9 オブジェクト指向プログラミング入門 1 10 状態の保持( State Retention )  オブジェクトは状態を保つことができる  伝統的な手続きモジュール(関数,副プログラム ,手続き,など)では,呼び出し元に戻ってその モジュールが終了すると,結果だけが残る  同じモジュールが再び呼ばれても,あたかも最初 に呼び出されたかのように生み出される  オブジェクトは情報をそれ自身の中に無期限 に保持する
  11. 11. 2011/2/9 オブジェクト指向プログラミング入門 1 11 抽象データ型( ADT )  カプセル化,情報 / 実装隠蔽,状態の保持は ,オブジェクト指向の核ではあるが,新しい アイディアではない  計算機科学者たちは,それらを抽象データ型の分 野として何年もの間,研究してきた  オブジェクト指向は ADT よりさらに進んで ,以降に示すような特徴を持つ
  12. 12. 2011/2/9 オブジェクト指向プログラミング入門 1 12 オブジェクトの固有性( Object Identity )  オブジェクト指向の決定的な特徴は,それぞれのオ ブジェクトが固有のアイデンティティを持つことに ある  仲間のオブジェクトと区別するための何かユニーク なものがある  オブジェクトハンドル機構によって提供される オブジェクトの固有性とは,各オブジェクト が異なるソフトウェア実体として識別され, 扱われるという特性である
  13. 13. 2011/2/9 オブジェクト指向プログラミング入門 1 13 142857 102237 オブジェクトハンドル  そのオブジェクトに何が起ころうとも,オブジェクトが生きて いる限りハンドルは同じものであり続ける  2つのオブジェクトが同じハンドルを持つことはない  システムがオブジェクトを生成するときは常にそれぞれ異なる (過去,現在,未来を通じて)ようなハンドルを割当てる  2つのオブジェクトが,たとえ同じ構造と情報を持っていたと しても,それらは区別される direction location set-in-grid turn-left turn-right advance location facing-wall display direction location set-in-grid turn-left turn-right advance location facing-wall display
  14. 14. 2011/2/9 オブジェクト指向プログラミング入門 1 14 オブジェクトハンドル(2)  プログラマやユーザが実際に新しいオブジェクトのハンドル ( 102237 )をみることは出来ない  代わりに変数 hom1 を通じてオブジェクトにアクセスする  オブジェクトのメモリ番地をハンドルとして使用するオブジェ クト指向環境もある  シンプルではあるがオブジェクトがメモリ中を移動したらいや な感じになる 102237 direction location set-in-grid turn-left turn-right advance location facing-wall display 142857 direction location set-in-grid turn-left turn-right advance location facing-wall display 102237 142857 hom1 hom2 var hom1 := HOMINOID.new; var hom2 := HOMINOID.new;
  15. 15. 2011/2/9 オブジェクト指向プログラミング入門 1 15 オブジェクトハンドル(3)  hom2 := hom1  したら...  オブジェクト 142857 にはもはやアクセス不可能となる  多くのオブジェクト指向環境ではガーベッジコレクタによって メモリから回収される 102237 direction location set-in-grid turn-left turn-right advance location facing-wall display 142857 direction location set-in-grid turn-left turn-right advance location facing-wall display 102237 102237 hom1 hom2
  16. 16. 2011/2/9 オブジェクト指向プログラミング入門 1 16 メッセージ( Messages )  オブジェクトは別のオブジェクトに対して, メッセージによってアクティビティを遂行す る  典型的なメッセージでは,一つのオブジェク トから別のオブジェクトに対して何らかの情 報を運ぶメッセージは送信者オブジェクト ob1 があて 先オブジェクト ob2 に対して, ob2 がそのメ ソッドの一つに適用するための要求物を運ぶ 手段である
  17. 17. 2011/2/9 オブジェクト指向プログラミング入門 1 17 メッセージの構造  Ob1 が ob2 にメッセージを送るには, ob1 は以下の3つを知っ てる必要がある  Ob2 のハンドル  Ob2 のメソッド名  Ob2 がメソッド実行に必要とする追加的な情報(引数)  メッセージ送信の例: hom1.turn-left;  オブジェクトにお願いする  伝統的な手続き(関数)呼び出しと逆になってる call turn-left(hom1);  手続きユニットにお願いする  多態,オーバロード,動的束縛を議論するとき,この逆転は実 際上重要な違いをもたらす
  18. 18. 2011/2/9 オブジェクト指向プログラミング入門 1 18 メッセージ引数 hom1.advance(no-of-squares; advance-ok)  純粋なオブジェクト指向環境では,メッセージの引 数はオブジェクトのハンドルである あて先オブジェクト メソッド名 入力引数 出力引数 シグネチャ メッセージ
  19. 19. 2011/2/9 オブジェクト指向プログラミング入門 1 19 メッセージにおけるオブジェクトの 役割  メッセージの送信者  メッセージのあて先  別のオブジェクトの中の変数から指されるも の  メッセージの引数から指されるもの method
  20. 20. 2011/2/9 オブジェクト指向プログラミング入門 1 20 メッセージの種類  情報メッセージ(過去指向)  オブジェクトに情報を提供し,更新させる  例: hom1.set-in-grid  質問メッセージ(現在指向)  オブジェクトの情報を明かすように要求する  例: hom1.location  命令メッセージ(未来指向)  オブジェクトにあるアクションをするように要求 する  例: hom1.advance
  21. 21. 2011/2/9 オブジェクト指向プログラミング入門 1 21 クラス( Classes )  クラスとオブジェクトの違い  クラスはあなたが設計しプログラムするもの  オブジェクトとはあなたが実行時に(クラスか ら)生成しようとするもの クラスとは,そこからオブジェクトが生成 (具体化)される雛形である.各オブジェク トはそれの生成元であるクラスと同じ構造と 振る舞いを持つ オブジェクト ob がクラス C に属するとき, 「 ob は C のインスタンスである」と言う
  22. 22. 2011/2/9 オブジェクト指向プログラミング入門 1 22 オブジェクトに必要なメモリ  概念図  実際の実装 object1 method-a method-b var-v handle method-c method-d var-w var-x var-y var-z 400 bytes 10 bytes 6 bytes object2 method-a method-b var-v handle method-c method-d var-w var-x var-y var-z 400 bytes 10 bytes 6 bytes object3 method-a method-b var-v handle method-c method-d var-w var-x var-y var-z 400 bytes 10 bytes 6 bytes object 1 method-a method-b var-v handle method-c method-d var-w var-x var-y var-z 400 bytes 16 bytes object 2 var-v handle var-w var-x var-y var-z 16 bytes object 3 var-v handle var-w var-x var-y var-z 16 bytes object 4 var-v handle var-w var-x var-y var-z 16 bytes object 5 var-v handle var-w var-x var-y var-z 16 bytes object 6 var-v handle var-w var-x var-y var-z 16 bytes ・・・
  23. 23. 2011/2/9 オブジェクト指向プログラミング入門 1 23 クラスメソッド,クラス変数  どれだけ多くオブジェクトがインスタンス化されよ うとも,ちょうど一セットだけのクラスメソッドと クラス変数がある  クラスメソッドとクラス変数は個々のオブジェクト の責務でまかないきれない状況を扱うのに必要  例: new メソッド, no-of-hominoids-created 変数 , etc.object 1 method-a method-b var-v handle method-c method-d var-w var-x var-y var-z 400 bytes 16 bytes object 2 var-v handle var-w var-x var-y var-z 16 bytes object 3 var-v handle var-w var-x var-y var-z 16 bytes object 4 var-v handle var-w var-x var-y var-z 16 bytes object 5 var-v handle var-w var-x var-y var-z 16 bytes object 6 var-v handle var-w var-x var-y var-z 16 bytes ・・・ method-c method-f var-p var-q var-r クラス変 数 クラス メソッ ド インスタン ス メソッド インス タンス 変数
  24. 24. 2011/2/9 オブジェクト指向プログラミング入門 1 24 継承( Inheritance )  クラス C を書いた後で,いくつかのメソッドを除い てほとんど同じようなクラス D が必要だとわかった らどうする?  コピペコードはメンテナンス上よろしくない ( D による C からの)継承とは,クラス D のオブジェクトがクラス C のオブジェクトに 利用可能なメソッドと変数を,あたかも D で 定義されたメソッドや変数のように使えるよ うにする機能のことである. C は D のスーパークラスと呼ばれる. D は C のサブクラスである.
  25. 25. 2011/2/9 オブジェクト指向プログラミング入門 1 25 継承の例 var ac := AIRCRAFT.new; var gl := GLIDER.new; … ac.turn(new-course;turn-ok); // OK gl.release-towline; // OK gl.turn(new-course;turn-ok); // OK ac.release-towline; // NG … AIRCRAFT course turn() GLIDER whether-attached release-towline()
  26. 26. 2011/2/9 オブジェクト指向プログラミング入門 1 26 is-a 関係  継承関係が適切かチェックする  「 D は C である」と言えるなら, D はほぼ 確実に C のサブクラスである  グライダーは航空機である (A glider is an aircraft)
  27. 27. 2011/2/9 オブジェクト指向プログラミング入門 1 27 単一継承と多重継承  多重継承では,単一継承における継承木が継 承格子( lattice )となる  多重継承は設計上の困難な問題をもたらす AIRCRAFT PASSENGER -VEHICLE PASSENGER -AIRCRAFT
  28. 28. 2011/2/9 オブジェクト指向プログラミング入門 1 28 多態性( Polymorphism )  ありがちな例 (a) 多態性とは,単一のメソッド名が複数の クラス上で定義され,それらのクラスにおい て異なる実装を取りうる機能である (b) 多態性とは,一つの変数が異なる時点の 異なるクラスを指すことによる特徴である. POLYGON area() TRIANGLE area() RECTANGLE area() HEXAGON
  29. 29. 2011/2/9 オブジェクト指向プログラミング入門 1 29 動的束縛( dynamic binding ) var p : POLYGON; var t := TRIANGLE.new; var h := HEXAGON.new; … If user says OK then p:= t; else p:=   h; … p.area(); // p は TRAIANGLE か HEXAGON のどちらか 動的束縛(実行時束縛や遅延束縛ともいう) とは,実際に実行されるべきコードを(コン パイル時ではなく)実行時に決める技術であ る
  30. 30. オーバーライドとオーバーロード  オーバーライド( overriding )  クラス C で定義されたメソッドを C のサブクラスの 中で再定義すること  オーバーロード( overloading )  同一のクラス上に定義されたいくつかのメソッド(や 演算子)が同じ名前やシンボルを持つとき,名前やシ ンボルがオーバーロードされたという  多態性と関連した概念だが,オーバーライドとごっ ちゃにしないこと  メソッドのどのコードが実行されるかはシグネチャに よって決まる product1.mark-down() product1.mark-down(huge-percentage) 2011/2/9 オブジェクト指向プログラミング入門 1 30
  31. 31. 総称性( Genericity )  コードをコピペしなくても済む技術 2011/2/9 オブジェクト指向プログラミング入門 1 31 総称性とは,あるクラス C を,1つかそれ以 上のクラスとして実行時(クラス C のオブ ジェクトがインスタンス化されたとき)に供 給されるように構築することである.
  32. 32. 総称的な TREE クラスの例 class TREE [NODE-ITEM]; … var current-node := NODE-ITEM.new; … current-node.print(); 2011/2/9 オブジェクト指向プログラミング入門 1 32 26 17 42 14 22 44 10 15 29 34 31 Mike Dave Ted Bob Fred Zack Alice Carol Norb Rud Pat var prod-tree := TREE.new[PRODID]; var cust-tree := TREE.new[CUSTOMER];
  33. 33. 次回予定  日時:2011年2月16日(水)  場所: LB2  2 F / A 会議室  内容:モジュール 2011/2/9 オブジェクト指向プログラミング入門 1 33

×