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

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( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
オブジェクト指向プログラミング(4) 静的分析(2)
Javaのための暗黙的に型定義される構造体
アルゴリズムとデータ構造1 2007年6月12日
ソフトウェア工学 知能情報学部 新田直也.
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
情報伝播によるオブジェクト指向プログラム理解支援の提案
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
AspectScope によるアスペクトとクラスのつながりの視覚化
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
Javaとオブジェクト指向プログラミングの基礎
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
RMI ソフトウェア特論 第6回 /
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
プログラミング演習3 第2回 GUIの復習.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
第7回放送授業.
第8回放送授業.
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
C#プログラミング実習 第3回.
ソフトウェア制作論 平成30年11月28日.
プログラム分散化のための アスペクト指向言語
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

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

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

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

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

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

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

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

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

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

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 メソッド呼び出し

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 {

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