Objective-C 入門指南 - 類別

類別 (class) 用來設計自己需要的物件 (object) ,這是說,類別是物件的模板。 Objective-C 的類別設計包含兩個部份,首先是宣告屬性與方法的介面 (interface) ,這是下圖中 @interface 的部分,再來是方法的實作 (implement) ,也就是下圖的 @implementation 部份




我們以下例說明類別的寫法
#import <Foundation/Foundation.h>

// 以下介面部份開始
@interface Demo: NSObject
{
    int a;
    int b;
}

- (void) setA: (int) a_value setB: (int) b_value;
- (int) do_something; 
- (int) a;
- (int) b;

@end
// 以上介面部份結束

// 以下實作部份開始
@implementation Demo

- (void) setA: (int) a_value setB: (int) b_value
{
    a = a_value;
    b = b_value;
}

- (int) a
{
    return a;
}

- (int) b 
{
    return b;
}

- (int) do_something
{
    return a + b;
} 

@end
// 以上實作部份結束

// 以下為程式執行的 main() 函數
int main(int argc, char *argv[]) 
{ 
    Demo *demo = [[Demo alloc] init];
    [demo setA: 11 setB: 22];
    
    NSLog(@"a = %i, b = %i", [demo a], [demo b]);
    NSLog(@"a + b = %i", [demo do_something]);
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:classdemo.m
    功能:示範 Objective-C 程式 
    作者:張凱慶
    時間:西元 2012 年 7 月 */


@interface 部份,屬性名稱後面接冒號 : ,冒號後接的名稱為所繼承的類別,此例 Demo 繼承 (inherit) NSObject
@interface Demo: NSObject


當然可以設計完全沒有繼承的類別,可是就得自己設計 alloc ,不過這牽涉太多底層細節,所以還是寫繼承 NSObject 方便點囉!


大括弧的部份為宣告屬性 (property) ,此例宣告兩個 int 型態的屬性 ab
{
    int a;
    int b;
}


底下到 @end 之前宣告四個方法 (method) ,開頭的減號 - 表示這是實體方法 (instance method) ,接著是小括弧為回傳值型態,後面空一格為方法名稱與參數 (parameter)
- (void) setA: (int) a_value setB: (int) b_value;
- (int) do_something; 
- (int) a;
- (int) b;


上面第一個稱為 setA:setB: 方法,兩個參數需要用小括弧指定型態,其他三個沒有參數就不需要接冒號。


@implementation 部份 setA:setB: 為設定屬性 ab 的方法
- (void) setA: (int) a_value setB: (int) b_value
{
    a = a_value;
    b = b_value;
}


相對的, a 與 b 則是取得屬性 ab 的方法
- (int) a
{
    return a;
}

- (int) b 
{
    return b;
}


setA:setB: 為 setter 方法, a 與 b 則是 getter 方法, Objective-C 裡的方法與屬性可以有相同名稱。


do_something 則是回傳兩個屬性的相加值
- (int) do_something
{
    return a + b;
}


好了,對類別有初步概念了嗎?底下有 main() ,我們就來編譯執行看看吧!



接下來,我們開始設計一個將英文小寫字母換成另一個英文小寫字母的 Encrypt 類別與 MVC 模式,也就是編密碼的類別,藉此介紹更多物件導向程式設計 (object-oriented programming) 的特性 :)


中英文術語對照
類別class
物件object
介面interface
實作implement
繼承inherit
屬性property
方法method
實體方法instance method
參數parameter
物件導向程式設計object-oriented programming


您可以繼續參考
基礎篇


相關目錄
Objective-C 入門指南
Objective-C 教材
首頁



參考資料
Learning Objective-C: A Primer
The Objective-C Programming Language
Cocoa Fundamentals Guide
Coding Guidelines for Cocoa
Advanced Memory Management Programming Guide
Archives and Serializations Programming Guide

沒有留言: