4回目

オブジェクト指向
プログラミング
第四回
知能情報学部
新田直也
関数の合成

合成関数をデバッグ実行してみよう.
public static void main(String[] args) {
int x, y, z;
x = 2;
y = 3;
z = 4;
ブレーク
z = mult(x, mult(y, z));
ポイント
System.out.println("2 * (3 * 4) = " + z);
}
public static int mult(int a, int b) {
int c;
c = a * b;
return c;
}
再帰関数

階乗を求める再帰関数をデバッグ実行してみよう.
public static void main(String[] args) {
int x, y;
x = 4;
ブレーク
y = fact(x);
ポイント
System.out.println("4! = " + y);
}
public static int fact(int a) {
if (a == 1) {
return 1;
}
return a * fact(a - 1);
}
インデントについて

行の
先頭
を揃
える
Javaの標準のインデントに従おう.
public static void main(String[] args) {
int x, y;
x = 4;
y = fact(x);
System.out.println("4! = " + y);
}
public static int fact(int a) {
if (a == 1) {
return 1;
}
return a * fact(a - 1);
}
中括弧開くは
行の末尾に
関数の再利用

一度定義した関数は,何度でも何処からでも呼び出
して再利用できる.
public static void main(String[] args) {
int x, y;
y = fact(4);
System.out.println("4! = " + y);
y = fact(5);
System.out.println("5! = " + y);
y = fact(6);
System.out.println("6! = " + y);
}
public static int fact(int a) {
if (a == 1) {
return 1;
}
return a * fact(a - 1);
}
呼び出し
呼び出し
呼び出し
再利用の前提
関数名が適切であること.
 関数という部品の性質.



入力と出力の関係によって定義される.
内部の処理をブラックボックス化できる.(情報隠蔽)
x
a
fact
x!
内部処理の隠蔽

factの内部の処理を変えてみる.
public static void main(String[] args) {
int x, y;
y = fact(4);
System.out.println("4! = " + y);
y = fact(5);
System.out.println("5! = " + y);
y = fact(6);
System.out.println("6! = " + y);
}
public static int fact(int a) {
int x, b = 1;
for (x = 1; x <= a; x++) {
b = b * x;
}
return b;
}
呼び出し側は
一行も変えて
いない
呼び出し側は
内部の処理を
知らなくてよい
内部の処理を
書き換え
情報隠蔽の効用

再利用が容易になる.


何度も同じようなコードを書かなくて済む.(効率化)
何度もテスト&デバッグしなくて済む.(高信頼化)
作業を分担できる.(分業化)
 変更が必要となったときに修正箇所を局所化できる.
(変更の局所化,可変性の向上)
