ソフトウェア工学1026

ソフトウェア工学
理工学部
情報システム工学科
新田直也
演習問題1の解答例

入庫処理のDFD
積荷票
倉庫係
在庫ファイル
更新処理
出庫指示書 出庫指示書
作成処理
出庫依頼
更新情報
在庫ファイル
在庫不足リスト
新規出庫
判定
酒屋の在庫問題のDFD(入庫処理)
倉庫係
演習問題2の解答例

クリーニング屋さんのDFD(料金計算処理)
名前
お客さん
電話番号
料金
料金計算
処理本体
チケット
発行処理
チケット
お客さん
整理番号
品名
加工オプション
タグ
発行処理
料金表
最新整理番号
クリーニング屋さんのDFD(料金計算処理)
演習問題2の解答例

クリーニング屋さんのDFD(タグ発行処理)
品名
タグ
お客さん
タグ発行処理
加工オプション
タグ
発行処理
整理番号
クリーニング屋さんのDFD(タグ発行処理)
クリーニング
屋さん店員
オブジェクト指向言語の歴史
プログラミング言語Simula67が実質上の起源.
 1970年代Smalltalkで発展.


Smalltalk は XEROX パロ・アルト研究所でアラン・ケイ
らによって開発された.「オブジェクト指向」という言葉はア
ラン・ケイによると言われる.
1979年 C++
 1991年 Java
 2000年 C#

オブジェクト指向パラダイムとは
オブジェクト指向言語の発展に伴って形成されてき
たソフトウェア開発上の概念.オブジェクト指向分析,
オブジェクト指向設計など,プログラミング以外の工
程でも用いられる.
 ソフトウェアを処理や関数ではなくオブジェクトに分
解する.
 オブジェクト指向の構成概念は3つ




カプセル化(抽象データ型)
継承
多相性(ポリモルフィズム)
構造化パラダイムから
オブジェクト指向へ

構造化パラダイムではソフトウェアは入出力を持つ
処理(関数)に分解された.
入力
処理
出力
データ


基本的に,計算結果を出力したら何も残らない.
→ 科学技術計算や事務処理などの「計算」が中心と
なるアプリケーションに向いている.
処理内容よりも残存するデータの方が重要なのでは?
入力
処理
データ
出力
酒屋の在庫問題を例に
酒屋の在庫問題では,在庫ファイルと在庫不足リス
トが処理後も残存するデータである.
 残存するデータに処理がくっついていると考えよう.

倉庫係
積荷票
入庫処理
出庫指示書
倉庫係
在庫ファイル 在庫不足リスト
依頼者
出庫依頼
出庫処理
在庫なし連絡
依頼者
カプセル化



データに(それを操作する)処理をくっつけたものをオブジェク
ト(クラス)という.またそのときの処理をメソッドという.
データと処理を一体化することをカプセル化という.
情報隠蔽: カプセル化を行い,さらにデータと処理内容を外
部から隠すこと.
倉庫係
積荷票
入庫処理
出庫指示書
倉庫係
酒屋オブジェクト
在庫ファイル 在庫不足リスト
依頼者
出庫依頼
出庫処理
在庫なし連絡
依頼者
オブジェクトとメッセージ

オブジェクトは互いに他のオブジェクトのメソッドを呼
び出すことができる.メソッドの呼び出しをメッセージ
送信ということもある.
メソッド1
呼び出し
オブジェクトA
オブジェクトA
メソッド2
オブジェクトB
メソッド2
オブジェクトB
酒屋オブジェクトシステム

オブジェクト指向では処理の構造が不明確になる代
わりに,データ間の関係が明確になる.
読む
倉庫係
オブジェクト
入庫処理(積荷票)
出庫指示
出庫処理(出庫依頼)
依頼者
オブジェクト
在庫ファイル
オブジェクト
書く(データ)
酒屋
オブジェクト
読む
書く(データ)
在庫不足
リスト
オブジェクト
なぜカプセル化をするのか

データを中心に処理をまとめると理解し易い.

一緒にまとめられている処理を眺めるだけでほぼ動作を理
解することができる.
delete(順番)
add(要素)
List
オブジェクト
get(順番)
size()

データを中心に処理をまとめると再利用し易い.


あるデータ構造を別の場所でも使いたい場合,カプセル化
されていれば,そのデータ構造に対する処理も一緒につい
てくる.
データ構造の変更に対して強い.

隠蔽しているデータの構造が変わっても,メソッド群(インタ
フェース)さえ変わらなければ,使う側には影響が及ばない.
オブジェクトの例

Windowシステムが好例
Windowオブジェクト
スライドオブジェクト
矩形オブジェクト
線分オブジェクト
円オブジェクト
ツールバーオブジェクト
クラスとインスタンス

同じデータ構造を持つものがたくさんある場合.


データ構造やメソッドの定義→クラス
定義に基づく1つ1つの個体→インスタンス(オブジェクト)
データ
拡大縮小
円クラス
円インスタンス
拡大縮小
円
インスタンス
移動
半径
中心座標
色
移動
拡大縮小
円インスタンス
移動
拡大縮小
円インスタンス
移動
Javaにおけるオブジェクト指向

クラスの定義
クラス名
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;
}
メソッド定義
本日のまとめ

オブジェクト指向の基本概念:



カプセル化
継承
多相性
カプセル化について.
 オブジェクトとメソッド(メッセージ)
 クラスとインスタンス
