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

Slides:



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

1 C++ における OOP を用いた 書き方講座 H 山崎貴英. 2 今回の内容 OOP とは? C++ の超基礎 注釈 書いてあるコードはすべて一部抜粋。 コピペだと動かないよ!
独習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 コンストラクタとメソッドのオーバーロー.
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミングIII演習 第1回目.
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
プログラミング演習3 第3回 ミニプロジェクト.
暗黙的に型付けされる構造体の Java言語への導入
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
演習1 : インターフェイスを使ってみよう 「10人の客(乗用車、バイク、ストーブのいずれかランダムに決定)に1~100(L)の給油をするガソリンスタンドをシミュレートする実行クラス : RefuelSimulation」を作成する。給油の際には、どの種類の客が何リットル給油したか出力すること。 実行結果例.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
第7回放送授業.
第8回放送授業.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
ソフトウェア工学 知能情報学部 新田直也.
フレンド関数とフレンド演算子.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

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

多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println( “ this is class A1 ” ); } } class A2 extends A { void m() { System.out.println( “ this is class A2 ” ); } } class Test { main () { A a = new A1(); a.m();// “ this is class A1 ” と表示 a = new A2(); a.m();// “ this is class A2 ” と表示 } A A1 派生 A2 派生

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

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

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

多相性の使い方 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]

本日の目標  多相性を使って,図形を表示するアプリケー ションを作ってみよう !!  仕様: 図形の種類は,正三角形と正方形,円の3種類であ る. 任意の位置に任意の種類の図形を,任意の大きさで, 任意個配置できる. 配置した図形はすべて表示される.

図形クラスの定義( 1 )  抽象メソッド: 実体を持たないメソッド. abstract 修飾子を付ける. メソッドの実装は派生クラスに任せる.  抽象クラス: 抽象メソッドを 1 つ以上持つクラス.抽象クラスはインス タンス化できない.(継承しなければ使えない.) abstract class Shape {// 抽象図形クラス abstract void view(Graphics g);// 抽象表示メソッド } → Shape クラスはインスタンス化できない.

図形クラスの定義( 2 )  三角形クラス class Trianle extends Shape {// 三角形クラス int x1, y1; int x2, y2; int x3, y3; void Triangle(int px1, int py1, …) {// コンストラクタ x1 = px1; y1 = py1; : } void view(Graphics g) {// 表示メソッド g.drawLine(x1, y1, x2, y2); g.drawLine(x2, y2, x3, y3); g.drawLine(x3, y3, x1, y1); }

図形クラスの定義( 3 )  矩形クラス class Rectangle extends Shape {// 矩形クラス int x1, y1; int x2, y2; void Rectangle(int px1, int py1, …) {// コンストラクタ x1 = px1; y1 = py1; : } void view(Graphics g) {// 表示メソッド g.drawLine(x1, y1, x2, y1); g.drawLine(x2, y1, x2, y2); g.drawLine(x2, y2, x1, y2); g.drawLine(x1, y2, x1, y1); }

図形クラスの定義( 4 )  円クラス class Circle extends Shape {// 円クラス int x1, y1; int r; void Circle(int px1, int py1, int pr) {// コンストラクタ x1 = px1; y1 = py1; r = pr; } void view(Graphics g) {// 表示メソッド g.drawOval(x1-r, y1-r, x2+r, y1+r); }

図形の一括描画  多相性を用いると,図形の種類に関係なく描画できる. class GraphicWindow extends Frame {// Window のクラス : void paint(Graphics g) {// Window を描画する度に呼ばれる Shape[] objList = new Shape[3]; objList[0] = new Circle(120,120,50); objList[1] = new Triangle(20,100,50,50,80,100); objList[2] = new Rectangle(200,50,250,100); for (int i = 0; i < objList.length; i++) { objList[i].view(g); } 配列のサイズを取得できる 多態性により実際のクラスの view() が呼ばれる

アクセスレベル  各メソッドやメンバ変数に対して外部からのアクセスを 許可 / 不許可できる.  アクセス修飾子: public : 無制限に公開. protected : ほぼ無制限に公開. private : 同じクラス内からしかアクセスできない.  使用法: 基本的にメソッドは, public で宣言する. public void view(Graphic g) { … 基本的にメンバ変数は, private で宣言する. private int x; 基本的にメンバ変数へのアクセスはメソッドを通じて間接的に 行う. public void setX(int px) { x = px; } public int getX() { return x; }

クラス変数,クラスメソッド  クラス変数: クラスが持つ変数.全インスタンスで値を共有できる.  クラスメソッド: インスタンスを指定せずに呼び出せるメソッド.内部で はクラス変数にしかアクセスできない.  使用例: n = A.getMaxNum(); class A { static int MAX_NUM = 1000; static int getMaxNum() { return MAX_NUM; }

修飾子のまとめ  よりオブジェクト指向らしいプログラムのため に …  修飾子: 抽象メソッド,抽象クラス abstract アクセスレベル public , protected , private クラス変数,クラスメソッド static