Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "オブジェクト指向言語論 第十一回 知能情報学部 新田直也."— Presentation transcript:

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

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

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

4 インタフェースの使用例 マウスイベントの監視インタフェース
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) { // マウスクリックされたときの処理

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

6 戻り値としてのオブジェクト オブジェクト(インスタンス)は戻り値として返すことができる. 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 {

7 引数としてのオブジェクト オブジェクト(インスタンス)は引数として渡すことができる. 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 {

8 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と同じオブジェクト が入っている

9 クラスとインスタンスの区別について(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が入っている

10 クラスとインスタンスの区別について(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と同じインスタンス が入っている

11 クラスとインスタンスの区別について(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と同じインスタンス が入っている

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


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

Similar presentations


Ads by Google