iOSアプリ開発初心者のためのオブジェクト指向の基本iOS SDKで始めるObjective-C入門(6)(2/4 ページ)

» 2014年03月17日 18時00分 公開
[平井祐樹,クラスメソッド]

「属性」(メンバー変数)を定義してみよう

 Personクラスに「属性」(状態)を定義しましょう。

オブジェクトの「属性」(状態)と「操作」(振る舞い)(記事「オブジェクトに必要な4つの特性とは?」より引用)

 ここでいう「属性」のことをObjective-Cでは、「メンバー変数」といいます。ここでは、名前と年齢を定義します。Person.hを開き、以下のように記述します。

  1. #import <Foundation/Foundation.h>
  2. @interface Person : NSObject
  3. {
  4. // 名前
  5. NSString *_name;
  6. // 年齢
  7. NSInteger _age;
  8. }
  9. @end
リスト1 Person.h

 説明するまでもないですが、変数「_name」は名前、変数「_age」は年齢を表しています。名前は文字列ですからNSString型、年齢は整数ですからNSInteger型です。なぜ「_」が付いているかについては、後で説明しますので、今は気にしないでください。

 これでメンバー変数の定義は完了です。

「操作」(メソッド)を定義してみよう

 Objective-Cでは、「操作」(振る舞い)のことを「メソッド」と呼びます。Personクラスにメソッドを定義しましょう。ここでは、自分の名前と年齢を設定・取得するメソッドを定義します。Person.hとPerson.mを以下のように記述します。

  1. #import <Foundation/Foundation.h>
  2. @interface Person : NSObject
  3. {
  4. // 名前
  5. NSString *_name;
  6. // 年齢
  7. NSInteger _age;
  8. }
  9. // 名前を取得する
  10. - (NSString *)name;
  11. // 名前を設定する
  12. - (void)setName:(NSString *)name;
  13. // 年齢を取得する
  14. - (NSInteger)age;
  15. // 年齢を設定する
  16. - (void)setAge:(NSInteger)age;
  17. @end
リスト2 Person.h
  1. #import "Person.h"
  2. @implementation Person
  3. // 名前を取得する
  4. - (NSString *)name
  5. {
  6. return _name;
  7. }
  8. // 名前を設定する
  9. - (void)setName:(NSString *)name
  10. {
  11. _name = name;
  12. }
  13. // 年齢を取得する
  14. - (NSInteger)age
  15. {
  16. return _age;
  17. }
  18. // 年齢を設定する
  19. - (void)setAge:(NSInteger)age
  20. {
  21. _age = age;
  22. }
  23. @end
リスト3 Person.m

 これでメソッドの定義は完了です。

作成したクラスを使って「アイデンティティ」を表現する

 それでは、このクラスを使ってみましょう。ViewController.mを開き、以下のように書き換えます。

  1. #import "ViewController.h"
  2. // Personクラスをインポートする
  3. #import "Person.h"
  4. @implementation ViewController
  5. - (void)viewDidLoad
  6. {
  7. [super viewDidLoad];
  8. // Personクラスのインスタンスを生成する
  9. Person *yuki = [[Person alloc] init];
  10. // 名前を設定する
  11. [yuki setName:@"平井祐樹"];
  12. // 年齢を設定する
  13. [yuki setAge:28];
  14. // 名前と年齢をコンソールに表示する
  15. NSLog(@"こんにちは、私の名前は%@です。年齢は%d歳です。", [yuki name], [yuki age]);
  16. }
  17. @end
リスト4 ViewController.m

 実行すると、コンソールに下記のように表示されます。

 実は、ここでオブジェクトの4つの特性の1つである「アイデンティティ」が表現されていました。13行目の「Person *person = [[Person alloc] init];」です。

 このプログラムは「メモリに領域を確保して、初期化したPersonクラスのインスタンスを保持する」ということを行っています。これにより、オブジェクトは「メモリ上のアドレス」というアイデンティティを得ることができたのです。

 また、16行目に[yuki setName:@"平井祐樹"]、22行目に[yuki name]とあります。このことを「ViewControllerクラスのインスタンスからPersonのインスタンスにメッセージを送信する」と表現します。

「関係」を定義しよう

 オブジェクトの4つの特性の最後の1つである「関係」を定義してみましょう。

オブジェクトの関係(記事「オブジェクトに必要な4つの特性とは?」より引用)

 ここでは、Personクラスに父親を表すメンバー変数「father」を追加します。父親は当然人間ですから、fatherはPersonクラスです。

 Person.hとPerson.mを以下のように変更します。

  1. #import <Foundation/Foundation.h>
  2. @interface Person : NSObject
  3. {
  4. // 名前
  5. NSString *_name;
  6. // 年齢
  7. NSInteger _age;
  8. // 父親
  9. Person *_father;
  10. }
  11. // 名前を取得する
  12. - (NSString *)name;
  13. // 名前を設定する
  14. - (void)setName:(NSString *)name;
  15. // 年齢を取得する
  16. - (NSInteger)age;
  17. // 年齢を設定する
  18. - (void)setAge:(NSInteger)age;
  19. // 父親を取得する
  20. - (Person *)father;
  21. // 父親を設定する
  22. - (void)setFather:(Person *)father;
  23. @end
リスト5 Person.h
  1. #import "Person.h"
  2. @implementation Person
  3. // 名前を取得する
  4. - (NSString *)name
  5. {
  6. return _name;
  7. }
  8. // 名前を設定する
  9. - (void)setName:(NSString *)name
  10. {
  11. _name = name;
  12. }
  13. // 年齢を取得する
  14. - (NSInteger)age
  15. {
  16. return _age;
  17. }
  18. // 年齢を設定する
  19. - (void)setAge:(NSInteger)age
  20. {
  21. _age = age;
  22. }
  23. // 父親を取得する
  24. - (Person *)father
  25. {
  26. return _father;
  27. }
  28. // 父親を設定する
  29. - (void)setFather:(Person *)father
  30. {
  31. _father = father;
  32. }
  33. @end
リスト6 Person.m

 最後にViewController.mを以下のように変更します。

  1. #import "ViewController.h"
  2. // Personクラスをインポートする
  3. #import "Person.h"
  4. @implementation ViewController
  5. - (void)viewDidLoad
  6. {
  7. [super viewDidLoad];
  8. // Personクラスのインスタンスを生成する
  9. Person * yuki = [[Person alloc] init];
  10. // 名前を設定する
  11. [yuki setName:@"平井祐樹"];
  12. // 年齢を設定する
  13. [yuki setAge:28];
  14. // 父親インスタンスを作成する
  15. Person *father = [[Person alloc] init];
  16. // 名前を設定する
  17. [father setName:@"平井太郎"];
  18. // 年齢を設定する
  19. [father setAge:56];
  20. // fatherインスタンスをyukiインスタンスに設定する
  21. [yuki setFather:father];
  22. // 名前と年齢と父親の名前をコンソールに表示する
  23. NSLog(@"こんにちは、私の名前は%@です。年齢は%d歳です。父親の名前は%@です。", [yuki name], [yuki age], [[yuki father] name]);
  24. }
  25. @end
リスト7 ViewController.m

 実行すると、コンソールに以下のように表示されます。

 このようにObjective-Cでは、オブジェクトの4つの特性を表現できることが分かります。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

Smart & Social 記事ランキング

本日月間

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。