ソフトウェア開発方法論2

Similar documents
Assignment_.java /////////////////////////////////////////////////////////////////////// // 課題 星の画像がマウスカーソルを追従するコードを作成しなさい 次 ///////////////////

PowerPoint Presentation

次の演習課題(1),(2)のプログラムを完成させよ

Microsoft PowerPoint prog1_doc2x.pptx

Java言語 第1回

問1

Java言語 第1回

r2.dvi

PowerPoint プレゼンテーション

Microsoft PowerPoint prog1_doc2.pptx

r14.dvi

PowerPoint プレゼンテーション

<4D F736F F F696E74202D AC C8899E D834F E >

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

ガイダンス

PowerPoint プレゼンテーション

Java言語 第1回

Object MenuComponent MenuBar MenuItem Menu CheckboxMenuItem

< F2D B825082CC96E291E82E6A7464>

ガイダンス

Microsoft PowerPoint - prog11.ppt

< F2D E E6A7464>

ガイダンス

< F2D89BA8EE882C E6A7464>

GUIプログラムⅣ

I. (i) Foo public (A). javac Foo.java java Foo.class (C). javac Foo java Foo (ii)? (B). javac Foo.java java Foo (D). javac Foo java Foo.class (A). Jav

r3.dvi

Java演習(9) -- クラスとメソッド --

10K pdf

PowerPoint プレゼンテーション

以下に java.awt.graphics クラスの主なメソッドを示す (Graphics クラスの ) メソッド drawline(int x1, int y1, int x2, int y2) drawrect(int x, int y, int width, int height) fillr

< F2D82518E9F8AD CC834F CC8CFC82AB82C68D4C>

Microsoft PowerPoint - lec06 [互換モード]

GUIプログラムⅤ

r3.dvi

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

Java言語 第1回

< F2D834F838C A815B A CC>

< F2D F B834E2E6A7464>

< F2D B838A835882CC8CF68EAE2E6A7464>

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

教材ドットコムオリジナル教材 0から始めるiアプリ (4) 0 から始める i アプリ (4) i アプリをプログラミングする際に必要なのは Java というプログラミング言語の基礎知識です 独自の命令や駆使してプログラミングをするわけですが Java というベースになっている言語を知らないでプログ

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列

< F2D82518E9F8AD CC95BD8D7388DA93AE2E6A7464>

Microsoft PowerPoint - swing3.ppt

I 4 p.2 4 GUI java.awt.event.* import /* 1 */ import mouseclicked MouseListener implement /* 2 */ init addmouselistener(this) this /* 3 */ this mousec

< F2D A839382CC906A2E6A7464>

< F2D82518CC282CC D2E6A7464>

Microsoft PowerPoint - OOP.pptx

ガイダンス

< F2D82B682E182F182AF82F12E6A7464>

PowerPoint プレゼンテーション

< F2D92DE82E8914B82CC977088D32E6A7464>

Java 2 - Lesson01

< F2D A838B838D96402E6A7464>

ガイダンス

Microsoft PowerPoint - OOP.pptx

2

Prog2_11th

Microsoft PowerPoint - prog11.ppt

Java 2 - Lesson01

Microsoft PowerPoint - prog10.ppt

II Java :30 12:00 I. I IV II. III. IV. ( a d) V. : this==null, T == N A ActionListener C class D actionperformed G getsource I implements K

// ステージを設定します stage.setscene(scene); stage.settitle(" キャンバス "); // ステージを表示します stage.show(); public static void main(string[] args) launch(args); キャンバス

< F2D8EA CE909482CC92EA82852E6A7464>

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

PowerPoint Presentation

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

< F2D825282CC947B909482CC A815B83682E6A>

HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファ

シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

Microsoft Word 年度情報コミュニケーション実験II(Ver0.9)c.docx


Java学習教材

問題1 以下に示すプログラムは、次の処理をするプログラムである

Microsoft PowerPoint - prog10.ppt

JavaプログラミングⅠ

Graphical User Interface 描画する

Prog2_12th

Javaプログラムの実行手順

Prog2_9th

r4.dvi

IE6 2 BMI chapter1 Java 6 chapter2 Java 7 chapter3 for if 8 chapter4 : BMI 9 chapter5 Java GUI 10 chapter6 11 chapter7 BMI 12 chap

JAVA入門

JAVA入門

ÿþ˜u#u·0¹0Æ0à0

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

:30 12:00 I. I VII II. III. IV. ( a d) V. VI : this==null, T == N A ActionListener A addactionlistener C class D actionperforme

pp2018-pp4base

Microsoft PowerPoint - swing2.ppt

IT プロジェクト

Animals サンプル Step3 張り付けた動物の上をクリックすると それぞれの鳴き声で鳴く その鳴く間 一定時間 ( ここでは 1 秒間 ) 画像が別のものに変わる <アニメーションの基礎 : タイマーについて> アニメーションは アプリケーションが指定する間 一定間隔でどんどん画像をおきかえ

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

Java演習(4) -- 変数と型 --

Microsoft PowerPoint pptx

表示の更新もそういた作業のひとつに当たる スレッドの使用アニメーション アニメーションやシミュレーションなどは画面の更新が一定のタイミングで行われていく この連続した画面の更新をスレッドを利用して行う しかし paint() メソッドを直接呼び出して表示を更新することはできない その理由

2008 e-learning T050050

プログラミング基礎I(再)

Prog1_12th

Transcription:

ソフトウェア開発方法論 2 情報システム工学特別講義 ( 渕田 )

開発依頼 研究法人 AA 研究所では 構造立体研究の一部として 以下のような図形管理を行うシステムを発注する 名称 : 図形管理システム 機能 : 以下の機能を持つ 1. 画面の何もないところをクリックすることで 図形を画面上に配置することができる 配置できる図形は円 三角 四角の3つを選択でき 大きさは決まっている 2. 図形の色は 赤 青 緑 などいくつかの中から選択できる 3. マウスクリックで図形を選択することができる 4. 図形を選択した状態で色を選ぶと その図形の色が変わる 5. 図形をダブルクリックすると図形から線分が引かれ ラバーバンドでマウスに追従する この状態で別な図形をクリックすることで2つの図形を線分で接続することができる 6. 線分をクリックすると選択することができる 7. マウスドラッグで各図形を移動することができ 接続線も同時に移動する 8. DELキーを押すことで 選択されている図形や線分を削除することができる 9. 作成した図形データをファイルに保存することができる 10. 保存データを読み込むことができる

開発工程 ( 上流工程 ) 要求分析 ユースケース図 スースケース記述 シナリオ システム分析 オブジェクト シーケンス図 初期クラス図 設計 クラス メソッドの名称 詳細シーケンス図 詳細クラス図

要求分析 何を作るのか?

ユースケース図 システムの内と外を明確に システムの持つ機能を書く

スパイラル開発 すべての機能を詰め込まない 小さい仕様から始める 開発工程を繰り返して大きくしていく ( 破壊と創造 ) 小さくした仕様

ユースケース記述 (1) 名称能動アクターメインフロー例外フロー 起動する ユーザ 1. ユーザが図形管理システムを起動する 2. メインウィンドウが作られる 3. 制御パネルが作られる 4. 制御パネルには図形選択者と色選択者が置かれる 5. 描画キャンバスが作られる 6. 図形保持者が作られる 7. 図形追加者が作られる 8. ウィンドウに制御パネルと描画キャンバスが置かれる 9. ウィンドウが表示される 例外は発生しない

ユースケース記述 (2) 名称能動アクターメインフロー例外フロー 終了する ユーザ 1. ユーザがウィンドウの閉じるボタンを押す 2. システムが終了する 例外は発生しない

ユースケース記述 (3) 名称能動アクターメインフロー例外フロー 図形を追加する ユーザ 1. ユーザがキャンバスでクリックする 2. 図形追加者に通知が行く 3. 図形追加者は図形選択者に現在の図形を尋ねる 4. 図形追加者は色選択者に現在の色を尋ねる 5. 図形追加者は新しい図形を生成し 図形保持者に渡す 6. 図形保持者は渡された図形を保持し 描画キャンバスを再描画する 例外は発生しない

シナリオ 起動する 太朗君は図形を管理するために図形管理システムをダブルクリックした メインウィンドウが生成された さらに制御パネルが生成され その上に図形選択者と色選択者が置かれた 描画キャンバスも生成された 図形追加者と図形保持者が生成された 制御パネルと描画キャンバスがウィンドウにおかれ ウィンドウが表示された 終了する 太朗君は図形管理システムのウィンドウの閉じるボタンを押した 閉じるボタンが押されたことがウィンドウに通知され システムが終了した 図形を追加する 太朗君は描画キャンバス上でマウスをクリックした クリックしたことが図形追加者に通知された 図形追加者は図形選択者に現在の図形を尋ね 次に色選択者に現在の色を尋ね その図形を生成した 図形追加者は図形保持者に生成した図形を渡した 図形保持者は渡された図形を保持し 描画キャンバスを再描画した

システム分析 問題領域から解決領域への橋渡し

オブジェクト抽出 (1) 起動する 太朗君は図形を管理するために図形管理システムをダブルクリックした メインウィンドウが生成された さらに制御パネルが生成され その上に図形選択者と色選択者が置かれた 描画キャンバスも生成された 図形追加者と図形保持者が生成された 制御パネルと描画キャンバスがウィンドウにおかれ ウィンドウが表示された 終了する 太朗君は図形管理システムのウィンドウの閉じるボタンを押した 閉じるボタンが押されたことがウィンドウに通知され システムが終了した 図形を追加する 太朗君は描画キャンバス上でマウスをクリックした クリックしたことが図形追加者に通知された 図形追加者は図形選択者に現在の図形を尋ねたら円だった 次に色選択者に現在の色を尋ねたら赤だった そこで赤い円を生成した 図形追加者は図形保持者に生成した円を渡した 図形保持者は渡された円を保持し 描画キャンバスを再描画した ( 三角と四角の場合も同様 )

オブジェクト抽出 (2) 以下のオブジェクトを抽出した 図形 円 三角 四角 図形管理システム (= メインウィンドウ ) 制御パネル 図形選択者 色選択者 描画キャンバス 図形追加者 図形保持者

シーケンス図の作成 (1) 起動する

シーケンス図の作成 (2) 終了する

シーケンス図の作成 (3) 図形を追加する

初期クラス図の作成 (1) シーケンス図から どのオブジェクトからどのオブジェクトにメッセージが飛ぶかがわかる クラスの決定 多くはオブジェクト = クラス 基底クラスを生成したほうが良い場合がある 円 三角 四角はいずれも図形である 図形 クラスから 円 三角 四角 が派生する

初期クラス図の作成 (2) 保持するわけではないが 間接的に使う

設計 どのように作るのか?

クラス名の決定 図形管理システム :ShapeManagementSystem 制御パネル :ControlPanel 図形選択者 :ShapeSelector 色選択者 :ColorSelector 描画キャンバス :DrawingCanvas 図形追加者 :ShapeAdder 図形保持者 :ShapeHolder 図形 :Shape 円 :Circle 三角 :Triangle 四角 :Rectangle

クラス図の精密化 Java 標準クラスを入れる

詳細シーケンス図の作成 (1) 生成する順序が重要後で使うものを先に生成するどれにどれが必要かは クラス図の関連性から判断できる

詳細シーケンス図の作成 (2)

詳細シーケンス図の作成 (3)

詳細クラス図の作成

スケルトンの作成 詳細クラス図からソースコードのスケルトン ( 骨組み ) を作成できる import java.util.*; import java.awt.*; public class ShapeHolder extends ArrayList<Shape> { public void draw(graphics g){ Shape.java import java.awt.*; public abstract class Shape { protected Color color; protected int px,py; public Shape(Color c,int x,int y){ public abstract void draw(graphics g){ ShapeHolder.java import java.awt.*; public class Triangle extends Shape { public static final int code; public Triangle(Color c,int x,int y); public void draw(graphics g){ Triangle.java

その後のプロセス 実装 ( 後述の例を参照 ) テスト プロトタイプ 1 完成 スパイラル 2 へ 少し拡大した仕様を策定 要求分析 システム分析 設計 実装 テスト プロトタイプ 2 完成 スパイラル 3 へ

課題 スパイラル 2 以降を行え 各スパイラルの仕様として何を入れるかは各自で ただし 最低でも 1 つの機能は増やすこと 上流工程のプロダクトをワードに添付して提出すること 最低でもスパイラル 2 までは行うこと スパイラル 3 以降もあれば加点する 提出方法 作成したワード文書をメールで渕田まで送付すること fuchida@ibe.kagoshima-u.ac.jp 提出期限 :2017 年 7 月 31 日 ( 月 ) 24:00

終了

プロトタイプ 1 の実装コード例 ShapeManagementSystem.java ControlPanel.java ShapeSelector.java ColorSelector.java DrawingCanvas.java ShapeAdder.java ShapeHolder.java Shape.java Circle.java Triangle.java Rectangle.java

import java.awt.*; import java.awt.event.*; public class ShapeManagementSystem extends Frame implements WindowListener { // 生成する public ShapeManagementSystem(){ super( 図形管理システム [ プロトタイプ 1]"); setsize(500,500); setlocation(100,30); ControlPanel cp=new ControlPanel(); ShapeSelector ss=cp.getshapeselector(); ColorSelector cs=cp.getcolorselector(); ShapeHolder sh=new ShapeHolder(); ShapeAdder sa=new ShapeAdder(ss,cs,sh); DrawingCanvas dc=new DrawingCanvas(sa,sh); add(cp,borderlayout.north); add(dc); addwindowlistener(this); // ウィンドウリスナー public void windowactivated(windowevent ev){ public void windowdeactivated(windowevent ev){ public void windowopened(windowevent ev){ public void windowclosing(windowevent ev){ System.exit(0); public void windowclosed(windowevent ev){ public void windowiconified(windowevent ev){ public void windowdeiconified(windowevent ev){ // メイン public static void main(string[] args){ (new ShapeManagementSystem()).setVisible(true);

import java.awt.*; public class ControlPanel extends Panel { private ShapeSelector ss; private ColorSelector cs; // 生成する public ControlPanel(){ add(ss=new ShapeSelector()); add(cs=new ColorSelector()); // 図形選択者を得る public ShapeSelector getshapeselector(){ return ss; import java.awt.*; public abstract class Shape { protected Color color; protected int px,py; // 生成 public Shape(Color c,int x,int y){ color=c; px=x; py=y; // 描画する public abstract void draw(graphics g); // 色選択者を得る public ColorSelector getcolorselector(){ return cs; import java.awt.*; public class ShapeSelector extends Choice { // 生成する public ShapeSelector(){ add(" 円 "); add(" 三角 "); add(" 四角 "); // 形状を問い合わせる public int queryshape(){ return getselectedindex(); import java.awt.*; import java.util.*; public class ShapeHolder extends ArrayList<Shape> { // すべての図形を描画する public void draw(graphics g){ for(shape s:this) s.draw(g);

import java.awt.*; import java.awt.event.*; public class DrawingCanvas extends Canvas implements MouseListener { private ShapeAdder adder; private ShapeHolder holder; // 生成する public DrawingCanvas(ShapeAdder sa,shapeholder sh){ adder=sa; holder=sh; addmouselistener(this); // 描画する public void paint(graphics g){ holder.draw(g); // マウスリスナー public void mousepressed(mouseevent ev){ public void mousereleased(mouseevent ev){ public void mouseclicked(mouseevent ev){ adder.addshape(ev.getx(),ev.gety()); repaint(); public void mouseentered(mouseevent ev){ public void mouseexited(mouseevent ev){

import java.awt.*; public class ColorSelector extends Choice { private static String[] color_names={ " 赤 "," 緑 "," 青 "," 黒 "," ピンク "," シアン "," マゼンタ " ; private static Color[] colors={ Color.red,Color.green,Color.blue,Color.black,Color.pink,Color.cyan,Color.magenta ; // 生成する public ColorSelector(){ for(int i=0;i<color_names.length;i++) add(color_names[i]); // 色を問い合わせる public Color querycolor(){ String it=getselecteditem(); for(int i=0;i<colors.length;i++){ if(it.equals(color_names[i])) return colors[i]; return Color.black;

import java.awt.*; public class ShapeAdder { private ShapeSelector sel_shape; private ColorSelector sel_color; private ShapeHolder holder; // 生成する public ShapeAdder(ShapeSelector ss,colorselector cs,shapeholder sh){ sel_shape=ss; sel_color=cs; holder=sh; // 図形の追加 public void addshape(int x,int y){ int s=sel_shape.queryshape(); Color c=sel_color.querycolor(); Shape sh=null; switch(s){ case Circle.code: sh=new Circle(c,x,y); break; case Triangle.code: sh=new Triangle(c,x,y); break; case Rectangle.code: sh=new Rectangle(c,x,y); break; holder.add(sh);

import java.awt.*; public class Circle extends Shape { public static final int code=0; // 生成する public Circle(Color c,int x,int y){ super(c,x,y); import java.awt.*; public class Triangle extends Shape { public static final int code=1; // 生成する public Triangle(Color c,int x,int y){ super(c,x,y); // 描画する public void draw(graphics g){ g.setcolor(color); g.filloval(px-20,py-20,40,40); import java.awt.*; public class Rectangle extends Shape { public static final int code=2; // 生成する public Rectangle(Color c,int x,int y){ super(c,x,y); // 描画する public void draw(graphics g){ g.setcolor(color); g.fillrect(px-20,py-20,40,40); // 描画する public void draw(graphics g){ int[] vx={ px, px-20,px+20 ; int[] vy={ py-20,py+20,py+20 ; g.setcolor(color); g.fillpolygon(vx,vy,3);