Presentation is loading. Please wait.

Presentation is loading. Please wait.

ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.

Similar presentations


Presentation on theme: "ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク."— Presentation transcript:

1 ソフトウェア工学 知能情報学部 新田直也

2 オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク トに分解する.  オブジェクト指向プログラミングの構成概念は 3 つ カプセル化(抽象データ型) 継承 多相性(ポリモルフィズム, polymorphism )

3 継承に関する注意  円クラスと楕円クラスはどちらが親か ? 楕円は円を一般化した概念なので,楕円クラスの方が 親 ? 円クラスの方がメンバが少ないので,円クラスの方が 親 ?  技術者の答え. 楕円と円を同じクラスにする. 楕円クラスと円クラスを兄弟にする.  過剰な継承はむしろ弊害が多い.  答えは 1 つではない.  実際にプログラミングしてみないとわからない. Shape CircleEllipse 継承

4 設計は何のためにするのか  設計の主目的: 実装者,保守者が楽をするため. 作業の無駄をなくすため.(作業が混乱しないよう に)  もっとも楽でない作業は ? 他人のプログラムを読んで理解すること. 同じようなプログラムを何度も書くこと.  よって,いい設計とは ? 各人が読むべき箇所の少ない設計. 同じ処理が一箇所にまとめられている設計.

5 多相性の考え方( 1 )  クラスを区別することなくメッセージを送りたい. 新しくクラスが付け加わっても,送り側を変更しない で済む. 送り側のプログラムの可読性が向上する. 移動せよ 図形移動 コマンド

6 多相性の考え方( 2 )  ただし,クラスによって定義されているメッセージが異 なる.そのクラスで定義されていないメッセージが送ら れてきたときどう対処すればよいのか? → 共通の親クラスを持つことを前提とすればよい. 移動せよ 図形移動 コマンド 「図形 クラ ス」

7 多相性の考え方( 3 )  クラス図を使った説明. 相手を親クラスのオブジェクトとみなしてメッセー ジを送る. 図形クラス 円クラス矩形クラス線分クラス 図形移動 コマンドクラス 移動せよ 継承

8 多相性の例  複数種の図形を同時に選択,編集する機能など. 矩形オブジェク ト 線分オブジェク ト 円オブジェクト

9 抽象クラスとインタフェース  インタフェース( interface ): 定数と抽象メソッドだけを 持つことができる(クラスと並ぶ)記述単位.インスタンス 化できない.またクラスへの引継ぎは継承ではなく実装で行 われる.多相性はインタフェースを介しても実現できる.  抽象クラス(復習): 抽象メソッドを 1 つ以上持つクラス. インタフェース同様インスタンス化できない.  抽象クラスはひな型(未完成なクラス),インタフェースは 会話のための規格と考えればよい ? マウスリスナ インタフェース 円クラス矩形クラス線分クラス ウィンドウクラス マウスが押されたよ 実装 スライドクラス 実装

10 Java における多相性( 1 )  子クラスのオブジェクトを親クラスまたはインタフェースの 変数で参照できる.(型キャストのようなもの) Shape s = new Circle(); s.move(100,50); s = new Rectangle(); s.move(100,50); s = new Line(); s.move(100,50); Circle クラスの インスタンスの生成 Circle クラスの move メソッド呼び出し Rectangle クラスの インスタンスの生成 Rectangle クラスの move メソッド呼び出し Line クラスの インスタンスの生成 Line クラスの move メソッド呼び出し

11 Java における多相性( 2 )  もう少し現実的なプログラム Shape s[] = new Shape[3]; s[0] = new Circle(); s[1] = new Rectanlge(); s[2] = new Line(); : for (i = 0; i < 3; i++) { s[i].move(x,y); } Shape クラスの配列 s[i] の実際のクラスに 非依存なコード 実際は様々な子クラス のオブジェクトが積まれる

12 Java におけるインタフェース  Java ではクラスを定義するときに継承できるクラスは 1 つだけだが,インタフェースは複数実装することができ る.  インタフェースは, interface キーワードを使って定義 する.  実装には, implements キーワードを用いる. インタフェース A 子クラス 実装 親クラスインタフェース B 継承

13 インタフェースの記述例  マウスリスナインタフェース Java の組み込みパッケージ AWT に含まれている. マウスのイベントを監視するインタフェース. public interface MouseListener extends EventListener { public void mouseClicked(MouseEvent e); public void mousePressed(MouseEvent e); public void mouseReleased(MouseEvent e); public void mouseEntered(MouseEvent e); public void mouseExited(MouseEvent e); } public class Circle extends Shape implements MouseListener {

14 本日のまとめ  多相性について.  多相性はカプセル化および継承の概念から自然 に導かれるもの.  多相性こそがオブジェクト指向設計の醍醐味.  デザインパターン(後述)は,多相性を基盤に 構築されている.


Download ppt "ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク."

Similar presentations


Ads by Google