オブジェクト指向プログラミング(4) 静的分析(2)

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

ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
Generic programming と STL
Chapter3 クラス図(後半)             FM12014 劉鎧誠.
CGS カーネルベース 変化するオブジェクトに    進化するデータベースを。.
Relation Mapping EJB 3.0 コース 第9回 2006年8月6日.
~手続き指向からオブジェクト指向へ(Ⅰ)~
オブジェクト指向プログラミング(5) 静的分析(3)
プログラミング基礎I(再) 山元進.
クラスその2∽(アドバンス)∽ 福岡工業大学  梶原 大慈       .
Javaのための暗黙的に型定義される構造体
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
ユースケース図 FM12012 比嘉久登.
UMLの概要と オブジェクト指向の 基本概念
変数のスコープの設計判断能力 を育成するプログラミング教育
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
C#とC++とオブジェクト指向 上甲 健史.
UML入門 UML PRESS vol.1 より 時松誠治 2003年5月19日.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
~手続き指向からオブジェクト指向へ[Ⅱ]~
第11回 アプリケーションの構成 ~CUI自動販売機の完成!~.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
その他の図 Chapter 7.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
UMLの概要とオブジ工クト指向の基本概念 第2回
47070 オブジェクト指向モデリング [7] 2001年11月 12日.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
プログラミング言語論 第13回 オブジェクト指向 情報工学科 篠埜 功.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト・プログラミング 第8回.
第8回放送授業.
E-R図 井上卓也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
アルゴリズムとデータ構造1 2009年6月15日
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
アルゴリズムとデータ構造 2010年6月17日
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
Presentation transcript:

オブジェクト指向プログラミング(4) 静的分析(2) 第6回 ソフトウエアの再利用 オブジェクト指向プログラミング(4) 静的分析(2)

関連 オブジェクト指向のプログラム ・クラスがクラスを操作し、そして、そのクラスがまた別のクラスを操作する、というように動いていきます。     オブジェクト指向のプログラム  ・クラスがクラスを操作し、そして、そのクラスがまた別のクラスを操作する、というように動いていきます。  ・なんらかの操作の関係があるようなクラス同士を、「そのクラス間に関連がある」と表現します。

関連の分析とその表記 「関連」はオブジェクト指向において、非常に重要な概念である。 クラス自体の分析以上に、関連の分析が重要である。 クラス図では、関連を図のように表します。 このクラス間にどのようなやり取りがあるのかということを表現するためのもの

関連名は一般的に動詞で、その間でやり取りされる代表的な操作の名前が使用される。 関連の表記 担任する 関連名は一般的に動詞で、その間でやり取りされる代表的な操作の名前が使用される。 発射する

関連と属性の違い 社員クラスを考え見よう 属性というものがあくまでも、クラスそのもの自体の特徴。 そのクラスの本質的な特徴でないものについては「関連」である場合が多い。

関連と属性の違い この例の「所属課」について考えみよう 名詞「ここでは課」から、それに対するクラス候補が認識できる。

多重度 関連には、多重度といわれる概念が存在する。 たとえば、生徒と教師を考えた場合、必ずしも1対1でなく、1人の教師が複数の生徒を担任するということが言える。   これを「教師と生徒は1対多関連である」という。   クラス間の量的な対応関係を「多重度」と呼び ます。

多重度 多重度を加えたクラス図 担任する

多重度 対応する数による表現方法の変化 相手が1 相手が0以上の複数 相手が0か1 4 相手が定数(例:4) 2-4 相手が2~4

多重度 関連の種類 1対1 1対多 多対多

多重度 多対多の関連の例 講師は講義で、複数の生徒に対して教える。そして、生徒は1日に複数の講義を受講することによって、複数の教師に教えられる。 担任する

ロール(役割) ロールはクラスが相手のクラスに対してどのような位置付けであるか、ということを記述するものです。 生徒 担任する

関連のクラス化 関連自体が、あるときクラスのように属性や操作を持つ、オブジェクト指向概念 所属する

関連の実装 「関連を実装する」ということは、「その相手インスタンスにアクセスする方法を実現する」ということになります。

関連先が単数の場合 クラスのメンバに相手クラスのポインタを持つということで実際に関連を張る 実際のコードで示してみましょう。

関連をコードとして実装した例 class Tank // 戦車クラス { Missile * missile ; // ミサイルクラスとの関連 public : virtual void shoot () ; // 発射メンバ関数 virtual void setMissile ( Missile * pmissile ) { // ミサイルクラスインスタンス設定 missile = pmissile ; } } ; void Tank :: shoot () // 発射メンバ関数の実装 missile -> fire () ; // ミサイル発射 void Foo :: bar () // 実際の使用例 Tank tank ; // 戦車インスタンス生成 Missile * missile ; // ミサイルクラスのポインタ missile = new Missile ; // ミサイルインスタンス生成 tank . setMissile ( missile ) ; // ミサイルインスタンス設定 : tank . shoot () ; // ミサイル発射 delete missile ; // デストラクト

関連先が複数の場合 関連先が複数の場合は、ポインタの配列を使用すれば実現できる。 実際のコードで示してみましょう。

関連先が複数の場合を実装 LIST5-2:関連先が複数の場合をポインタの配列によって実装 class Teacher // 教師クラス { // 担当している生徒インスタンスのポインタ Person * students [ 100 ] ; public : virtual void printName () ; // 担当している生徒一覧出力 virtual void setStudent ( Person * pstudent , int num ) { // 生徒インスタンス設定 students [ num ] = pstudent ; } } ; void Teacher :: printName () { // 生徒一覧表示のメンバ関数 int i ; for ( i = 0 ; students [ i ] != NULL ; i ++ ) { // ポインタが設定されているとき // 名前を取得して表示 puts ( students [ i ] -> getName () ) ;

単方向関連、双方向関連 基本的に、関連は双方向。(分析段階) 双方向関連は、お互いにポインタを持ち合うように実装する。 しかし、実際は、単方向関連が多い。

クラス図を完成してみよう 前回、操作と属性を分析するときの順序関係で、「操作が属性よりも先」と言いました。 関連を加えた上で、再度順序関係を考えると以下のようになる。

クラス図を完成してみよう 分析の順序    ①クラスの洗い出し    ②関連の探索    ③操作の洗い出し    ④属性の洗い出し