[ Java Project Exampleページへ戻る ]

設計

時刻プログラムの設計を行う。


コンテンツ


各イテレーションにおける設計

イテレーション No.1

パッケージ図

クラス図

まずは、Clockクラスを定義した。

Clock
-hour: int
-minute: int
-second: int
+getHour(): int
+setHour(hour:int):void
+getMinute(): int
+setMinute(minute:int):void
+getSecond(): int
+setSecond(second: int):void

メソッドについては、「契約による設計」に基づき、事前条件、事後条件、例外を明確にした。

メソッド 事前条件 事後条件 不変条件
setHour 引数が0-23である 引数の値でhourフィールドを更新 -
setMinute 引数が0-59である 引数の値でminuteフィールドを更新 -
setSecond 引数が0-59である 引数の値でsecondフィールドを更新 -

つぎに、Clockクラスを利用するクライアントクラスとの関連を設計した。


イテレーション No.2

シーケンス図

クラス図

時刻更新機能を追加したクラス図を設計した。

今回追加するメソッド(公開メソッド)を明確にした。

メソッド 事前条件
[例外]
事後条件 不変条件
setInterval
引数が0より大きいこと
[ IllegalArgumentException ]
引数の値でintervalフィールドを更新 時分秒は維持
start
stop状態であること
[ IllegalStateException ]
start状態になる 時分秒は維持
intervalが0より大きいこと
[ IllegalStateException ]
stop
start状態であること
[ IllegalStateException ]
stop状態になる 時分秒は維持

最終的なClockクラスの詳細は以下のように定義された。

Clock
-hour: int
-minute: int
-second: int
-interval: int
-isStart: boolean
-timer: Timer
-task: TimerTask
-MIN_HOUR: int
-MAX_HOUR: int
-MIN_MINUTE: int
-MAX_MINUTE: int
-MIN_SECOND: int
-MAX_SECOND: int
-MIN_INTERVAL: int
-DEFAULT_HOUR: int
-DEFAULT_MINUTE: int
-DEFAULT_SECOND: int
-DEFAULT_INTERVAL: int
+getHour(): int
+setHour(hour:int):void
+getMinute(): int
+setMinute(minute:int):void
+getSecond(): int
+setSecond(second: int):void]
+getInterval(): int
+setInterval(interval: int):void
+start():void
+stop():void
+isStart(): boolean
+toString(): String
-setStart(start:boolean): void
-setTime(hour:int,minute:int,second:int): void
-initTimer(): void
-startUpdate(): void
-stopUpdate(): void
-checkHourCondition(hour:int): boolean
-checkMinuteCondition(minute:int): boolean
-checkSecondCondition(second:int): boolean
-checkIntervalCondition(interval:int): boolean

状態遷移図

時刻更新の実現方式の設計

時刻更新の実現方式比較表
項目 Thread.sleep java.util.Timer javax.swing.Timer 備考
周期実行 -
処理遅延時の補正 - -
開始・停止処理 - -
ヘッドレス環境での動作 -
総合評価 1 3 2

3案の比較検討の結果、java.util.Timerを採用とする。


This page is written by Toru TAKAHASHI.(torutk@02.246.ne.jp)