Presentation is loading. Please wait.

Presentation is loading. Please wait.

ソフトウェア制作論 平成30年11月21日.

Similar presentations


Presentation on theme: "ソフトウェア制作論 平成30年11月21日."— Presentation transcript:

1 ソフトウェア制作論 平成30年11月21日

2 第9章 プログラムの汎用化3 クラスの利用による機能の分離
第9章 プログラムの汎用化3  クラスの利用による機能の分離 <本日の学習内容とねらい> 前章のプログラムから、元号を求める部分を分離させてクラスとして 定義する。 そして、メインプログラムではそのクラスのオブジェクトを生成し、そ れを利用することで処理を実行するようにする。 こうすることで、当該クラスは他のプログラムからも利用可能になる。 以上を体験することで、ひとまとまりの機能をクラスとして定義するこ とで、プログラムの汎用化がさらに進むことを理解する。

3 基礎課題9-1 クラスの新規作成 package kiso9; public class EraClass { }

4 基礎課題9-2 import文の追加 import java.io.*; import java.util.StringTokenizer;
package kiso9; import java.io.*; import java.util.StringTokenizer; public class EraClass { }  このクラスで、外部ファイルからのデータ読み取りを行う必要がある。  そこで、それに必要なクラスが含まれるパッケージをimportする。

5 基礎課題9-3 インスタンス変数の定義(宣言)
基礎課題9-3 インスタンス変数の定義(宣言) package kiso9; import java.io.*; import java.util.StringTokenizer; public class EraClass { String[] eraName; //元号名 int[] eraYear,eraMonth,eraDay; //元号の開始年月日 int year, month, day; //入力した西暦年月日 String fName; //外部ファイル名 }  元号変換を行うために必要な変数を定義(宣言)する。

6 基礎課題9-4 setEraData()の定義
public class EraClass { ・・・ public void setEraData(int num, int year, int month, int day, String fName) { this.year=year; this.month=month; this.day=day; this.fName=fName; eraName=new String[num]; eraYear=new int[num]; eraMonth=new int[num]; eraDay=new int[num]; }  データをセットするメソッドを定義する。

7 基礎課題9-5 getEraName()の定義
public String getEraName(){ int eraNumber=readData(); String ans=""; int i; for (i=0;i<eraNumber;i++) { if( year<eraYear[i] || (year==eraYear[i] && month<eraMonth[i]) || (year==eraYear[i] && month==eraMonth[i] && day<eraDay[i]) ) { break; } if(i==0) { //最初の元号以前 ans="******"; } else { ans=eraName[i-1]+( (year-eraYear[i-1])+1 ); return ans;  このメソッドは基本的に前章のものと同様

8 基礎課題9-6 readData()の定義 ファイル名を変数で指定していること以外は前章のものと同様
private int readData() { int ans=0; try { BufferedReader fin=new BufferedReader(new FileReader(fName)); String data; int i=0; ・・・(前章と同じ) } ans=i; fin.close(); } catch (Exception em) {System.out.println(em); } return ans;  ファイル名を変数で指定していること以外は前章のものと同様

9 基礎課題9-7 メインプログラムの修正 private void jButtonGengouActionPerformed(ActionEvent evt) { int year=Integer.parseInt(jTextFieldYear.getText()); int month=Integer.parseInt(jTextFieldMonth.getText()); int day=Integer.parseInt(jTextFieldDay.getText()); String eraName=getEraName(year,month,day); jLabelResult.setText(eraName+"年"+month+"月"+day+"日"); }  クラスEraClassを利用するように修正。

10 基礎課題9-7 メインプログラムの修正 int dataSize=100; String fName="年号データ.csv";
基礎課題9-7 メインプログラムの修正 private void jButtonGengouActionPerformed(ActionEvent evt) { int year=Integer.parseInt(jTextFieldYear.getText()); int month=Integer.parseInt(jTextFieldMonth.getText()); int day=Integer.parseInt(jTextFieldDay.getText()); EraClass era1=new EraClass(); int dataSize=100; String fName="年号データ.csv"; era1.setEraData(dataSize,year, month, day, fName); String eraName=era1.getEraName(); String eraName=getEraName(year,month,day); jLabelResult.setText(eraName+"年"+month+"月"+day+"日"); } NewJFrameクラスからgetEraName()およびreadData()メソッドを削除できる。

11 変数を用いたプログラムの汎用化3 クラスの利用による機能の分離
クラスeraClassは他のプログラムからも利用できる。 → 再利用 性の向上 元号変換部分をクラスとして分離・独立させることで、プログラムの 汎用化はさらに進んだ。 <オブジェクト指向プログラミングの基本スタイル> メインプログラムでは以下のスタイルで処理を実現する。 ある機能を持ったクラスのオブジェクトを生成。 そのオブジェクトのメソッドを利用。   オブジェクト名.メソッド名()


Download ppt "ソフトウェア制作論 平成30年11月21日."

Similar presentations


Ads by Google