ソフトウェア工学 知能情報学部 新田直也.

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

Chapter1 UML の概要とオブジェクト指向の基本概念 1 情報工学専攻 MFM10004 奥平 健太.
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
シーケンス図の生成のための実行履歴圧縮手法
4 相互作用図 後半 FM13001 青野大樹.
相互作用図 FM11010 田中健太.
ソフトウェア工学特論III 第10回 その他の図 情報通信工学専攻 GM11013 堀江 真史
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向プログラミング(4) 静的分析(2)
Javaのための暗黙的に型定義される構造体
アルゴリズムとデータ構造1 2007年6月12日
CHAPTER1 UMLとオブジェクト指向の基本概念(2)
UMLの概要と オブジェクト指向の 基本概念
UML入門 UML PRESS vol.1 より 時松誠治 2003年5月19日.
UMLとは           032234 田邊祐司.
オブジェクト指向モデリング [3] 2003年10月14日.
プログラミング演習3 第2回 GUIの復習.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
その他の図 Chapter 7.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
UMLの概要とオブジ工クト指向の基本概念 第2回
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング演習3 第2回 GUIの復習.
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
社会シミュレーションのための モデル作成環境
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
オブジェクト指向モデリング [2] 2003年10月 7日.
UML関係のTIPS 2008年5月26日 2010年5月16日改訂 海谷 治彦.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
ソースコード縮退による ソースコード理解 神谷年洋 科学技術振興事業団 さきがけ研究21 オブジェクト指向シンポジウム2003.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
47070 オブジェクト指向モデリング [3] 2001年10月16日.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
UMLの概要とオブジェクト指向の基本概念
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
設計情報の再利用を目的とした UML図の自動推薦ツール
ソフトウェア制作論 平成30年11月28日.
ソフトウェア工学 知能情報学部 新田直也.
ソフトウェア工学 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
プログラム分散化のための アスペクト指向言語
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
47070 オブジェクト指向モデリング [3] 2001年10月15日.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
Presentation transcript:

ソフトウェア工学 知能情報学部 新田直也

オブジェクト指向分析,設計 プログラミングパラダイムとして誕生したオブジェクト指向は,その後分析,設計法へと発展. クラス,継承などの概念は,対象領域をモデル化するのに有用であると考えられる. 上流(要求分析)から下流(実装)に至るすべての工程でオブジェクト指向を取り入れ,統一した方法論で開発を進めることを目指す. オブジェクト指向 設計 実装 テスト 要求分析

UMLの歴史 UML(Unified Modeling Language, 統一モデリング言語) G. Booch, J. Rumbaugh, I. Jacobson (Three Amigos)による.(1995, 6年) 上記3人の3つの分析・設計方法論が源流. G. Booch: Booch法 J. Rumbaugh: OMT法 I. Jacobson: OOSE法 ただし,UMLは方法論ではなく表記法. 方法論の統一は困難. 表記法の乱立は開発現場に混乱. 3人は後に Rational Software社を設立,2002年,同社はIBM社によって21億ドルで買収される.

UMLの重要性 よいモデリング(分析,設計)がよいソフトウェアを作る. 分析,設計技術者の不足. 顧客との意思疎通にUMLは大変有用. http://www.atmarkit.co.jp/fjava/survey/survey0202/survey0202.html

UMLの構成 UMLは表記法のみを統一. 以下の図によって構成される. 最も重要なのはクラス図. クラス図 シーケンス図(インタラクション図,相互作用図) ユースケース図 オブジェクト図 コラボレーション図 ステートチャート図 アクティビティ図 コンポーネント図 配置図 最も重要なのはクラス図. 主に要求分析工程で用いる 主に実装工程で用いる

クラス図 クラスを長方形で表す. Circle 《Javaのソースコード》 《クラス図での表記》 radius: double class Circle { double radius; double x; double y; void move(double px, double py) { x = px; y = py; } void resize(double scale) { radius = radius * scale; クラス名 Circle radius: double x: double y: double 属性 move(px, py) resize(scale) 操作

クラス図 抽象クラスとインタフェース Shape 《interface》 MouseListner 《抽象クラスの表記》 クラス名を斜体に 《抽象クラスの表記》 《インタフェースの表記》 Shape 《interface》 MouseListner 抽象メソッドは 斜体に move(px, py) resize(scale) mouseClicked(e) mousePressed(e) mouseReleased(e) mouseEntered(e) mouseExited(e) 《interface》を 頭に記す

クラス図 継承と実現(実装) 《interface》 MouseListner Shape Circle move(px, py) mouseClicked(e) mousePressed(e) mouseReleased(e) mouseEntered(e) mouseExited(e) move(px, py) resize(scale) 継承 実現 Circle radius x y できる限り親を上側に, 無理なら左側に配置する move(px, py) resize(scale)

クラス図 集約とコンポジション 一方が全体,一方が部分になる関係. 双方の生存期間が一致する場合がコンポジション,一致しない場合が集約. Circle Point コンポジション radius: double x: double y: double center move(px, py) resize(scale) getX(): double setX(x): void getY(): double setY(y): void 中心座標なくして円は 成り立たないので,この 場合はコンポジション 集約

クラス図 集約とコンポジションについての補足 Javaのソースコード上では集約とコンポジションの区別はつかない. いずれの場合も「全体のメンバが部分を参照する」という実装になる. 全体 class Circle extends Shape { double radius; Point center = new Point(); void move(double px, double py) { center.setX(px); center.setY(py); } void resize(double scale) { radius = radius * scale; 部分

クラス図 関連と多重度 Lecture Student Teacher 2つのクラスの(抽象的な)関係を示す.2つのクラス間に直接参照が存在しなくてもよい. 特にインスタンス数の対応を示す場合,多重度を記すことができる. 関連に方向がある場合,矢印で誘導可能性を表す. 誘導可能性 関連名 Lecture Student Teacher name: String grade: int day: int time: int classroom: int has attend name: String age: int grade: int name: String age: int 1 4..6 0..* 0..* 丁度1つが対応する ことを表す多重度 4~6個が対応 それぞれ0個以上が対応

クラス図 依存関係 一方のクラスが他方のクラスに何らかの形で依存している関係.一方のクラスが他方のクラスのインスタンスを生成する関係が代表的. Circle CircleCommand radius: double center: Point create name: String move(px, py) resize(scale)

クラス図のまとめ クラス図だけでほとんどのことが記述できる. オブジェクト指向プログラミング言語の理解が基本. クラス図に書かれた設計の意図を読み取れるようになるには多少の訓練が必要. クラス図は設計の主に静的な側面を記述したもの. Javaなどのソースコードから自動生成(リバースエンジニアリング)するツールがある. 設計の動的な側面を記述するUML図のうち最も多く使われるがシーケンス図.

シーケンス図 オブジェクト間の通信を時間の流れに従って記述したもの. オブジェクト オブジェクト名 : クラス名 時 間 経 過 メッセージ 生成 生存線 活 性 区 間 生 存 期 間 消滅 復帰

シーケンス図 Circle, Pointの例. : Circle center : Point move(px,py) setX(px) setY(py)

シーケンス図 メッセージ 同期メッセージ: 通常のメソッド呼び出しに対応.送信後は受信側に直ちに制御が移る.送信側は制御が受信側から返されるまで動作を停止する. 非同期メッセージ: マルチタスク,マルチスレッドなどで用いられる.送信側は送信後も動作を続ける.メッセージは送信後,すぐに受信側で処理されるとは限らない. 復帰まで 動作を停止 復帰 送信後も 動作を続行

シーケンス図 自己メッセージ 自分で自分を呼び出す.再帰呼び出し. class Circle { double radius; : double getRadius(void) { return radius; } void setRadius(double r) { radius = r; void resize(double scale) { setRadius(getRadius() * scale); resize() getRadius() setRadius()

シーケンス図のまとめ システムの動的振る舞いの一局面を示したもの. クラス図の補足説明として使われる場合が多い. あらゆる動的振る舞いを記述することは不可能. クラス図の補足説明として使われる場合が多い. 多くのデザインパターンは,クラス図とシーケンス図を使って説明される. Javaなどのソースコードからシーケンス図を生成することは困難である.

ユースケース図 各利用者から見たシステムの機能(使い方)を表す. 講義情報システム 学生 システム 境界線 シラバス参照 教官 ユースケース 《include》 シラバス更新 ユースケース アクター

ユースケース図について 実は,一番重要な図. 特に,大きなシステムは利用者が複数存在する場合が多く,それがシステムの複雑度を増大している. 「何を作るか」を整理して書くことができる. 当たり前すぎて忘れられがち. 顧客にとって一番関心がある部分. 特に,大きなシステムは利用者が複数存在する場合が多く,それがシステムの複雑度を増大している. ユースケース図を元にクラス図を構築するロバストネス分析という手法があり,注目されている.ロバストネス分析はたとえば以下を参照のこと. http://www.ogis-ri.co.jp/otc/hiroba/technical/RobustnessAnalysis/RA1/

本日のまとめ 今後UMLはソフトウェア技術者の必須要件に. UML図を基にした開発手法としてRUP(Rational Unified Process)やMDA(Model Driven Architecture)が有名. あくまでも基本はオブジェクト指向プログラミング. 設計のノウハウを積むには経験が必要. ただし,「実装や保守工程で楽をしたい」という観点を持つと習得し易い. 説明できなかったUML図は自習課題. 「ソフトウェアアーキテクト」を目指そう!!