Program Design (プログラム設計)

Similar documents
メソッドのまとめ

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

デジタル表現論・第4回

デジタル表現論・第6回

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Microsoft PowerPoint - chap10_OOP.ppt

プログラミング入門1

プログラミング基礎I(再)

GEC-Java

Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

プログラミング入門1

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

オブジェクト指向プログラミング・同演習 5月21日演習課題

プログラミング入門1

プログラミングA

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

プログラミング入門1

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

Prog2_9th

IT プロジェクト

Microsoft Word - keisankigairon.ch doc

人工知能入門

Java講座

スライド 1

プログラミング入門1

: : : TSTank 2

Java (7) Lesson = (1) 1 m 3 /s m 2 5 m 2 4 m 2 1 m 3 m 1 m 0.5 m 3 /ms 0.3 m 3 /ms 0.6 m 3 /ms 1 1 3

Microsoft PowerPoint - prog03.ppt

JavaプログラミングⅠ

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

文字列操作と正規表現

GEC-Java

Prog1_6th

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

K227 Java 2

Prog1_10th

Microsoft PowerPoint ppt

プログラムの基本構成

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

プログラミング入門1

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

基本情報STEP UP演習Java対策

2

プログラミング入門1


スライド 1

Microsoft PowerPoint - prog04.ppt

PowerPoint プレゼンテーション

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Javaプログラムの実行手順

GEC-Java

問題1 以下に示すプログラムは、次の処理をするプログラムである

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

Prog1_15th

JAVA入門

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

JavaプログラミングⅠ

JavaプログラミングⅠ

問題1 以下に示すプログラムは、次の処理をするプログラムである

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

Formal Engineering Methods for Software Development --An Introduction to SOFL--

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

JAVA とテンプレート

実行時のメモリ構造\(2\) Javaスタック内のフレーム間動作

< F2D B838A835882CC8CF68EAE2E6A7464>

微分方程式 モデリングとシミュレーション

JavaプログラミングⅠ

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

JavaプログラミングⅠ

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

JavaプログラミングⅠ

1.ppt

JavaプログラミングⅠ

Microsoft PowerPoint - prog09.ppt

ex01.dvi

2

PowerPoint プレゼンテーション

とても使いやすい Boost の serialization

情報処理Ⅰ

Microsoft PowerPoint - prog09.ppt

r02.dvi

ohp02.dvi

JavaプログラミングⅠ

2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し

PowerPoint プレゼンテーション

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

PowerPoint プレゼンテーション

2

Microsoft PowerPoint - 計算機言語 第7回.ppt

text_08.dvi

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

Java言語 第1回

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値

Transcription:

7. モジュール化設計 内容 : モジュールの定義モジュールの強度又は結合力モジュール連結モジュールの間の交信

7.1 モジュールの定義 プログラムモジュールとは 次の特徴を持つプログラムの単位である モジュールは 一定の機能を提供する 例えば 入力によって ある出力を出す モジュールは 同じ機能仕様を実装しているほかのモジュールに置き換えられる この変化によって プログラム全体に影響をあまり与えない モジュール化設計の基本アイデアは 他の製品の生産プロセスと同じように考える

具体的には モジュールは 次のプログラム単位に 解釈できる : A procedure in Pascal. A function in C. An operation in general. A process in DFDs. A method in Java. A unit that groups operations. A class (e.g., a Java class). 操作レベルのモジュール 高いレベルのモジュール

事例 (1) 操作レベルのモジュール : Java メソッド : class ExampleModule { int x, y; int Swap() { int a = 0; //local variable declaration a = x; x = y; y = a; //statement-1 //statement-2 //statement-3

(2) 高いレベルのモジュール : module A; variable declarations; operation-1; operation-2; operation-3; operation-n end-module 幾つかの操作をグループする

高いレベルのモジュール : Java クラス class Calculator { int reg; public Calculator() { initialize reg; //constructor of the class public int Add(int i) { reg = reg + i; public int Subtract(int i) { reg = reg i; public int Multiply(int i) { reg = reg * i;

7.2 モジュールの強度又は結合度 下の議論には 操作レベルのモジュールを使う 定義 : モジュールの強度 (strength) 又は結合度 ( cohesion) は 文又は操作が同じモジュールに所属する程度を測る尺度である

一般原則 同じタスクを完成するために必要な文又は操作が 同じモジュールに所属する訳である

モジュール設計の指針 一つのタスクを完成するためにモジュールを作成する 例えば 計算機 Calculator クラスの中で 定義されている操作 Add, Subtract, および Multiply それぞれ操作は モジュールとして見られる 関係が薄い幾つかのタスクがひとつのモジュールに置くことができる ただし これらのタスクが プログラムの中で同じ時間で実行されるため 同じモジュールに置く 例えば 幾つかの変数らを初期化する文を同じモジュールに置く ひとつ以上の関係があるタスクを実装する文を同じモジュールに置くこともできる 例えば プログラムの実行の最後に データをファイルに書き込む文を同じモジュールに置く

7.3 モジュール連結 (coupling) 定義 : モジュール連結は プログラムモジュール間の独立性の程度を測る基準である 一般的に モジュール連結は 強くなればなるほど 一つのモジュールがほかのモジュールへの影響を与える可能性が高くなる 例えば 大家族と小家族と比べて 大家族の成員の間の影響は小家族より相互影響力が高い 一般的には 引数を通じてモジュール連結する場合はグローバル変数を通じてモジュール連結する場合より モジュール連結を弱める

事例 class Calculator { int reg; void Calculator() { initialize reg; //constructor of the class int Add(int i) { reg = reg + i; int Subtract(int i) { reg = reg i; int Multiply(int i) { reg = reg * i; Use the same global variable reg. Use no common global variable class Calculator { void Calculator() { //constructor of the class int Add(int reg, int i) { return reg + i; int Subtract(int reg, int i) { return reg i; int Multiply(int reg, int i) { return reg * i;

7.4 モジュールの間の交信 プログラムは 一般的に幾つかのモジュールから構成される プログラムの機能を提供するため モジュールの間に交信することが必要である モジュールの間の関係を モジュールの呼び出しによって作られる 一つのモジュールから もう一つのモジュールを呼び出すときに 必要なデータ項目を提供することが必要である それらのデータ項目が 引数またはグローバル変数によってできる

交信手段 引数によって交信する グローバル変数によって交信する

次の二つのプログラムを通じて モジュール連結の 概念を説明する 問題 : プログラムは 10 個の 0 ではない違う整数を入力して 二つの数字を出力する (1) 10 個の整数の平均値より大きい整数の数 (2) 10 個の整数の平均値より小さい整数の数 例えば 入力 : 5, 78, 56, 89, 12, 24, 75, 98, 34, 68 (average = 539 / 10 = 53.9); 出力 : count1 = 6 ( 大きい整数 : 78, 56, 89, 75, 98, 68) count2 = 4 ( 小さい整数 : 5, 12, 24, 34)

二つの Java- 擬似コード プログラム 1: import java.io.*; public class CountNumbers { //there is no global variables here public static void main(string args[]) { int numbers[] = new int[10]; int count1 = 0, count2 = 0; double average = 0.0; for (int i = 0; i < numbers.length; i++) INPUT numbers[i]; average = CalculateAverage(numbers); count1 = CountGreater(average, numbers); count2 = CountSmaller(average, numbers); OUTPUT count1 and count2;

double CalculateAverage(int a[]) //obtain average { int total = 0; double ave = 0.0; for (int j = 0; j < a.length; j++) total = total + a[j]; ave = total / 10; return ave;

int CountGreater(double ave, int a[]) { int count1 = 0; for (int k = 0; k < a.length; k++) if (a[k] > ave) count1 = count1 + 1; return count1; int CountSmaller(double ave, int a[]) { int count2 = 0; for (int k = 0; k < a.length; k++) if (a[k] < ave) count2 = count2 + 1; return count2;

プログラム 2: import java.io.*; public class CountNumbers { //there are four global variables here static int numbers[] = new int[10]; static double average = 0.0; static int count1 = 0, count2 = 0; public static void main(string args[]) { for (int i = 0; i < numbers.length; i++) INPUT numbers[i]; CalculateAverage(); CountGreaterSmaller(); //compute count1 and count2 System.out.println("Count1:" + count1); System.out.println("Count2:" + count2);

static void CalculateAverage() { // Obtain average int total = 0; for (int j = 0; j < numbers.length; j++) total = total + numbers[j]; average = total / 10; static void CountGreaterSmaller() { for (int k = 0; k < numbers.length; k++) if (numbers[k] > average) count1 = count1 + 1; else count2 = count2 + 1;

利点と弱点 グローバル変数を通じで交信の場合は モジュール連結を強め モジュールの独立性を弱める このような交信方法は モジュール化設計の立場から見ると よくない方法である グローバル変数を通じてモジュールの間の通信の場合は プログラムの実行する効率が高くなる

引数によって交信する場合は モジュールの独立性を強める しかし プログラムの効率が減らす可能性が高い