オブジェクト指向プログラミング14

オブジェクト指向
プログラミング
第十四回
知能情報学部
新田直也
オブジェクト指向言語の基本概念
1.
カプセル化



2.
3.
データ構造とアルゴリズムの一体化 ⇒ クラス
フィールドとメソッド
クラスとインスタンス
継承
多相性(ポリモルフィズム)
多相性の利点(1/3)

異なる型のイ
ンスタンスをま
とめて処理でき
る.
public static void main(String[] args) {
Person p[] = new Person[3];
p[0] = new Person();
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)
多相性の利点(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アプリを作ってみよう!!
1. ファイル -> 新規 -> アンドロイドアプリケーション
プロジェクト(Android Application Project)で,
Androidアプリのプロジェクトを作成.(ADTが
Eclipseにインストールされている必要.)

Androidアプリの開発(2/4)
2.
3.
4.
5.
アプリ名を入力する(今回は,HelloAndroidに).
Minimum Required SDKを API 14 に.
以降,最後のアクティビティ名(Activity Name)
の入力欄以外はすべてデフォルトで.
アクティビティ名を MyActivity にする.
Androidアプリの開発(3/4)
6.
アプリのメイン画面のレイアウトの変更.
①
メイン画面のレイアウトファイルを開く.
②
メイン画面にテキストビューを配置する.(配置されてい
るテキストビューを編集する.)
Androidアプリの開発(4/4)
7.
プロジェクトのルートを選択して実行する.
Androidフレームワークにおける
多相性(1/3)

src の中の MyActivity.java を開いてみる.
このアプリのメイン画面を表すクラス
public class MyActivity extends Activity {
アプリの画面を表す
フレームワーク側の
クラス
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
:

MyActivityはActivityを再利用(拡張)して作成し
た,このアプリ固有のクラスである.
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);
まとめ
オブジェクト指向技術をうまく使えば再利用性を最
大限に高めるができる.
 ただし,プログラムの構造を上手に設計しなければ
再利用性を高めることはできない.
 再利用において最も鍵となるのが多相性.
 アプリケーションフレームワークは多相性を用いて
再利用性を高めている.
 習うより馴れよ.


とにかくプログラミングに挑戦してみよう!!