*

Objective-Cの第三歩 クラスとクラスメソッドを定義する

Swiftの事をひとまず置いておいてObjective-Cの入門編を書いているわけだが、前々回の”Hello, World!”表示前回のピュアなC言語としてObjective-Cを使ってしまう試みに続いて、今回はいよいよObjective-Cの”Objective”たる部分に侵入していく。WEB系言語の習得者にとっては第三歩目、そしてC言語習得者にとってはやっと第一歩目となる入門編である。

Objective-Cのクラスの書き方はかなり特殊

オブジェクト指向自体については、WEB系言語でも勿論その仕組みがあるはずなので、概念等については改めて説明しない。PHPでもJavaScriptでも、参考書のオブジェクト指向部分をあらかじめ通読されたし。で、それらの準モダンな言語のオブジェクト指向と、Objective-Cのオブジェクト指向部分については見た目からしてかなり違う。
そこで、書式にフォーカスして少しずつ解説していこうと思う。ということで、前回の1からxまで計算するC言語関数をクラスに移植して、クラスのクラスメソッドで計算させるという、クラス化の意味がそんなにない例から入っていく。つまり、今回の入門編を読むことによって、Xcodeでのクラスの作成方法クラスとクラスメソッド定義のための書式クラスのメソッドの引数を伴った呼び出し方のみが理解できるということ。

Xcodeで新規クラスを作成

前回と同じく、コマンドラインアプリケーションを新規プロジェクトとして作成する。続いて、FileメニューのNewからFile…を選ぶ。ダイアログが出るので、OSX CocoaのObjective-C classを選択して、クラス名はsummaryとする。

Objective-C classを選択

Objective-C classを選択

すると、左側のファイルツリーにsummary.hというファイルと、summary.mというファイルが追加されたはずである。この.hと.mの組み合わせがセットになる。
.hと.mそれぞれの役割については、こないだのエントリで説明したように.hがプロトタイプ宣言みたいなのをまとめた宣言部で、.mが実装部ということになる。

Objective-Cクラスの宣言と実装

宣言部のsummary.hを見てほしい。コメント以外の部分はこのように書いてあるはずだ。

#import <Foundation/Foundation.h>
 
@interface summary : NSObject
 
@end

#importの役割については説明済み。その後に出てくる、@interfaceというもの。これはC言語にも出てこない特殊な表現である。
“@”ではじまる命令は、コンパイラディレクティブといい、Objective-Cのコンパイラを制御する命令である。以降ちょくちょく登場するが、ピュアなC言語に対してあえて目立ち易くした建て増し部分として認識しておこう。
さて、@interfaceというコンパイラディレクティブが何かというと、@endまでのブロックでクラスのインターフェイスを宣言しますよという命令である。上記の例では、NSObjectクラスを継承したsummaryというクラスのインターフェイスを宣言している。NSObjectというのはObjective-Cの基底クラスで、全てのオブジェクトは少なくともこれを継承していることが望ましい。勿論、より具体的なNSObjectの子孫クラスを継承することも可能であるが、とりあえず余計な拡張が必要無かったり、何を継承するのが最適か分からなかったりする場合にはNSObjectを継承しておけば良い。継承は、クラス名の横に”:”をつけて、継承元クラスを続ける。
Objective-Cの中身が空なので、ここで今回使用するクラスメソッド、Calculateを宣言しておこう。

#import <Foundation/Foundation.h>
 
@interface summary : NSObject
 
+ (int)Calculate:(int)x;
 
@end

クラスメソッドの宣言は、”+”記号を使う。メソッド名の左側括弧には返り値の型、右側には引数がある場合”:”を挟んで括弧に入った型と引数名を続ける。
続いて、クラスの実装部である。最初の状態においては、summary.mのコードは以下のようになっている。

#import "summary.h"
 
@implementation summary
 
@end

冒頭の#importで、先程記述したsummary.hを読み込んでいる。コンパイラディレクティブの@implementationと@endの間に、クラスメソッドCalculateの実装コードを記述すれば良いわけである。

#import "summary.h"
 
@implementation summary
 
+ (int)Calculate:(int)x{
    int i,sum=0;
    for(i=x;i>=1;i--){
        sum += i;
    }
    return sum;
}
 
@end

というわけで、実装したのが上のコード。宣言部と同じくクラスメソッドなので”+”から始まる。中身は通常の関数定義と同じ。今回はプロパティの宣言も無く、インスタンスプロパティ・メソッドも無かったためこれで充分。

Objective-Cクラスのメソッド呼び出し

最後に、今回作成したクラスsummaryとクラスメソッドCalculateを呼び出してみよう。main.mの記述を以下のようにする。

#import <Foundation/Foundation.h>
#import "summary.h"
 
int main(int argc, const char * argv[])
{
 
    @autoreleasepool {
 
        // insert code here...
        int x,sum;
        printf("数字を何か入力して下さい\n");
        scanf("%d",&x);
        sum = [summary Calculate:x];
        printf("1から%dまでの和は%dです",x,sum);      
    }
    return 0;
}

#importでは、Foundationに加えて忘れずにsummary.hを読み込む。クラスメソッドの呼び出しを行っているのは、[summary Calculate:x]の部分。メソッド名の呼び出しは[クラス名 メソッド名]という書き方で行われる。引数に値を代入して呼び出す場合にはメソッド名の後に”:”で続ける。

以上で、C言語で書いたsummary関数をクラスを使って書き直すチュートリアルが終わり。さてさて次回は、プロパティの宣言やインスタンスメソッドの実装を行い、summaryクラスをよりクラスらしいクラスへと膨らませていくとしよう。

関連記事

アイコンは未指定なので不格好

Objective-CでiOSアプリの第一歩 新規プロジェクトで生成されるコードの解説

しけたコンソールアプリばかり作っていたけれど、ようやっとiOSプログラミングに入るとしよう。急がない

記事を読む

クラスを継承して作成

Objective-Cの第五歩 クラスの継承とメソッドのオーバーライド

前回Objective-Cの第四歩では、等差数列の和を計算するプログラムGaussTesterの作成

記事を読む

GaussTester実行結果

Objective-Cの第四歩 インスタンスプロパティ・メソッドを定義する

Objective-Cの第三歩では、ピュアC言語からのObjective-Cのクラス入門ということで

記事を読む

no image

Objective-Cでは何故.hファイルと.mファイルを作成させられるのか

前回説明したように、Objective-Cでプログラムを書く際には、別にC言語そのもののつもりで書い

記事を読む

no image

iOSプログラミング入門書では、まず最初のHello, World!すら難しい

Hello, World!が第一歩 新しくプログラミング言語を習得するときに、「この言語でのH

記事を読む

無理矢理表示したHello, World!

Objective-CでiOSアプリの第二歩 とにかく立ち上がればというレベルのHello, World!アプリを作成

前回はiOSアプリ作成の第一歩として、Empty Applicationを選択した際に書いてあるコー

記事を読む

no image

Objective-Cの第一歩(仕切り直し)

前回Objective-Cの第一歩として挙げたコードであるが、綺麗さっぱり忘れてほしい。というのは、

記事を読む

画面の回転に対応したプログラム

Objective-CでiOSアプリの第三歩 UIViewControllerの必要性を理解する

前回はUIViewControllerの存在を無視して"Hello, World!"アプリケーション

記事を読む

no image

Xcode 6の正式リリースまでに、Objective-Cでアプリを一つ仕上げる!

Swiftに早速触れてみたい!でもXcode 6がベータ版の間は、有料(7800円/年)のDevel

記事を読む

no image

Objective-Cの第六歩 プロトコルの宣言と実装

Objective-Cの第五歩では、親クラスの継承とメソッドのオーバーライドについて説明した。そこま

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

no image
Swiftが今年後半を目処にオープンソース化!そしてSwift 2

一時期iOSとOSXの開発からは離れていたけれど、久しぶりの大きなニュ

RunSwiftスクショ
WEB上で動作するSwiftの疑似実行環境 RunSwift・SwiftStub

Swiftの実行環境はMac+Xcode。ウワサのSwift言語に興味

no image
待望のRetina iMacが登場! iOSアプリの開発が楽になる?

10月16日(日本時間17日)に行われたAppleの新製品発表会。大方

no image
Swiftの参考書 電子書籍以外にもボツボツと登場

書店の棚に並んでいるSwift本を見て、正式リリースを実感! 何しろ

no image
Swift1.0を含むXcode6のGMが公開

大体2週間の間隔を空けてbetaのヴァージョンナンバーが上がり続けてい

→もっと見る

PAGE TOP ↑