------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流!
-------
今天把第三章過了一下,本章簡單的把Objective-C的面向對象介紹了一下。
主要關注Objective-C定義類相關的語法,面向對象方面的和其它語言差不多。比較接近C++。
對象就是一個物件。面向對象的程序設計可以看成一個物件和你想對它做的事情。
對象(名詞)----》做(動詞),先定義類(Class),再定義方法(Method)。
C語言是典型的面向過程性語言。
在C語言中,通常是先考慮要做什麼,然後才關注對象,這幾乎總是與面向對象的思考過程相反。
做(動詞)-----》對象(名詞),先定義函數(Function),再定義模塊(Module)。
我這裏寫上英文是因爲,只有那個英文才能準確表達它的含義。
類的獨特存在就是一個實例,對實例執行的操作稱爲方法。在某些情況下,方法可以應用於類的實例或類本身。
對象使用方法可以影響對象的狀態。
關鍵概念:對象是類的獨特表示,每個對象都包含一些通常對該對象來說是私有的信息(數據)。方法提供訪問和改變這些數據的手段。
Objective-C採用特定的語法對類和實例應用方法:
[ ClassOrInstance method];
請求一個類或實例來執行某個操作時,就是向它發送一條消息,消息的接收者稱爲Receiver。所以,可以用另外一種方式描述:
[ receiver message];
這裏我要說兩句,Objective-C的Method操作執行,一種理解是發送消息,另外一種是方法調用。這個無所謂的。準確額是第一種啊。
程序在邏輯上分爲下面3個部分:
@interface
@implementation
program
@interface部分用於描述類和類的方法;
@implementation部分用於描述數據(類對象的實例變量存儲的數據),並實現在接口中聲明方法的實際代碼;
program部分的程序代碼實現了程序的預期目的。
@interface部分一般格式如下:
@interface NewClassName: ParentClassName
propertyAndMethodDeclarations;
@end
按照約定,類名以大寫字母開頭。實例變量、對象以及方法的名稱,通常以小寫字母開頭。確定名稱時,要遵循找到能反映變量或對象使用意圖的名稱。程序具有更強的自解釋性(Self-explanatory)
制定名稱的規則相當簡單:名稱必須以字母或下劃線(_)開頭,之後可以使任何大小寫字母、下劃線或者數字的組合。另外像$空格等都是非法,記住不能數字開頭、不能使用保留字。
再次強調,Objective-C是大小寫敏感的。sum和Sum是兩個東西。
類或實例方法,開頭爲負號(-)表示實例方法,正號(+)表示類方法。
返回類型放在開頭的負號或正號之後的圓括號中。有參數時,在方法名後加冒號(:),再加上參數類型和參數名。具體的如下例所示:
-(int) currentAge;
-(void) print;
-(void) setNumber: (int) n;
@implementation部分的一般格式如下:
@inplementation NewClassName
{
memberDeclarations;
}
methodDefinitions;
@end
需要注意的是:使用@synthesize指令能讓編譯器自動爲你生成一些方法。
alloc是allocate的縮寫。如果向某個類發送alloc消息,便獲得該類的新實例。這個alloc方法繼承自父類。alloc方法保證對象的所有實例都變成初始狀態。當然想要適當的方法時,必須重新初始化,調用init方法。經常地情況是把alloc和init合在一起,或者直接使用new方法。例如:
Fraction *myFraction;
myFraction = [Fraction alloc];//類方法
myFraction = [myFraction init];//實例方法
Fraction *myFraction = [[Fraction alloc] init];//二合一
Fraction *myFraction = [Fraction new];//類方法,new包含alloc和init
記住,方法執行的上下文環境就是接收到消息的對象。
取值方法(get)和賦值方法統(set)稱爲訪問方法(accessor)。
//
// main.m
// 3_2_class_object_method
//
// Created by forlong401 on 12-12-21.
// Copyright (c) 2012年 forlong401. All rights reserved.
//
#import <Foundation/Foundation.h>
//-------- @interface section ----------
@interface Fraction: NSObject
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
@end
//-------- @implementation section ----------
@implementation Fraction
{
int numerator;
int denominator;
}
-(void) print
{
NSLog(@"%i/%i", numerator, denominator);
}
-(void) setNumerator:(int)n
{
numerator = n;
}
-(void) setDenominator:(int)d
{
denominator = d;
}
@end
//-------- program section ----------
int main(int argc, const char * argv[])
{
@autoreleasepool {
Fraction *myFraction;
// new object
myFraction = [Fraction alloc];
myFraction = [myFraction init];
// set
[myFraction setNumerator: 1];
[myFraction setDenominator: 3];
// print all
NSLog(@"Hello, World!");
[myFraction print];
}
return 0;
}