オブジェクト指向言語論 第十回 知能情報学部 新田直也.

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

構造体 構造体とは? 複数のデータをパックしたもの。 新しい “ 型 “ として使用できる. 構造体 キーワード struct strcut は構造体を宣言する命令。 struct { double x,y; }a,b,c; ↑ ここまでが宣 言 ← この形式で、構造体 a,b,c, を定 義.
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
復習ー I (General Review I) クラスとオブジェクトの概念 Concepts of class and object クラスの宣言とオブジェクトの生成 Definition of a class and creation of an object コンストラクタとメソッドのオーバーロー.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
プログラミング基礎I(再) 山元進.
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミングIII演習 第1回目.
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
オブジェクト指向入門.
計算機プログラミングI 第8回 2002年12月5日(木) メソッドとクラス (教科書6章) クイズ インスタンスメソッド インスタンス変数
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
計算機プログラミングI 第11回 再帰 再帰的なメソッド定義 帰納的定義 再帰的なデータ構造 計算機プログラミングI (増原) 2003年度.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
もっと詳しくArrayクラスについて調べるには → キーワード検索
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
Boostのスマートなポインタを使ってみる
C#プログラミング実習 第3回.
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

オブジェクト指向言語論 第十回 知能情報学部 新田直也

継承 継承: 基本となるクラスを拡張して,新しいクラスを定義すること. 親クラス: 元となるクラス.スーパークラスとも言う. 親クラス: 元となるクラス.スーパークラスとも言う. 子クラス: 親クラスを拡張したクラス.拡張した部分だけ定義する. クラスA 基底クラス クラスC 派生 クラスB 派生 クラスD 派生

Javaによるオブジェクト指向 (継承) extends キーワードを使って継承する. 拡張するインスタンス変数,メソッドのみ定義する. 例: class Vector3D extends Vector { double z; Vector add(Vector a) { x += a.x; y += a.y; z += a.z; return this; } double inner_product(Vector a) { return x * a.x + y * a.y + z * a.z; } Vector3D outer_product(Vector3D a) { return new Vector3D(y*a.z - z*a.y, z*a.x - x*a.z, x*a.y - y*a.x); } } 拡張するメンバ変数 置き換える メソッド 拡張する メソッド

Javaによるオブジェクト指向 (オーバーライド) オーバーライド: 継承によるメソッドの置き換え. Vector3Dでは,addと inner_productをオーバーライドしている. Vector double x; double y; Vector add(Vector a); double inner_product(Vector a); double length(); Vector3D double z; Vector add(Vector a); double inner_product(Vector a); Vector3D outer_product(Vector3D a);

Javaによるオブジェクト指向 (継承とメソッド呼出し) メソッド呼出しの例: →変数の型宣言だけを見て呼出し先がわかることに注意!! class Test { public static void main(String args[]) { Vector a = new Vector(5, 10); Vector b = new Vector(15, 20); Vector3D c = new Vector3D(5, 10, 15); Vector3D d = new Vector3D(20, 25, 30); System.out.println(a.inner_product(b)); System.out.println(c.inner_product(d)); System.out.println(a.length()); System.out.println(c.length()); a = a.outer_product(b); c = c.outer_product(d); } } Vectorの Vector3Dの Vectorの Vectorの エラー!! Vector3Dの

Javaによるオブジェクト指向 (多態性1) ところで… class Vector { : double length() { return Math.sqrt(this.inner_product(this)); } } class Test { public static void main(String args[]) { Vector a = new Vector(5, 10); : Vector3D c = new Vector3D(5, 10, 15); : System.out.println(a.length()); System.out.println(c.length()); : どちらの inner_product が呼ばれるか? Vector の length() Vector の length()

Javaによるオブジェクト指向 (多態性2) 多態性(ポリモルフィズム): class Vector { : double length() { return Math.sqrt(this.inner_product(this)); } } class Test { public static void main(String args[]) { Vector a = new Vector(5, 10); : Vector3D c = new Vector3D(5, 10, 15); : System.out.println(a.length()); System.out.println(c.length()); : this の「実際の」型に応じて 呼び分けられる this = c this = a

Javaによるオブジェクト指向 (多態性3) ポリモルフィズムの別の例: class Test { public static void main(String args[]) { Vector a = new Vector(5, 10); Vector b = new Vector(15, 20); System.out.println(a.inner_product(b)); Vector c = new Vector3D(5, 10, 15); Vector d = new Vector3D(20, 25, 30); System.out.println(c.inner_product(d)); a = c; b = d; System.out.println(a.inner_product(b)); } } cはVectorで宣言されているが, 「実際の」型はVector3D aはVectorで宣言されているが, 「実際の」型はVector3D

多態性の考え方 メッセージを送る人は送り先の具体的なクラス (具象クラス)を知らなくてもよい. 実際に呼ぶメソッドは実行時に決まる(遅延束縛). Vector Vector a Test Vector a inner_product() Vector a Vector3D inner_product() Vector4D

多態性の使い方1 異なる種類のオブジェクトに一括して処理を行う場合 →図形はすべて移動することができる. →移動の処理は図形ごとに異なる. →実行時までどのクラスのオブジェクトが選択されるか不明. クラス 移動 選択 図形 三角 五角 四角

多態性の使い方2 クラス定義: class Shape { // 図形クラス void move(int x, int y) { // 移動メソッド : } class Trianle extends Shape { // 三角形クラス void move(int x, int y) { // 移動メソッドをオーバーライド class Rectangle extends Shape { // 四角形クラス

多態性の使い方3 選択図形の移動: // 選択図形の配列を取得(図形の具象クラスは不明) Shape [] sel_obj = GetSelectedObjects(); // 配列中の各要素を移動する for (int n = 0; n < sel_obj.length; n++) { sel_obj[n].move(x, y); } Shape クラス の参照変数の 配列 多態性により Shape クラスまたは子クラス のmoveメソッドが呼 ばれる Shape sel_obj[n]