ソフトウェア工学 知能情報学部 新田直也 構造化指向の限界 なぜ構造化指向では駄目なのか? 作成するソフトウェアが変わってきた. CUIシステムからGUIシステムへ… より短期間での開発が要求されるようになってきた. そもそもシステム化の対象を関数(入出力)のみで構造化 することに限界があった. 関数とオブジェクト(1/2) 関数とは… π/2 入力 sin 出力 1 入力と出力で特徴付けられる. 同じ入力を与えれば必ず同じ結果が得られる. (内部状態を持たない.) われわれの身の回りのモノは? お金,ボタン 入力 状態変化 出力 状態参照 お金,ジュースのストック ジュース,おつり 内部状態を持つ オブジェクトである 関数とオブジェクト(2/2) オブジェクトとは… 内部状態(つまりデータ)を持つ. 入力を与えれば出力が返ってくるが,その際内部状態が 更新されたり内部状態が出力値に影響を与える(関数と は呼ばず操作と呼ぶ). オブジェクトとは,データと操作を一体化(カプセル化)し たもの. 一般に一種類のオブジェクトに対して複数の操作を定義 することができる. 自動販売機オブジェクトでは,購入,返却,商品補充など. ちなみに,構造化指向では内部状態は,グローバ ル変数,ポインタ引数,静的変数などで表現されて いた. カプセル化と情報隠蔽 構造化指向では関数内の処理内容が情報隠蔽されていた. オブジェクト指向では操作の処理内容に加え,内部状態もカ プセル化されて情報隠蔽される. オブジェクトにメッセージを送れば,内部で適当に処理してく れるイメージ. 操作1の呼び出し (メッセージ) オブジェクトA 操作1 操作2の呼び出し (メッセージ) 内部データ 操作2 オブジェクト指向パラダイムとは オブジェクト指向言語の発展に伴って形成されてき たソフトウェア開発上の概念.オブジェクト指向分析, オブジェクト指向設計など,プログラミング以外の工 程でも用いられる. ソフトウェアを処理や関数ではなくオブジェクトに分 解する. オブジェクト指向プログラミングの構成概念は3つ カプセル化(encapsulation,抽象データ型) 継承(inheritance) 多相性(ポリモルフィズム,polymorphism) オブジェクトの実例 Windowシステムが好例 Windowオブジェクト スライドオブジェクト 矩形オブジェクト 線分オブジェクト 円オブジェクト ツールバーオブジェクト メッセージの例 閉じよ 最小化せよ 移動せよ サイズ変更せよ 削除せよ 移動せよ サイズ変更せよ クラスとインスタンス カプセル化についてもう少し詳しく見ていこう. ... 同型の自動販売機がたくさんあった場合でも,操作の種類 や内容,どのような内部状態を持つか(お金とジュースのス トックを内部状態として持つ)はすべて同じ. 一方,実際の内部状態は個々の自動販売機によって異なる. 内部状態(データ構造)や操作内容の定義→クラス 内部状態が異なる1つ1つの個体→インスタンス(オブジェクト) クラスと抽象データ型 クラスとインスタンスの関係は,型と変数の関係に 等しい. 実行時に 型 変数 int x; 構造体 構造体変数 struct List l; クラス インスタンス Circle c; メモリ上 に確保さ れる. いくつでも 宣言でき る. Javaにおけるオブジェクト指向(1) 操作はメソッドと呼ばれる.内部状態はフィールドとして定義. クラス定義の例: クラス名 class Circle { double radius; double x; double y; int color; } // 半径 // x座標 // y座標 // 色 フィールド定義 (インスタンス変数) void move(double px, double py) { x = px; y = py; } void resize(double scale) { radius = radius * scale; } メソッド定義 Javaにおけるオブジェクト指向(2) インスタンスの生成,利用 Circle c = new Circle(); c.move(100,50); c.color = 255; Circleクラスの インスタンスの生成 moveメソッド呼び出し フィールド(メンバ)へのアクセス Circle クラス new で生成 インスタンス c move()メソッドの呼び出し なぜカプセル化をするのか データを中心に処理をまとめると理解し易い. プログラムの関連する部分が一箇所に局所化されるので 理解が容易である. delete(順番) add(要素) List オブジェクト get(順番) size() データを中心に処理をまとめると再利用し易い. あるデータ構造を別の場所でも使いたい場合,カプセル化 されていれば,そのデータ構造に対する処理も一緒につい てくる. データ構造の変更に対して強い. 隠蔽しているデータの構造が変わっても,メソッド群(インタ フェース)さえ変わらなければ,使う側には影響が及ばない.
© Copyright 2024 ExpyDoc