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

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
AIプログラミング Java とオブジェクト指向プログラミングの基 礎 認知システム論 情報工学コース コンピュータサイエンスコース 生体情報コース.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
オブジェクト指向プログラミング(4) 静的分析(2)
Javaのための暗黙的に型定義される構造体
アルゴリズムとデータ構造1 2007年6月12日
ソフトウェア工学 知能情報学部 新田直也.
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
RMI ソフトウェア特論 第6回 /
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
第7回放送授業.
第8回放送授業.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
C#プログラミング実習 第3回.
ソフトウェア工学 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

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

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

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

設計は何のためにするのか 設計の主目的: もっとも楽でない作業は? よって,良い設計とは? 実装者,保守者が楽をするため. 作業の効率を上げるため. もっとも楽でない作業は? 他人のプログラムを読んで理解すること. プログラムを広範囲に渡って修正しテストすること. 同じようなプログラムを何度も記述すること. よって,良い設計とは? 作業に関係ない部分を読まずに済む設計.(関心事の分離) 修正箇所が局所化される設計. 再利用できる範囲が大きい設計.

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

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

多相性の考え方(3) クラス図を使った説明. 相手を親クラスのオブジェクトとみなして操作する. 図形移動 コマンドクラス 図形クラス 継承 継承 継承 円クラス 矩形クラス 線分クラス

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

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

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

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]の実際のクラスに 非依存なコード

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

インタフェースの記述例 マウスリスナインタフェース 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 {

本日のまとめ 多相性について. 多相性はカプセル化および継承の工学的帰結. 多相性こそがオブジェクト指向設計の神髄. 再利用の範囲を最大限広げることができる. 有効に使えるようになるには修業が必要? デザインパターン(後述)は,多相性を基盤に構築されている. アプリケーションフレームワーク(後述)は,多相性を使わなければ実現できない.