オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也
関数の合成 合成関数をデバッグ実行してみよう. 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); 呼び出し 呼び出し 呼び出し
再利用の前提 関数名が適切であること. 関数という部品の性質. 入力と出力の関係によって定義される. 内部の処理をブラックボックス化できる.(情報隠蔽) fact x x! a
内部処理の隠蔽 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; 呼び出し側は 一行も変えていない 呼び出し側は 内部の処理を 知らなくてよい 内部の処理を 書き換え
情報隠蔽の効用 再利用が容易になる. 作業を分担できる.(分業化) 何度も同じようなコードを書かなくて済む.(効率化) 何度もテスト&デバッグしなくて済む.(高信頼化) 作業を分担できる.(分業化) 変更が必要となったときに修正箇所を局所化できる. (変更の局所化,可変性の向上)