オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也
オブジェクト指向言語の基本概念 カプセル化 継承 多相性(ポリモルフィズム) データ構造とアルゴリズムの一体化 ⇒ クラス フィールドとメソッド クラスとインスタンス 継承 多相性(ポリモルフィズム)
多相性の利点(1/3) 異なる型のインスタンスをまとめて処理できる. public static void main(String[] args) { Person p[] = new Person[3]; p[0] = new Person(); p[1] = new Student(); p[2] = new Teacher(); goToLectureTogether(p, "オブジェクト指向プログラミング"); } public static void goToLectureTogether( Person p[], String lecture) { for (int n = 0; n < p.length; n++) { p[n].goToLecture(lecture); Person型の配列 を宣言 同じ実行文で異なる型を処理できる (見た目の型はPerson)
多相性の利点(2/3) 新しい子クラスを作成して拡張してみると… オーバーライド public class Staff extends Person { void goToLecture(String lecture) { System.out.println(lecture + "を見学する"); } オーバーライド
多相性の利点(3/3) 新しいクラスを追加してもプログラムの書き換えを最小限にできる. プログラムの書き換えは不要! public static void main(String[] args) { Person p[] = new Person[4]; p[0] = new Person(); p[1] = new Student(); p[2] = new Teacher(); p[3] = new Staff(); goToLectureTogether(p, "オブジェクト指向プログラミング"); } public static void goToLectureTogether( Person p[], String lecture) { for (int n = 0; n < p.length; n++) { p[n].goToLecture(lecture); 新しいクラスの インスタンス プログラムの書き換えは不要!
アプリケーションフレームワーク オブジェクト指向技術(特に多相性)を応用して,アプリケーションの骨組みを最大限再利用できるようにした仕組み. 特定の分野内のさまざまなアプリケーションで再利用できるように開発される. 多くの分野で開発され広く再利用されている. Webアプリ: Struts,Spring スマホアプリ: Android,Cocoa Touch ビッグデータ: Hadoop データベース(ORマッピング): Hibernate,iBatis
Androidアプリの開発(1/4) まずAndroidアプリを作ってみよう!! ファイル -> 新規 -> アンドロイドアプリケーションプロジェクト(Android Application Project)で,Androidアプリのプロジェクトを作成.(ADTがEclipseにインストールされている必要.)
Androidアプリの開発(2/4) アプリ名を入力する(今回は,HelloAndroidに). Minimum Required SDKを API 14 に. 以降,最後のアクティビティ名(Activity Name)の入力欄以外はすべてデフォルトで. アクティビティ名を MyActivity にする.
Androidアプリの開発(3/4) アプリのメイン画面のレイアウトの変更. メイン画面のレイアウトファイルを開く. メイン画面にテキストビューを配置する.(配置されているテキストビューを編集する.)
Androidアプリの開発(4/4) プロジェクトのルートを選択して実行する.
Androidフレームワークにおける 多相性(1/3) src の中の MyActivity.java を開いてみる. MyActivityはActivityを再利用(拡張)して作成した,このアプリ固有のクラスである. このアプリのメイン画面を表すクラス アプリの画面を表すフレームワーク側のクラス public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); } :
Androidフレームワークにおける 多相性(2/3) onCreate() メソッドは Activity クラスの onCreate() をオーバーライドして実装されている. フレームワーク側のActivityクラスの内部 public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, OnCreateContextMenuListener, ComponentCallbacks2, Window.OnWindowDismissedCallback { : protected void onCreate(@Nullable Bundle savedInstanceState) {
Androidフレームワークにおける 多相性(3/3) MyActivity クラスの onCreate() メソッドは,画面が表示される直前に呼び出される. アプリ固有の画面の初期化処理はここで行う. MyActivity クラスの onCreate() メソッドは,多相性を用いてフレームワーク側から呼び出されている. public class Instrumentation { : public void callActivityOnCreate(Activity activity, …) { activity.performanceCreate(icicle); public class Activity extends ContextThemeWrapper : final void performCreate(Bundle icicle) { onCreate(icicle);
まとめ オブジェクト指向技術をうまく使えば再利用性を最大限に高めるができる. ただし,プログラムの構造を上手に設計しなければ再利用性を高めることはできない. 再利用において最も鍵となるのが多相性. アプリケーションフレームワークは多相性を用いて再利用性を高めている. 習うより馴れよ. とにかくプログラミングに挑戦してみよう!!