応用プロジェクト後半 第2回(12/11) 担当:奥田教授

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Applet 岡部 祐典 鈴木 敬幸.
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
Ex8. Search for Vacuum Problem(2)
Servlet J2EE I 第8回 /
アルゴリズムとデータ構造1 2007年6月12日
Iアプリプログラミング その1  鳥居秀徳.
アルゴリズムとプログラミング (Algorithms and Programming)
ネットワークプログラミング論 平成27年10月12日 森田 彦.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
卒研:データベースチーム 第4回 DOMを使った処理
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
Bridge Pattern
オブジェクト指向入門.
ネットワークプログラミング論 平成28年10月17日 森田 彦.
応用プロジェクト後半 第2回(11/26) 担当:奥田教授
RMI ソフトウェア特論 第6回 /
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
応用プロジェクト後半 第3回 (12/15) 担当:奥田先生
第6回 2007年6月1日 応用Java (Java/XML).
第11週:super/subクラス、継承性、メソッド再定義
Javaによる Webアプリケーション入門 第6回
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
Javaプログラムの変更を支援する 影響波及解析システム
東京大学人間環境学専攻 奥田・橋本研究室 修士1年 相良 光志
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
応用プロジェクト後半 第2回(12/5) 担当:奥田教授
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
応用プロジェクト後半 第2回 (12/1) 担当:橋本先生
応用プロジェクト後半 第2回 (12/7) 担当:橋本先生
ソフトウェア制作論 平成30年11月21日.
応用プロジェクト後半 第3回 (12/3) 担当:奥田教授
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
応用プロジェクト後半 第3回 (12/14) 担当:奥田先生
50年後の未来を予測する -新技術の普及過程モデリング-
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
応用プロジェクト後半 第5回 (1/5) 担当:奥田・橋本
JSPの基本 J2EE I (データベース論) 第8回 /
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
応用プロジェクト後半 第5回 (12/17) 担当:奥田教授
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

応用プロジェクト後半 第2回(12/11) 担当:奥田教授 応用プロジェクト後半  第2回(12/11) 担当:奥田教授 TA : sagara sagara@multi.k.u-toyko.ac.jp

今後の予定 第1回(12/4) 環境構築 第2回(12/11) サンプル実行 第3回(12/18) サンプル実行 第1回(12/4) 環境構築 第2回(12/11) サンプル実行 第3回(12/18) サンプル実行 サンプル読解(長い)・最終テーマ案 第4回(1/8) SAGSの操作 データ探しの課題 第5回(1/15) 探したデータでSim. 第6回(1/22) 発表会 最終レポート 数枚。

課題について 日本における自動車の普及予測(燃料電池自動車、ハイブリッド車、ガソリン車、ディーゼル車、電気自動車)MADSで実現しようとするとき、自分なりのシミュレーションシナリオを考えて、その際どんなデータ(水素ステーションの設置数、環境政策の推移など)が必要なのかについて考察

本日の内容 SampleSimulation 1 ~ 5 を実行 SampleSimulation 1 ~ 5 の中身を吟味 資料 (下記ページからmanual2.doc) http://www.multi.k.u-tokyo.ac.jp/lectures/pukiwiki/index.php ※今回と次回は基本的にmanualに従うだけで終わってしまう

詳しく知りたい人 mads-○×.jar/ sags-○×.jarファイルを解凍してeclipse等で見てみると継承関係とかオーバーライド関係とか、どのクラスのどのメソッドを使ってるのかわかりますよ

作業 Manual1.docに倣い、Sample1~5を実行 読解の課題もあるので簡単にプログラムの解説もします SAGS,Eclipse起動 新規プロジェクト作成 Tutorialからサンプルをコピペ Javaアプリケーションの実行設定を新たに作成(メイン・引数・クラスパス) ビルドパスの設定 Ctrl + F11

コンパイラ準拠レベル Eclipseのバージョンによって1.5と表示されたり、5.0と表示されたりしている それ以上のバージョンの場合は基本的に上位互換なので変更しなくても動くはずである Collectionを用いているため コマンドプロンプト/eclipseでバージョンは合わせる セキュリティ的には昔のバージョンの保持は脆弱性に繋がるので基本的に消しておいた方がいい

Sags起動の必要性 中核となるプログラムは これらによってsagsと通信を行うため この2つを理解すればとても良い Mads/core/ASimulationAgent.java Mads/core/AServiceAgent.java これらによってsagsと通信を行うため この2つを理解すればとても良い

SAGS起動 これが起動されていることを確認する

サンプルごとにプロジェクト・構成 新規プロジェクト 構成と実行 サンプルごとにこれらを毎回作成すると良い

新規Javaプロジェクト作成 Package explorer右クリック New Javaプロジェクト “SampleSimulation2”と入力

ソースをコピペ SampleSimulation2を展開し,srcの上で右クリック→new→class クラス名“Sample2_ServiceFunctions”とする http://nihonbashi.race.u-tokyo.ac.jp/mads/tutorials/Sample2_ServiceFunctions.html このページからソースをコピペして貼り付ける

実行および構成

新規構成の作成 Javaアプリケーションに選択をした後に,赤マル部分をクリックして新規作成

main Name: SampleSimulation2 Project: SampleSimulation2 Main class: Jade.Boot チェック×2

引数 プログラムの引数欄 VM引数欄 -Xms128m -Xmx512m -container sample:Sample2_ServiceFunctions VM引数欄 -Xms128m -Xmx512m

クラスパス ユーザー・エントリー」を選択し、右側の「外部JARの追加」 mads-all-libs.jarを追加

ビルドパス mads-all-libs.jarをプロジェクトに追加

SampleSimulationについて システムとしてはかなり親切で,各メソッド等に丁寧にコメント(英語)がついているので,それを読めば何をしているのかわかる システム開発のコーディング規約によってはコメントを残すと怒られる 中身について触りだけ説明する

SampleSimulation1 これらは何者か? public class Sample1_HelloWorld extends ASimulationAgent { public void doWork(){ System.out.println("Hello world !!! \n My first simulation"); } これらは何者か?

ASimulationAgent - madsで中核を担うクラス public abstract class ASimulationAgent extends Agent{ 抽象クラスASimulationAgentはJADEのAgentクラスを継承している (参考:JavaAgentDEvelopmentFramework) public abstract void doWork();   抽象メソッドdoWork()は定義・呼び出し方だけ決めてある。中身は空っぽ。 …抽象メソッドは必ずオーバーライドしなければならない 実行用クラス。Thread実行にはrun()メソッドが中で必要 class WorkThread extends java.lang.Thread{ public void run(){ doWork(); } 継承とは?…サブクラスはスーパークラスの変数定義やメソッドなどを受け継ぐ。 抽象クラスASimulationAgent…具体的な記述を行わずに共通部分だけ設計して、詳細は各々のサンプルで

SampleSimulation1 抽象メソッドdoWork()をオーバーライドし,Hello Worldを出力させている オーバーライドとは… オーバーライドとはスーパークラスにおいて定義されているインスタンスメソッドを、サブクラス内で再定義することを言います。スーパークラスのメソッドを変更することはできないが、サブクラスに特化した機能を付与する必要がある場合などに使用します。 (参考:Javaの道,http://www.javaroad.jp/java_class8.htm,2013/12/4閲覧)

SampleSimulation2 ServiceFunction sf1 = new ServiceFunction(); ServiceFunction sf2 = new ServiceFunction(2000, 30); 型 変数名 を指定してインスタンス作成 コンストラクタは異なる引数をとれる (型を選択して右クリック→Open Declarationで中身確認) sf1.setBase(2000); sf1.setRange(50); 時刻2000,範囲50とセットする Javaオブジェクト指向でよくあるセッター

SampleSimulation2 for (int time = 2000; time <= 2050; time++) sf1.setValue(time, 100); 100を𝑡∈[2000,2050]でセット for (int time = sf2.getBase(); time <= sf2.getBase() + sf2.getRange(); time++) sf2.setValue(time, time); 時刻timeにデータtimeをセットする

データ出力/プロット System.out.println("\n -- printing sf2, using getValue()"); for (int time = sf2.getBase(); time <= sf2.getBase() + sf2.getRange(); time++) System.out.println(time + " -> " + sf2.getValue(time)); System.out.println("\n -- printing sf1, using print(), for the whole time range"); sf1.print(); System.out.println("\n -- printing sf2, using print(), between 2010 and 2020"); sf2.print(2010, 2020); System.out.println("\n -- printing sf2 in the short form"); System.out.println(sf2); sf2.plot("Y axis title", "sf2 for the whole time range"); sf2.plot(2010, 2020, "Y axis title", "sf2 between 2010 and 2020");

データ出力/プロット ServiceFunction sfSum = sf1.plus(sf2); System.out.println("\n -- printing sfSum = sf1 + sf2"); sfSum.print(); sf1.minus(sf1).plot("Value", "Difference between sf1 and sf1"); System.out.println("\nThe minimum of sf2 is : " + sf2.min()); System.out.println("The maximum of sf2 is : " + sf2.max()); System.out.println("The mean of sf2 is :" + sf2.mean()); System.out.println("The maximum of sf2 is reached in : " + sf2.tmax()); System.out.println("The minimum of sf2 is reached in : " + sf2.tmin()); System.out.println("The function sf2 reaches 2015 for the first time in : " + sf2.firstTimeIn(2000, 2015)); sf2.saveToFile("c:\\sf2.txt");

その他のSampleSimulation これらも同様に解釈していけば大丈夫