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

Slides:



Advertisements
Similar presentations
ネットワークプログ ラミング論 平成27年 11 月 1 6日 森田 彦. 【基礎課題 6-1 】の解答 ① サーブレットを記述して保管するとコン パイルが自動的に行われる。 ② サーブレットの記述後、開発者がコンパ イル命令を実行しなければならない。 ③ プロジェクト名が Web アプリケーション.
Advertisements

プログラミング 平成24年1月11日 森田 彦.
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
アルゴリズムとデータ構造 2012年6月27日
プログラミング 平成25年12月3日 森田 彦.
プログラミング基礎I(再) 山元進.
CGプログラミング論 平成28年6月1日 森田 彦.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
プログラミング 平成25年12月10日 森田 彦.
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
関数 関数とスタック.
プログラミング 平成24年10月30日 森田 彦.
データ構造とアルゴリズム論 第8章 再帰処理 平成15年12月2日 森田 彦.
ネットワークプログラミング論 平成28年11月21日 森田 彦.
プログラミング 平成25年11月5日 森田 彦.
データ構造と アルゴリズム論 平成29年9月27日 森田 彦.
CGプログラミング論 平成28年5月25日 森田 彦.
プログラムの制御構造 選択・繰り返し.
CGプログラミング論 平成28年6月8日 森田 彦.
関数の定義.
アルゴリズムとデータ構造 2013年7月16日
プログラミング 平成23年12月21日 森田 彦.
ネットワークプログラミング論 平成28年11月7日 森田 彦.
ソフトウェア制作論 平成30年12月5日.
データ構造とアルゴリズム論 第3章 ファイルを用いたデータ入出力2
ソフトウェア制作論 平成30年10月3日.
データ構造とアルゴリズム論 第3章 ファイルを用いたデータ入出力
データ構造とアルゴリズム論 第7章 再帰処理 平成17年12月6日 森田 彦.
データ構造とアルゴリズム論 第6章 整列(ソート)のアルゴリズム
プログラミングⅠ 平成30年10月29日 森田 彦.
ソフトウェア制作論 平成30年9月26日.
ソフトウェア制作論 平成30年10月31日.
アルゴリズムとデータ構造1 2005年7月5日
3.条件式.
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
ソフトウェア制作論 平成30年11月21日.
プログラミングⅠ 平成30年10月15日 森田 彦.
ソフトウェア制作論 平成30年10月10日.
アルゴリズムとデータ構造 2010年7月26日
再帰的手続き.
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
プログラミングⅠ 平成30年10月22日 森田 彦.
オブジェクト・プログラミング 第8回.
プログラミングⅠ 平成31年1月7日 森田 彦.
演習07-0 “Hello\n” “World!\n”と
アルゴリズムとデータ構造1 2006年7月11日
アルゴリズムとデータ構造 2011年6月23日
C#プログラミング実習 第3回.
アルゴリズムとデータ構造1 2008年7月24日
アルゴリズムとデータ構造 2011年6月28日
アルゴリズムとデータ構造1 2006年6月23日
データ構造とアルゴリズム論 第7章 再帰処理 平成16年11月30日 森田 彦.
ソフトウェア制作論 平成30年11月28日.
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
プログラミングⅠ 平成30年12月10日 森田 彦.
高度プログラミング演習 (11).
CGプログラミング論 平成28年7月6日 森田 彦.
ソフトウェア制作論 平成30年11月14日.
CGプログラミング論 平成28年5月18日 森田 彦.
アルゴリズムとデータ構造 2012年6月25日
プログラミング 平成28年11月15日 森田 彦.
演習00-0 “Hello\n” “World!\n”と
CGプログラミング論 平成28年6月29日 森田 彦.
プログラミング 平成24年12月11日 森田 彦.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
ソフトウェア制作論 平成30年10月17日.
プログラミング 平成28年10月25日 森田 彦.
Presentation transcript:

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

第5章 モジュール分割1 プログラム構造の明晰化 第5章 モジュール分割1 プログラム構造の明晰化 <本日の学習のねらい> プログラムのモジュール化を、具体例を通じて学習する。 その作成過程を通じて、ある程度の構造を持ったプログラムを作成する 方法を理解する。 モジュールとはひとまとまりの機能を持ったプログラムのこと。 一般にプログラムは、幾つかのモジュールを組み合わせて作成する。 そうすることで、プログラムの構造が明確になる。

原型プログラム private void jButtonCalcActionPerformed(ActionEvent evt) { int year=Integer.parseInt(jTextFieldYear.getText()); int month=Integer.parseInt(jTextFieldMonth.getText()); int day=Integer.parseInt(jTextFieldDay.getText()); }

基礎課題5-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+"です。"); } String getWeekDay(int year, int month, int day) { String ans=""; return ans; } 最初に全体構造を設計することがポイント!

基礎課題5-2 String getWeekDay(int year, int month, int day) { String ans=""; return ans; }

基礎課題5-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; } int getDayNumber(int year, int month, int day) { int ans=0; return ans; }

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

基礎課題5-3 int getDayNumber(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)年12/31日までの日数のカウント for(int i=2001;i<year;i++){ if( (i%4)==0 && (i%100)!=0 || (i%400)==0 ){ ans=ans+366; } else { ans=ans+365; } // year年の1/1から(month-1)月の月末までの日数のカウント // month月の一日からday日までの日数のカウント return ans;

基礎課題5-4 boolean isLeapDay(int year){ boolean ans=false; if( ) { ans=true; } return ans; (year%4)==0 && (year%100)!=0 || (year%400)==0

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

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

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

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

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

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

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

モジュール化に基づくプログラムの作成 まとめ① モジュール化に基づくプログラムの作成 まとめ① メインプログラムの作成(設計) 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()メソッドの定義 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; } 基準日からの経過日数を求めるメソッド

モジュール化に基づくプログラムの作成 まとめ③ モジュール化に基づくプログラムの作成 まとめ③ getDayNumber()メソッドの定義-1 基本構造(設計)を固める int getDayNumber(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)年12/31日までの日数のカウント // year年の1/1から(month-1)月の月末までの日数のカウント // month月の一日からday日までの日数のカウント return ans; }

モジュール化に基づくプログラムの作成 まとめ④ モジュール化に基づくプログラムの作成 まとめ④ getDayNumber()メソッドの定義-2 各部の詳細を記述する。 int getDayNumber(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)年12/31日までの日数のカウント     ・・・ // year年の1/1から(month-1)月の月末までの日数のカウント // month月の一日からday日までの日数のカウント return ans; }

モジュール化に基づくプログラムの作成 まとめ④ モジュール化に基づくプログラムの作成 まとめ④ メインプログラム(jButtonCalcActionPerformed())の設計 メソッドgetWeekDay(int year, int month, int day)の定義 うるう年の判定 boolean isLeapDay(int year) メソッドgetDayNumber(int year, int month, int day)の定義 <トップダウン的思考> 全体の構造 ⇒ 各部分の詳細 考察範囲(対象)を狭めて行く 重要!