1 / 43

第3回 手続き指向のプログラム

第3回 手続き指向のプログラム. ~同じ仕事は2度書かない~. 学習目標. 手続き指向のプログラムを書ける メソッドを使う利点を説明できる Java でのメソッドの使い方を説明できる 引数と返り値の説明ができる メソッドを使って手続き指向のプログラムが書ける. 3.1 同じ意味の 仕事はカタマリに. 3.1.1 同じ仕事が何度も ①前回のプログラムの問題点 ②同じ意味の仕事は2度書かない. 3.1.1 同じ仕事が何度も. ①前回のプログラムの問題点. 例題3-1 ( Example3_1.java).   //商品種類を追加する

cain-allen
Download Presentation

第3回 手続き指向のプログラム

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第3回 手続き指向のプログラム ~同じ仕事は2度書かない~

  2. 学習目標 • 手続き指向のプログラムを書ける • メソッドを使う利点を説明できる • Javaでのメソッドの使い方を説明できる • 引数と返り値の説明ができる • メソッドを使って手続き指向のプログラムが書ける

  3. 3.1 同じ意味の仕事はカタマリに • 3.1.1 同じ仕事が何度も • ①前回のプログラムの問題点 • ②同じ意味の仕事は2度書かない

  4. 3.1.1 同じ仕事が何度も • ①前回のプログラムの問題点 例題3-1 (Example3_1.java)   //商品種類を追加する int addId = 1001;//コーラを追加する for(int i=0;i<10;i++){//商品種類が… if(itemTypeArray[i] == -1){//入っていない itemTypeArray[i] = addId;//書き込む break; } } addId = 1002;//ソーダを追加する for(int i=0;i<10;i++){//商品種類が… if(itemTypeArray[i] == -1){//入っていない itemTypeArray[i] = addId;//書き込む break; } }

  5. 人間の仕事ではない 問題点 • 同じ仕事を2度書いてしまっている • 追加、削除を100回やるために、100回ほとんど同じことを書かなくてはいけない。 • 100回書いたはいいが、アルゴリズムを変えるときはどうするのか?

  6. コピーペーストをしてからちょっとだけ変更 ②同じ仕事は2度書かない • プログラム中で同じ意味の仕事は2度書いてはいけない • 変更が容易にできるプログラムのために • 他人が読めるプログラムのために • バグの少ないプログラムのために

  7. 3.2 メソッド • 3.2.1 メソッドとは • 3.2.2 メソッドを使ったプログラム • ①メソッドを定義する • ②メソッドを呼び出す • ③引数を渡す • Javaの文法-変数のスコープ- • ④返り値のあるメソッド

  8. 追加して! 3.2.1 メソッドとは? • メソッドは、何度も同じ仕事を書かなくてすむように、仕事をまとめて書くことができる仕組みです。 • 仕事ごとにプログラムを分けると、人間にわかりやすいプログラムになります。 • 一つのプログラムは、たくさんのメソッドから成り立ちます。 • main()もメソッドの一つです。 mainメソッド メソッド addメソッド プログラム

  9. メソッドを使う 例題3-1 (Example3_1.java)   //商品種類を追加する int addId = 1001;//コーラを追加する for(int i=0;i<10;i++){//商品種類が… if(itemTypeArray[i] == -1){//入っていない itemTypeArray[i] = addId;//書き込む break; } } addId = 1002;//ソーダを追加する for(int i=0;i<10;i++){//商品種類が… if(itemTypeArray[i] == -1){//入っていない itemTypeArray[i] = addId;//書き込む break; } } 同じ仕事を一つにした「追加する」メソッドを 作ります 同じ仕事だから //「追加する」メソッド public static void add(int[] targetArray,int addId){   for(int i=0;i<10;i++){//商品種類が… if(itemTypeArray[i] == -1){//入っていない itemTypeArray[i] = addId;//書き込む break; } } } 例題3-2 (Example3_2.java)

  10. メソッドの名前 引数 仕事 3.2.2①メソッドを定義する public static void add(int[] targetArray,int addId){ //商品種類が入っていない箱を探す for(int i=0;i<10;i++){ if(targetArray[i] == -1){//入っていない targetArray[i] = addId;//書き込む break; } } }

  11. メソッドを置く位置 • Javaでは、クラスの中にメソッドを書きます。(メソッドの中にはメソッドは書けません。) public class Example3_1{ public static void main(String args[]){ … } public static void add(int[] targetArray,int addId){ … } }

  12. メソッドには必ずコメントをつける • メソッドには、必ずどのような目的を持った仕事をするのか、コメントで書いておきます。 例題3-1 (Example3_1.java) public class Example3_1{ /** * プログラム・メイン */ public static void main(String args[]){ … } /** * 商品種類を追加する */ public static void add(int[] targetArray,int addId){ … } }

  13. ②メソッドを呼び出す • メソッドは作っただけでは意味がない • 実行して、自動的に呼ばれるのは、mainメソッドだけ addメソッド mainメソッド mainメソッド mainメソッド プログラム

  14. 追加して! addメソッド addメソッド mainメソッド mainメソッド メソッドを呼び出す • メソッドは、メソッドから呼び出されて仕事をします。 • 仕事が終わると、呼び出し側が仕事の続きをします。 addメソッド mainメソッド mainメソッド mainメソッド プログラム

  15. メソッドを呼び出す方法 例題3-2 (Example3_2.java) public class Example3_2{ /** * メインメソッド */ public static void main(String args[]){ … //追加する(メソッドを呼び出す) add(itemTypeArray,1001); } /** * 追加するメソッド */ public static void add(int[] targetArray,int addId){ … } } メソッドの名前と引数を渡して メソッドを呼び出します。

  16. メソッドの呼び出し練習問題 • 次のプログラムの出力はどうなります? public class Practice3_1 { public static void main(String args[]){ System.out.println("A"); method1(); System.out.println("B"); method2(); System.out.println("C"); } public static void method1(){ System.out.println("D"); method2(); System.out.println("E"); } public static void method2(){ System.out.println("F"); } public static void method3(){ System.out.println("G"); } } テキスト 練習問題3-1

  17. 答え A D F E B F C

  18. 1001 addId 追加する商品種類 -1 -1 -1 -1 -1 -1 [0] [1] [2] [3] [4] [5] 追加する配列 ③引数を渡す • 仕事をするときに、材料が必要な場合があります • 「追加する」という仕事をするためには、どんな材料が必要ですか? addメソッド

  19. 仕事の材料=引数 1001 addId 追加する商品種類 -1 -1 -1 -1 -1 -1 [0] [1] [2] [3] [4] [5] 追加する配列 引数 • メソッドを作るときは、仕事をするために必要な材料を明らかにします。それを引数(ひきすう)といいます。 addメソッド

  20. [0] [1] [2] [3] [4] [5] 材料の受け渡し方 仮引数 として受け取る 実引数 として渡す 1001 addId -1 -1 -1 -1 -1 -1 mainメソッド addメソッド 引数

  21. 仮引数として受け取るためには • メソッドを作るときに仮引数を宣言します。 • 通常の変数の宣言と同じ形にします。 • 複数ある場合は「,」で区切ります。 public static void add(int[] targetArray,int addId){ … } 仮引数を宣言する

  22. 実引数として受け渡すには • メソッドを呼び出すときに、実引数を渡します。 • 宣言ではありません。実際の値を渡します。 • 仮引数に代入する感じで。 public static void main(String args[]){   int[] itemTypeArray = new int[10]; … add(itemTypeArray,1001); } 実引数を渡す

  23. 実引数と仮引数の結合 • メソッドが呼ばれると、実引数が仮引数に自動的に代入されるので、材料が渡せます。 呼び出し側 add(itemTypeArray,1001); 呼び出され側 public static void add(int[] targetArray,int addId) 実引数と仮引数の結合 int[] targetArray = itemTypeArray int addId = 1001

  24. Javaの文法-変数のスコープー • メソッド内で宣言した変数はメソッド内でのみ有効 public class A{ public static void main(String args[]){ int i;   i = 3;//これはOK   }   public static void methodA(int x){ i = 3;//コンパイルエラー } } iの有効範囲

  25. 変数のスコープ(2) • メソッドの仮引数の有効範囲もそのメソッド内のみ public class A{ public static void main(String args[]){ x = 3;//コンパイルエラー   } public static void methodA(int x){ x = 3;//OK } } 仮引数targetの有効範囲

  26. 変数のスコープ(3) • 実は、クラス内で有効な変数も作ることができます。来週やります。(今日は使いません) public class A{ static int i; public static void main(String args[]){ i = 3;   } }

  27. なぜ引数が必要なのか(1) • スコープで説明したように、addメソッドはmainメソッドでのみ有効な「itemTypeArray」を知ることができません。 public class Example{ public static void main(String args[]){ int[] itemTypeArray = new int[10]; System.out.println(itemTypeArray[3]);//OK   }   public static void add(){ System.out.println(itemTypeArray[3]);//コンパイルエラー } }

  28. なぜ引数が必要なのか(2) • addメソッドがitemTypeArrayを知るためには、教えてもらう必要があります。そこで仮引数を利用するのです。 public class Example{ public static void main(String args[]){ int[] itemTypeArray = new int[10]; System.out.println(itemTypeArray[3]);   }   public static void add(int[] targetArray){ System.out.println(targetArray[3]); //OK } }

  29. なぜ引数が必要なのか(3) • mainメソッドは実引数として値itemTypeArrayを与えます。 public class Example{ public static void main(String args[]){ int[] itemTypeArray = new int[10]; add(itemTypeArray); }   public static void add(int[] targetArray){ System.out.println(targetArray[3]); } }

  30. なぜ引数が必要なのか(4) • 与えられた実引数itemTypeArrayが仮引数targetArrayに代入され、addメソッドで追加するために使えるようになります。 public class Example{ public static void main(String args[]){ int[] itemTypeArray = new itemTypeArray[10]; add(itemTypeArray);   }   public static void add(int[] targetArray){ System.out.println(targetArray[3]); } } 代入される

  31. ④返り値のあるメソッド • 検索メソッドを作ろう! • 追加メソッドを参考にしながら、検索メソッド「search」を作っていきましょう! • 引数には何が必要ですか?

  32. 引数に必要なもの 検索対象の配列itemTypeArrayと 検索する商品番号searchIdが必要 検索して! mainメソッド searchメソッド

  33. あったよ! / なかったよ! 検索結果を返してほしい • mainメソッドは検索してもらったら、結果(あった、なかった)を知りたいですね! 検索して! mainメソッド searchメソッド

  34. あったよ! / なかったよ! 返り値 • メソッドは、仕事の結果を「返り値」として返すことができます mainメソッド searchメソッド 返り値

  35. Javaで返り値のあるメソッドを書く • まず、返り値をどの型で返すのかを決めます • 今回の場合、「あった、なかった」なので、真偽値型のbooleanを使うことにしましょう true = あった false = なかった

  36. 返り値の型を宣言する • メソッド宣言の返り値をbooleanにします public static boolean search(int[] targetArray,int searchId){ … } 追加メソッドの時は、「void」でした。 voidとは、「返り値がない」という意味なのでした

  37. 適切な値を返す 例題3-2 (Example3_2.java) public static boolean search(int[] targetArray,int searchId){ //一つ一つ商品種類を探す for(int i=0;i<10;i++){ if(targetArray[i] == searchId){//見つかった return true; } } //見つからなかった return false; } return [値]で返り値を返します

  38. このプログラム間違ってない? 例題3-2 (Example3_2.java) public static boolean search(int[] targetArray,int searchId){ //一つ一つ商品種類を探す for(int i=0;i<10;i++){ if(targetArray[i] == searchId){//見つかった return true; } } //見つからなかった return false; } 見つかって、trueを返した後、 for文を抜けたら、falseも返して しまわないですか?

  39. まちがってないです • 値を返した時点で、メソッドは終了し、mainに戻るので、見つかったときもうまく動きます。 • メソッドは返り値を2つ返すことはできません。

  40. 3.2 プログラムの意味とメソッド • 3.3.1 プログラムを意味ごとにまとめる

  41. 3.3.1 プログラムを意味ごとにまとめる • メソッドを使って、仕事を意味ごとにまとめていくのが、手続き指向の基本です • 「商品種類の管理」プログラムにおける、目的の階層構造をもう一度考えてみましょう

  42. 目的の階層構造 • 自動販売機のプログラム • 商品種類を管理する • 商品種類を追加する • 商品種類を検索する • 商品種類を削除する • 商品種類を提示する

  43. 目的の階層構造とメソッド • 自動販売機のプログラム • 商品種類を管理する-main() • 商品種類を追加する-add() • 商品種類を検索する-search() • 商品種類を削除する-remove() • 商品種類を提示する-display()

More Related