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

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

ネットワークプログ ラミング論 平成27年 11 月 1 6日 森田 彦. 【基礎課題 6-1 】の解答 ① サーブレットを記述して保管するとコン パイルが自動的に行われる。 ② サーブレットの記述後、開発者がコンパ イル命令を実行しなければならない。 ③ プロジェクト名が Web アプリケーション.
プログラムのパタン演習 解説.
プログラミング 平成25年12月3日 森田 彦.
プログラミング基礎I(再) 山元進.
第2回ネットワークプログラミング 中村 修.
CGプログラミング論 平成28年6月1日 森田 彦.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
プログラミング 平成25年12月10日 森田 彦.
関数 関数とスタック.
ネットワークプログラミング論 平成28年12月12日 森田 彦.
ネットワークプログラミング論 平成28年11月21日 森田 彦.
第10章 char 文字列; 文字列を入力させるよ!.
データ構造と アルゴリズム論 平成29年9月27日 森田 彦.
プログラムの制御構造 選択・繰り返し.
ネットワークプログラミング論 平成28年12月26日 森田 彦.
CGプログラミング論 平成28年6月8日 森田 彦.
動的スライスを用いた バグ修正前後の実行系列の比較
関数の定義.
プログラミング 平成23年12月21日 森田 彦.
ネットワークプログラミング論 平成28年11月7日 森田 彦.
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
ネットワークプログラミング論 平成28年10月31日 森田 彦.
ソフトウェア制作論 平成30年12月5日.
ソフトウェア制作論 平成30年10月3日.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
データ構造とアルゴリズム論 第7章 再帰処理 平成17年12月6日 森田 彦.
プログラミングⅠ 平成30年10月29日 森田 彦.
Hello!! Everyone!!.
ソフトウェア制作論 平成30年9月26日.
大岩 元 慶応大学環境情報学部 再帰 データ構造とプログラミング(8) 大岩 元 慶応大学環境情報学部
ソフトウェア制作論 平成30年10月24日.
ネットワークプログラミング論 平成28年12月19日 森田 彦.
アルゴリズムとデータ構造1 2005年7月5日
3.条件式.
プログラムの制御構造 配列・繰り返し.
ソフトウェア制作論 平成30年11月21日.
プログラミングⅠ 平成30年10月15日 森田 彦.
ソフトウェア制作論 平成30年10月10日.
プログラミングⅠ 平成30年10月22日 森田 彦.
プログラミングⅠ 平成31年1月7日 森田 彦.
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
演習07-0 “Hello\n” “World!\n”と
アルゴリズムとデータ構造1 2006年7月11日
アルゴリズムとデータ構造 2011年6月23日
岡村耕二 TCP通信プログラム 課題と回答例 岡村耕二 情報ネットワーク.
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
第6回レポート解説 条件1 条件2 条件3 月の入力 月、日、曜日の表示 日の入力 曜日の入力
アルゴリズムとデータ構造1 2006年6月23日
データ構造とアルゴリズム論 第7章 再帰処理 平成16年11月30日 森田 彦.
ソフトウェア制作論 平成30年11月28日.
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
プログラミングⅠ 平成30年12月10日 森田 彦.
高度プログラミング演習 (11).
ソフトウェア制作論 平成30年11月14日.
C言語講座 制御(選択) 2006年 計算技術研究会.
CGプログラミング論 平成28年5月18日 森田 彦.
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
ループだよ!難しいよ! 第5章 while(ループ);.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
プログラミング 平成28年11月15日 森田 彦.
演習00-0 “Hello\n” “World!\n”と
プログラミング 4 文字列.
CGプログラミング論 平成28年6月29日 森田 彦.
プログラミング 平成24年12月11日 森田 彦.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
ソフトウェア制作論 平成30年10月17日.
プログラミング 平成28年10月25日 森田 彦.
計算技術研究会 C言語講座 第二回 制御構文 if , switch.
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
Presentation transcript:

ソフトウェア制作論 平成30年10月31日

第6章 モジュール分割2 プログラムの拡張性・保守性の向上 第6章 モジュール分割2   プログラムの拡張性・保守性の向上 <本日の学習のねらい> プログラム をモジュール化しておけば、その修正や拡張は比較的容 易に行える。 このことを前章のプログラムを拡張することで体験する。

復習) 前章で作成したプログラム トップダウン的思考に基づいて作成した。 復習) 前章で作成したプログラム メインプログラム(jButtonCalcActionPerformed())の設計 メソッドgetWeekDay(int year, int month, int day)の定義 うるう年の判定 boolean isLeapDay(int year) メソッドgetDayNumber(int year, int month, int day)の定義 トップダウン的思考に基づいて作成した。

基礎課題6-1 どこを修正すれば良いか? private void jButtonCalcActionPerformed(ActionEvent evt) { int year=Integer.parseInt(jTextFieldYear.getText()); int month=Integer.parseInt(jTextFieldMonth.getText()); int day=Integer.parseInt(jTextFieldDay.getText()); String weekDay=getWeekDay(year,month,day); jLabelResult.setText(weekDay+"です。"); } メインプログラムは修正する必要はない。

基礎課題6-1 どこを修正すれば良いか? private void jButtonCalcActionPerformed(ActionEvent evt) { int year=Integer.parseInt(jTextFieldYear.getText()); int month=Integer.parseInt(jTextFieldMonth.getText()); int day=Integer.parseInt(jTextFieldDay.getText()); String weekDay=getWeekDay(year,month,day); jLabelResult.setText(weekDay+"です。"); } メインプログラムは修正する必要はない。 getWeekDay()メソッドを拡張(改良)すれば良い。

基礎課題6-2 String getWeekDay(int year, int month, int day) { int dayNumber=getDayNumber(year,month,day); int no=dayNumber % 7; String[] weekDay={"日曜日","月曜日","火曜日","水曜日", "木曜日","金曜日","土曜日"}; String ans= weekDay[no]; return ans; }

基礎課題6-2 String getWeekDay(int year, int month, int day) { if(year>=2001) { int dayNumber=getDayNumber(year,month,day); int no=dayNumber % 7; String[] weekDay={"日曜日","月曜日","火曜日","水曜日", "木曜日","金曜日","土曜日"}; return weekDay[no]; } else { }

基礎課題6-2 String getWeekDay(int year, int month, int day) { if(year>=2001) { int dayNumber=getDayNumber(year,month,day); int no=dayNumber % 7; String[] weekDay={"日曜日","月曜日","火曜日","水曜日", "木曜日","金曜日","土曜日"}; return weekDay[no]; } else { int dayNumber=getDayNumberBefore(year,month,day); String[] weekDay={“月曜日”,“日曜日”,“土曜日”,“金曜日”, “木曜日",“水曜日”,“火曜日”}; }

基礎課題6-3 int getDayNumberBefore(int year, int month, int day) { int ans=0; return ans; }

基礎課題6-3 int getDayNumberBefore(int year, int month, int day) { int[] monthDay={0,31,28,31,30,31,30,31,31,30,31,30,31}; int ans=0; // 2000年12/31から(year+1)年1/1まで日数のカウント for(int i=2000;i>year;i--){ if( isLeapDay(i) ){ ans=ans+366; } else { ans=ans+365; } // year年の12/31から(month+1)月の1日までの日数のカウント // month月の月末からday日までの日数のカウント+1 return ans;

基礎課題6-4 ・・・ // year年の12/31から(month+1)月の1日までの日数のカウント for( int i=12;i>month;i-- ){ ans=ans+monthDay[i]; //うるう年の補正 if( i==2 && isLeapDay(year) ){ ans=ans+1; } // month月の月末からday日までの日数のカウント+1 ans =ans+monthDay[month]-day; if( month==2 && isLeapDay(year) ){ return ans;

基礎課題6-4 ・・・ // year年の12/31から(month+1)月の1日までの日数のカウント for( int i=12;i>month;i-- ){ ans=ans+monthDay[i]; //うるう年の補正 if( i==2 && isLeapDay(year) ){ ans=ans+1; } // month月の月末からday日までの日数のカウント+1 ans =ans+monthDay[month]-day; if( month==2 && isLeapDay(year) ){ return ans;

基礎課題6-4 ・・・ // year年の12/31から(month+1)月の1日までの日数のカウント for( int i=12;i>month;i-- ){ ans=ans+monthDay[i]; //うるう年の補正 if( i==2 && isLeapDay(year) ){ ans=ans+1; } // month月の月末からday日までの日数のカウント+1 ans =ans+monthDay[month]-day; if( month==2 && isLeapDay(year) ){ return ans;

基礎課題6-4 ・・・ // year年の12/31から(month+1)月の1日までの日数のカウント for( int i=12;i>month;i-- ){ ans=ans+monthDay[i]; //うるう年の補正 if( i==2 && isLeapDay(year) ){ ans=ans+1; } // month月の月末日からday日までの日数のカウント+1 ans =ans+monthDay[month]-day+1; if( month==2 && isLeapDay(year) ){ return ans;

基礎課題6-4 ・・・ // year年の12/31から(month+1)月の1日までの日数のカウント for( int i=12;i>month;i-- ){ ans=ans+monthDay[i]; //うるう年の補正 if( i==2 && isLeapDay(year) ){ ans=ans+1; } // month月の月末からday日までの日数のカウント+1 ans =ans+monthDay[month]-day; if( month==2 && isLeapDay(year) ){ return ans;

モジュール化のメリット 構造が明晰なので、拡張や修正がしやすい。→ 拡張・修正の箇所 を限定し、そこに集中して作業できる。

応用課題6-A if( c[i]<'0' || c[i]>'9' ) { if( inputFlag ) { int getInputValue(String inputStr){ char[] c=inputStr.toCharArray(); boolean inputFlag=true; for(int i=0; i< c.length; i++) { if( c[i]<'0' || c[i]>'9' ) { inputFlag=false; break; } if( inputFlag ) { int ans=Integer.parseInt(inputStr); return ans; } else { jLabelResult.setText("入力欄に整数以外が入力されています。"); int ans=-1;