Objective-C學習筆記第三章面向對象編程

第三章面向對象編程

一、間接(inderection)

即使用某種東西指向你想要的對象,或使用某事物代爲辦理某種工作

1、變量與間接

舉例代碼:

int i;

int count = 5;

for(i = 1; i <= count; i++){

         NSLog(@"%d\n",i);

}

 

其中count就是間接

 

2、文件名的間接

將處理內容保存到外部文件,使用文件流讀取

 

二、在面向對象編程中使用間接

// Draw the shapes

 

void drawShapes (id shapes[], int count)

{

         int i;

        

         for (i = 0; i < count; i++) {

                   id shape = shapes[i];

                   [shape draw];

         }

        

} // drawShapes

 

代碼解釋:

1  id代表identifier標識符,id是一種泛型,用於表示任何種類的對象,是一個指針指向     某個結構struct

2  [shape draw]

         C語言中[]方括號用於引用數組元素

         Objective-C中用於通知對象進行某種操作,在這裏就是調用shape對象的draw方法

 

 

三、Objective-C中的OOP

@interface接口,定義類的公共接口

創建類對象之前,Objective-C編譯器需要讀取類內部信息,使用@interface可以把信息傳遞給編譯器

示例代碼:

@interface Circle:NSObject              表示爲Circle類定義的接口,並且Circle類繼承自NSObject

{                                                                括號內是Circle類的數據成員

         ShapeColor       fillColor;            名爲fillColorShapeColor類對象

                                                                 其值爲Circle類對象的實例變量

         ShapeRect        bounds;             名爲boundsShapeRect類對象

}

- (void) setFillColor : (ShapeColor) fillColor;               (ShapeColor)表示需要的參數類型

- (void) setBounds : (ShapeRect) bounds;                  :冒號表示方法需要參數

- (void) draw;   方法聲明,前面的短線表明這是Objective-C的方法聲明,

                            這是區分函數原型與方法聲明的方式,函數原型中沒有先行短線

                            表示這是一個新方法

                            void表示無返回值

@end //Circle  表示已經完成了Circle類的聲明

Objective-C方法可以返回與C相同的類型:標準類型(整型、浮點型和字符型)、指針、對象引用和結構

 

 

中綴符(infix notation)

Objective-C中有中綴符的語法,即方法的名稱及其參數時和在一起的

例如,調用方法時將參數傳入

[circle       setFillColor  :  red]

帶兩個參數的方法調用

[textThing         setStringValue :  @"hello there" color:blue ]

 

 

C中調用函數則直接把參數放在方法名之後,例:setTextThingValueColor(textThing, @"hello there" , blue);

 

 

@implementation實現,即接口的實現類

舉例代碼:

@implementation Circle          編譯器指令,表示爲某個類提供代碼編譯器指令後不用書寫分號

 

- (void) setFillColor : (ShapeColor) c          c爲形式參數,爲避免名稱衝突不使用傳入時的名稱

{

         fillColor = c;

}//setFillColor

                                                                                                                                                    

-(void) setBounds :(ShapeRect) b              b是隨着隱藏參數self傳遞來的,方法調用時會將自身

{                                                                         對象隱蔽的傳度過來

         bounds = b;

}//setBounds

 

-(void) draw                                                                                方法定義不必按照@interface中的順序

{                                                                                                     出現,甚至可以書寫無聲明的方法該方法

         NSLog(@"drawing a circle at                                               將成爲實現類的私有方法(Objective-C

                   (%d %d %d %d) in %@",                                       中並不存在真正的私有方法,即無法將方

                   bounds.x,bounds.y,bounds.width,                     法隱藏)

                   bounds.height,colorName(fillColor));

}//draw

 

 

實例化(instantiation)對象

創建新對象需要發送new消息

舉例代碼:

int main (int argc, const char * argv[])

{

         id shapes[1];                                                   定義類型爲id指針,長度爲1名字爲shapes的數組

         ShapeRect rect0 = {0,0,10,30};                 定義一個矩形併爲其提交4個座標點參數

         shapes[0] = [Circle new];                                      爲數組第一個元素實例化一個Circle

         [shapes[0] setBounds : rect0];                  數組元素調用Circle類的方法

         [shapes[0] setFillColor : kRedColor];

         return(0);

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章