#author("2018-09-16T19:15:08+09:00","ldap:pandora"," pandora") #author("2018-09-16T19:17:43+09:00","ldap:pandora"," pandora") * ''オブジェクト指向'' [#bf98c062] #contents * 用語 [#nd9efde2] - カプセル化(中身の隠蔽) データ構造の中身を隠蔽し、データ操作に必要な情報のみを外部に提供し、1つにまとめて持たせること。 #highlighter(java,number){{ // 操作、データを一つにまとめたクラス // ⇒ カプセル化 class Sample { // private を設定することで、Sampleクラス以外からの // アクセスを禁止する // ⇒ データの隠蔽 private int ans = 0; //-- ans 変数にアクセスするためのメソッドのみ外部に公開する。 // ⇒ データの隠蔽 //属性に対して、アクセスするためのメソッド(操作) public void setQ(int i){ ans = this.calc(i); } //属性に対して、アクセスするためのメソッド(操作) public int getA(){ return ans; } //-- ここまで // private int calc(int i) { return i+i; } } // 実行クラス public class Sample5_6 { public class DataPlay { public static void main(String[] args) { // 具象クラスのインスタンス化 Sample obj = new Sample(); // obj.ans=5 // int x = obj.ans は出来ない為、 // setQメソッドとgetAメソッドを使って操作する obj.setQ(5); System.out.println(obj.getA()); } } }} -- DataPlayクラスは、Sampleクラスの中に、~ ansという変数があり、Calcというメソッドを使って計算しているということを~ 知らなくても、setQで値を設定し、getAで値を取得出来る~ ということを知っていれば、Sampleクラスを利用できる。 - インヘリタンス(継承) あるクラス(オブジェクト)があるクラス(オブジェクト)の特性を引き継ぐこと。 #highlighter(java,number){{ // Parent クラスの特性をChildクラスが引き継ぐ public class Child extends Parent { public Child() { oyaMethod(); } } }} --Parentクラスにメソッド oyaMethodが定義されている場合~ 継承したChildクラスはoyaMethodを定義しなくても、~ メソッドを使用することが出来る。 - ポリモーフィズム(多様性) メッセージの送信側(メソッドの呼出側)とメッセージの受信側(メソッド側)が動的に決まること。 #highlighter(java,number){{ class SuperClass { String str = "Super"; public void thisName() { System.out.println("SuperClass"); } } class SubClass extends SuperClass { String str = "Sub"; // オーバーライド public void thisName() { System.out.println("SubClass"); } // 引数違いのオーバロード public void thisName(String name) { System.out.println("SubClass" + name); } } class ExeClass extends SubClass { String str = "exe"; // オーバーライド public void thisName() { System.out.println("exeClass"); } } // 実行クラス public class JavaPo { public static void main(String[] args) { // exeクラスのインスタンスを生成 ExeClass exe = new ExeClass(); // exeクラスのメソッド実行 exe.thisName(); // Subクラスから継承したexeクラスのメソッドw実行 exe.thisName("main"); // exeクラスの変数を出力 System.out.println(exe.str); // Subクラスのインスタンスを生成 SuperClass oya = new SubClass(); //exeクラスのメソッドを実行 oya.thisName(); // SuperClassの変数を出力 System.out.println(oya.str); } } }} --生成するオブジュクトによって、どのthisNameメソッドを使うかを判断する。~ ※継承したクラスと同名のメソッドをサブクラスに定義することをオーバーライドの関係にあるメソッドという。~ --thisNameメソッドは引数違いで、用意されておりどのthisNameメソッドを使うかは、呼び出し元の引数で決定する。~ ※同名で、異なる引数を持つメソッドをオーバーロードの関係にあるメソッドという。 * 主なプログラミング言語 [#jdc4607d] - smalltalk - [[Java]] - C++ - C# - Objective-C