ストップウォッチクラスを設計しましょう。う〜んモノづくりの楽しみ〜
今日はストップウォッチを設計してみます!
手元にストップウォッチがある人は、手に取ってみて。
わーい
ストップウォッチの機能は、時間を計測することですねー。
ふむふむ
操作方法は、start/stopボタンと、resetボタンが基本かしらね。
なるほど…
そこでストップウォッチクラスにはどんなメソッドがいるのか、考えてみましょう。
- (void)startStop;
- (void)reset;
まず上の2つのボタンを押すという操作に対応するメソッドですねー。
それから、時間を読み出すメソッドがいりますね。
- (NSTimeInterval)second;
NSTimeIntervalの正体は、倍精度実数(double)です。
メソッドは、以上の3つでいきましょう。
上のふたつ…
なんか画像あったほうがいいんでないすかね…。
うーーん・・
ストップウォッチの画像的な…
あ、ちょっと待ってくださいね。

デカッ
これに書き込んだらいいでしょうか・・
のほうがビジュアル化しやすいのでは…

これでどうかしら…
わかりやすいっ!
で、実際の使い方はですね、まず
StopWatch *watch = [[StopWatch alloc] init];
とインスタンスを作っておいてから、
これは前回やったやつですね先生!
3つの処理が入れ子になっているというアレですね
そうでやんす!
インスタンスを作るときはこうするという公式だと思っておいてもいいでしょう。
わかりましたっ!
[watch startStop];
次にこうすると、ストップウォッチがスタート。
watchクラスのstartStopメソッドをキックしてるってことですか?
その通りですー
NSTimeInterval s = [watch second];
次にこれで値を取得。
NSTimeInterval型の変数Sにwatchクラスのsecondメソッドの返り値を入れると?
まさにその通りですー
やったー!
で、次にこうやってストップウォッチを止める。
[watch startStop];
で、値をリセット。
[watch reset];
このストップウォッチが不要になったら、
[watch release];
で、解放。以上ですねー。
ほほほぅ
ということで、ストップウォッチクラスのヘッダファイルは、こんな感じになります
#import <Foundation/Foundation.h>
@interface StopWatch : NSObject {
NSTimeInterval second;
}
@property(readonly, assign) NSTimeInterval second;
- (void)startStop;
- (void)reset;
@end
@propertyってまだ説明してませんでしたっけ・・
プロパティ…。
説明されてませんね…。
これは実装の部分ですよね?
えっと、.hファイルのほうです
前に、インスタンス変数は外部には基本的に秘密だと説明しましたよね。
はい
で、利用者に許す部分だけ、特別にアクセサメソッドを書くのでした。
でもアクセサメソッドを書くのは退屈なものです。
そこで@propertyなんちゃらという宣言で、コードを量を減らせるしくみが提供されたというわけです。
と同時に、これまではインスタンス変数のうち、どれが秘密でどれが公開なのか、ぱっと見わからなかったところが
@property宣言があると、外部からアクセスできるんだなと明らかなので、わかりやすくなりました。
iPhone開発のチュートリアルなどではこの書き方を積極的にすすめているようなので
あえて書いてみましたよ。
従来の書き方では、
@property(readonly, assign) NSTimeInterval second;
- (NSTimeInterval)second;
この2つが同じ働きです。
なんか@propertyのほうが文字が増えとるやないか〜い!
readonlyとかassignとか細かいし・・・。
ちなみに外部から書き込みも可にする場合は、
@property(readwrite, assign) NSTimeInterval second;
- (NSTimeInterval)second;
- (void)setSecond:(NSTimeInterval)newValue;
に相当します。これだと省力化できてるかな。
ふむふむ
代替されているのですね
そうなんです
で、こいつらとペアになって、.mファイルのほうでも実装が減らせちゃいますね
さて仕様が決まったので、次はいよいよ実装ですが!
また次のテーマでやりましょう〜
!
次はプロジェクトを作るところから全部やるのですか?
うーん、プロジェクトは、次の次にしましょうかね・・・
ま、まずは概要からってことですね!
次回にストップウォッチクラスの実装(.mファイル)を作って、
その次にプロジェクトにいきましょうかね
リョウカイです!
ではまた次回に!