オブジェクト・プログラミング 第8回.

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
プログラミング 平成24年1月11日 森田 彦.
オブジェクト指向プログラミング(4) 静的分析(2)
~手続き指向からオブジェクト指向へ(Ⅰ)~
プログラミング基礎I(再) 山元進.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
基礎プログラミング 第13回(2007年5月28日) 「関数」の補足説明 Report-Fの解説.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
構造体.
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
オブジェクト指向入門.
アルゴリズムとデータ構造 2011年6月20日
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
~手続き指向からオブジェクト指向へ[Ⅱ]~
第11回 アプリケーションの構成 ~CUI自動販売機の完成!~.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
第1回 プログラムの基本 他人が読めるプログラムを書く.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
5.9 メソッドのオーバーロード 5.10 変数の引渡し 2003/11/21 紺野憲一
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとデータ構造1 2005年6月24日
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向プログラミングと開発環境
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト プログラミング 第2回 プログラムの基本.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 2012年7月2日
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
アルゴリズムとプログラミング (Algorithms and Programming)
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
アルゴリズムとデータ構造 2013年7月2日
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2012年6月21日
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
C言語講座第5回 2017 構造体.
オブジェクト・プログラミング 第10回 オブジェクト指向設計のキモ.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

オブジェクト・プログラミング 第8回

今日のメニュー 前回の課題解説 8章,9章の解説と実験 本日はプログラミングしません

前回の課題解説 1.名前付け 2.メソッドの復習 3.クラスの復習 4.手続き指向の復習 5.データ構造とアルゴリズムの結合 6.さいごに

1.名前付け 1.1 ローレル指数を求めるメソッド 規則が違う getrohrer rohrersum GetRohrer 何をするか分からない calculate calc cal rohrer 妥当 getRohrer calcRohrer その他 rohrerData newRohrer wantRohrer

1.名前付け コメントから書く 適切な日本語を考えよ メソッドはたいてい動詞形になる(~する) /** * ローレル指数を求める */ public int getRohrer(int weight,int height){ }

1.名前付け 1.2 生徒のデータを表現するクラス 代表例 Student StudentData StudentInfo StudentStatus ChildData Type ~Type StudentType ChildDataType その他 ItemType Health Data Profile Member

1.名前付け コメントから書く 日本語で考える 名詞がクラス名になる ~Data,~Infoはたいていの場合、いらない クラス名は複数形にならない ~Data,~Infoはたいていの場合、いらない ItemType(商品種類)は、後にItem(商品)というクラスが登場するためTypeがついている

2.メソッド 2.1 変数の復習 int x; int y; x = 100; y = x; 3つのxの意味の違いを考えてみよう 2.1 変数の復習 3つのxの意味の違いを考えてみよう int x; int y; x = 100; y = x; //名前のx //箱(番地)のx //中身(この場合は100)のx

2.メソッド 2.2 引数 //呼び出し1 int w; w = 56; //呼び出し2 w = weight; //呼び出し1 getRohrer(56,187); //呼び出し2 int weight = 62; int height = 177; getRohrer(weight,height); //中身(この場合は62)のweight //宣言 public int getRohrer(int w,int h){ } //名前のw

2.メソッド スコープが違うので、同じ変数名が可能 名前が同じでも違う変数です //呼び出し1 int weight; //呼び出し1 //呼び出し2 weight = weight; //呼び出し1 getRohrer(56,187); //呼び出し2 int weight = 62; int height = 177; getRohrer(weight,height); //宣言 public int getRohrer(int weight,int height){ }

2.メソッド 2.3 戻り値(1) 何のx? //中身(この場合は100)のx //呼び出し int rohrer;//戻り値を受け取る変数 rohrer = getRohrer(); //宣言 public int getRohrer(){ return 100; } //宣言 public int getRohrer(){ int x = 100; return x; } //中身(この場合は100)のx

2.メソッド 2.3 戻り値(2) 何故ここに戻り値の型を 書かなければならないのか //名前のgetRohrer //宣言 public int getRohrer(int weight,int height){ return 100; } //名前のgetRohrer //呼び出し int rohrer;//戻り値を受け取る変数 rohrer = getRohrer(56,187); //中身(この場合は100)の getRohrer

3.クラス 3.1 クラスの宣言 /** * 生徒クラス */ public class Student{ String name;//名前 int weight;//体重 int height;//身長 }

3.クラス Student x = new Student(); x.weight = 66; x.name = "山田"; 1行目がどのような意味か 正確に説明せよ ③ Student x = new Student(); x.weight = 66; x.name = "山田"; ① ② ④ ⑤ 8769番地 ③ "山田" ⑤ weight name 8769番地 ② 66 ④ x ①

3.クラス 3.3 変数の復習(クラスの変数) Student x; Student y; x = new Student(); 3.3 変数の復習(クラスの変数) 基本的にはintの時と変わらず 4つのxの意味の違いを説明せよ Student x; Student y; x = new Student(); y = x; x.weight = 100; //名前のx //箱(番地)のx //中身(インスタンス番地)のx //番地が指すインスタンスのx

3. クラス 多かった例 せっかくクラスを作ったのに引数が2つのまま //メイン public static void main(String args[]){ Student student = new Student(); getRohrer(student.weight,student.height); } //ローレル指数を求める public static int getRohrer(int weight,int height){

3. クラス 生徒クラスを引数にして、生徒のローレル指数を求めるメソッドにする //メイン public static void main(String args[]){ Student student = new Student(); getRohrer(student); } //ローレル指数を求める public static int getRohrer(Student student){

3.クラス 3.4 引数(クラス) //呼び出し1 Student student; student = new Student(); //呼び出し2 student = student; 3.4 引数(クラス) //呼び出し1 getRohrer(new Student()); //呼び出し2 Student student; student = new Student(); getRohrer(student); //中身のstudent //宣言 public int getRohrer(Student student){ } //名前のstudent

3.クラス 3.5 戻り値(クラス) //中身のmessage //呼び出し String rohrerMessage;//戻り値を受け取る変数 rohrerMessage = getRohrerMessage(120); //宣言 public String getRohrer(int rohrer){ if(rohrer < 100){ return "やせすぎです"; }else{ String message = "太りすぎです"; return message; } //中身のmessage

4.手続き指向の復習 手続き指向 意味のある仕事ごとにメソッドにまとめ、次々と呼び出すことで一つの大きな仕事を行う

4.手続き指向の復習 多かった例 「ローレル指数を求める」 ってメソッド化しなかったっけ? /** * 生徒のローレル指数の平均を取得する */ public int getAverageOfRohrer(){ int amount = 0;//ローレル指数の合計 int studentNum = 0;//生徒の人数 //ローレル指数の合計と、人数を求める for(int i=0;i<10;i++){ if(studentArray[i] != null){//生徒が入っている場合 Student student = studentArray[i]; int rohrer = student.getWeight() * 10000000 / student.getHeight() / student.getHeight() / student.getHeight();//ローレル指数を求める amount = amount + rohrer;//ローレル指数の合計に加える studentNum++;//生徒の人数を1加える } //合計を人数で割り、平均を求める int average = amount / studentNum; return average; 多かった例 「ローレル指数を求める」 ってメソッド化しなかったっけ?

4.手続き指向の復習(#1) せっかくメソッドを作ったのだから、使おう メソッドからメソッドを呼ぶ /** * 生徒のローレル指数の平均を取得する */ public int getAverageOfRohrer(){ int amount = 0;//ローレル指数の合計 int studentNum = 0;//生徒の人数 //ローレル指数の合計と、人数を求める for(int i=0;i<10;i++){ if(studentArray[i] != null){//生徒が入っている場合 Student student = studentArray[i]; int rohrer = getRohrer(studentArray[i]);//ローレル指数を取得する amount = amount + rohrer;//ローレル指数の合計に加える studentNum++;//生徒の人数を1加える } //合計を人数で割り、平均を求める int average = amount / studentNum; return average; せっかくメソッドを作ったのだから、使おう メソッドからメソッドを呼ぶ 「ローレル指数の平均値を求める」メソッド」から 「一人分のローレル指数を求めるメソッド」を呼ぶ

5. データ構造と アルゴリズムの結合 StudentListクラスは良く出来ていた データ構造(配列)とアルゴリズムを結合させたクラス Studentクラスもデータ構造とアルゴリズムを結合できる(#2) getRohrer()メソッド 出来た人は希少

5.データ構造と アルゴリズムの結合 データ構造 引数がなくなっている アルゴリズム /** * 生徒クラス */ public class Student{ String name;//名前 int weight;//体重 int height;//身長 // ローレル指数を取得する public int getRohrer(){ int rohrer; rohrer = weight * 10000000 / height / height / height; return rohrer; } データ構造 引数がなくなっている アルゴリズム

5.データ構造と アルゴリズムの結合 「生徒のローレル指数を求める」という明確なプログラムが書ける public static void main(String args[]){ //生徒を一人生成する Student student = new Student(); student.weight = 89; student.height = 166; int rohrer = student.getRohrer();//ローレル指数を求める System.out.println(rohrer);//表示する }

6. さいごに(#2) 生徒人数変数の導入(8章で詳しく説明) //生徒リストクラス public class StudentList{ private Student[] studentArray;//生徒を保存する配列 private int studentNum;//生徒の人数 //生徒のローレル指数の平均を取得する public int getAverageOfRohrer(){ int amount = 0;//ローレル指数の合計 //ローレル指数の合計を求める for(int i=0;i<studentNum;i++){ int rohrer = studentArray[i].getRohrer();//ローレル指数を取得する amount = amount + rohrer;//ローレル指数の合計に加える } //合計を人数で割り、平均を求める int average = amount / studentNum; return average;

6.さいごに クラスの健康データ表示のメソッド化 Answerクラス(#2)を参照 /** * クラスの健康データを表示する */ public static void displayClassHealthData(String className,StudentList studentList){ int avgHeight = studentList.getAverageOfHeight(); System.out.println(className+"の身長の平均は"+avgHeight+"です"); int avgWeight = studentList.getAverageOfWeight(); System.out.println(className+"の体重の平均は"+avgWeight+"です"); int avgRohrer = studentList.getAverageOfRohrer(); System.out.println(className+"のローレル指数の平均は"+avgRohrer+"です"); }