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

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)
プログラミング基礎I(再) 山元進.
Javaのための暗黙的に型定義される構造体
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
アプレット プログラミング 第10回 アプレット プログラミング第10回.
Javaとオブジェクト指向プログラミングの基礎
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
C#プログラミング実習 第3回.
ソフトウェア制作論 平成30年11月28日.
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日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

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

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

インタフェースと抽象クラス インタフェース: メンバ変数を持たないクラスの一種.メソッドはすべて抽象メソッドで,抽象クラス同様,インスタンス化できない. 実装: 各クラスは,継承ではなく実装(implements)を用いてインタフェースを利用する.Javaでは複数のクラスを同時に継承すること(多重継承)は許されていないが,複数のインタフェースを同時に実装することは許されている. 抽象クラスとの違い: 抽象クラス → クラスの未完成品,汎化されたクラス インタフェース → 会話するための約束事,付加的な機能

インタフェースの使用例 マウスイベントの監視インタフェース 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); } abstract class Shape implements MouseListener { : public void mouseClicked(MouseEvent e) { // マウスクリックされたときの処理

オブジェクト指向(Java)プログラミングにおける注意点 クラスは型である. int, double, float などとほぼ同様に扱うことができる. C言語では,構造体も型であった. クラスは参照型である. 参照型はポインタ(アドレスが入る)と考えればよい. 基本型:int, double, floatなど値を持つもの. 参照型:クラス,配列など. クラスとインスタンスの概念を混同しないこと.

戻り値としてのオブジェクト オブジェクト(インスタンス)は戻り値として返すことができる. public class Main { A a = new A(); B b1 = a.createB(); } public class A { public B createB() { B b = new B(); return b; } public class B {

引数としてのオブジェクト オブジェクト(インスタンス)は引数として渡すことができる. public class Main { A a = new A(); B b1 = new B(); a.setB(b1); } public class A { B b = null; public void setB(B arg) { b = arg; } public class B {

Setter と getter 一般にオブジェクトを設定するメソッドを setter,取得するメソッドを getter という. public class Main { main() { A a = new A(); B b1 = new B(); a.setB(b1); B b2 = a.getB(); } public class A { B b = null; public void setB(B arg) { b = arg; } public B getB() { return b; public class B { b1と同じオブジェクト が入っている

クラスとインスタンスの区別について(1/3) a1 n 1 a2 2 クラスとインスタンスを概念的に 混同しないように注意すること. Aのインスタンス 毎に値が異なる public class Main { main() { A a1 = new A(); A a2 = new A(); a1.setN(1); a2.setN(2) int n = a1.getN(); } public class A { int n = 0; public void setN(int i) { n = i; } public int getN() { return n; 2回呼び出 されるがイ ンスタンス が異なる 1が入っている

クラスとインスタンスの区別について(2/3) a1 b b2 a2 b1 クラスとインスタンスを概念的に 混同しないように注意すること. public class Main { main() { A a1 = new A(); A a2 = new A(); B b1 = new B(); B b2 = new B(); a1.setB(b2); a2.setB(b1); B b3 = a1.getB(); } public class A { B b = null; public void setB(B arg) { b = arg; } public B getB() { return b; public class B { b2と同じインスタンス が入っている

クラスとインスタンスの区別について(3/3) a1 b a2 b1 クラスは参照型であるため,クラス型 の変数にはアドレスが入っている. public class Main { main() { A a1 = new A(); A a2 = new A(); B b1 = new B(); a1.setB(b1); B b2 = a1.getB(); a2.setB(b2); B b3 = a2.getB(); } public class A { B b = null; public void setB(B arg) { b = arg; } public B getB() { return b; public class B { b1と同じインスタンス が入っている

まとめ プログラムの動きは完全に論理的に説明できる. プログラミング言語のさまざまな仕組みは工学的理由があって導入されている. プログラミングについて苦手意識を持つ前に,最初は時間がかかってもいいので,まずはプログラムの動きを1行ずつ丁寧に追いかけて理解するようにすること. プログラミング言語のさまざまな仕組みは工学的理由があって導入されている. オブジェクト指向言語を使う主な理由は,再利用性,拡張性,読み易さなどである.チームでプログラミングする上で書き易さはさほど重要ではない. オブジェクト指向言語を使ってもプログラムが複雑になる場合がある. ソフトウェアという人工構造物が本質的に複雑であるため.(詳しくは来年度のソフトウェア工学で説明.)