黑馬程序員——Objective-C程序設計(第4版)學習筆記之03-類、對象和方法——黑馬 IOS 技術博客

------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"numeratordenominator);

}

-(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;

}


發佈了0 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章