好的,我們首先來解釋一下什麼叫“面向對象”,其實就是找一個對象,然後面向着她就是咯~哈,開個玩笑·~~~~
一、基本概念
面向對象:我們這裏所說的面向對象一般 指的是面向對象程序設計。
面向對象程序設計(英語:Object-oriented programming,縮寫:OOP)是一種程序設計範型,同時也是一種程序開發的方法。對象指的是類的實例。它將對象作爲程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性。
面向對象程序設計可以看作一種在程序中包含各種獨立而又互相調用的對象的思想,這與傳統的思想剛好相反:傳統的程序設計主張將程序看作一系列函數的集合,或者直接就是一系列對電腦下達的指令。面向對象程序設計中的每一個對象都應該能夠接受數據、處理數據並將數據傳達給其它對象,因此它們都可以被看作一個小型的“機器”,即對象。
Objective-C是一門面向對象的計算機編程語言。
二、面向對象與面向過程比較
面向過程:處理事務,主要以過程爲核心。以把大象裝進冰箱爲例,如果想做好這件事情,就必須走三個步驟:
1)打開冰箱
2)把大象放進冰箱
3)關閉冰箱;
那麼這三個步驟,我們統稱爲過程。體現在計算機編程語言上就是面向函數,以函數的形式解決程序設計問題,利用的思想就是面向過程思想。著名的C語言就是面向過程性語言。
面向對象:利用面向對象思想處理事務時,往往看重的不是過程,而是對象本身,如果我想要做一件事,我應該立馬想到什麼對象能夠辦到,讓這個對象來替我辦這件事,而不是自己去實現。例如,我想把門打開,我就會去找“門”這個對象,因爲打開門只有“門”自己能夠辦到,“打開”是一個動作,也是“門”的一個方法,而我們只是扮演了調用者的身份,並不用理會“門”是如何“打開”的,這些都交給對象本身了。相應的,體現在編程語言上,就是類與對象。傳統的面嚮對象語言有:Objective-C、C++、Java、C#等。
三、類和對象的關係
類是一組具有相同(特徵)屬性和行爲(功能)的事物的集合(抽象)。對象就是類的具體實現。世間萬物皆對象。類其實就是一種數據類型,它的變量就是對象。
在OC中,類的定義分爲兩個部分:接口(@interface)和實現(@implementation)。
接口部分:
1)聲明瞭類與父類的名字 2)聲明瞭成員變量 3)聲明瞭成員方法 4)文件以.h結尾
例如
/*
類名:Car
屬性:輪胎個數、時速(速度)
行爲:跑
*/
// 因爲使用了NSObject
#import <Foundation/Foundation.h>
// 1.類的聲明
// 聲明對象的屬性、行爲
// : NSObject 目的是:讓Car這個類具備創建對象的能力
@interface Car : NSObject
{// 用來聲明對象屬性(實例變量\成員變量,默認會初始化爲0)
// @public可以讓外部的指針間接訪問對象內部的成員變量
@public
int wheels; // 輪胎個數
int speed; // 時速(xxkm/h)
}
// 方法(行爲):方法名、參數、返回值(聲明、實現)
// 只要是OC對象的方法,必須以減號 - 開頭
// OC方法中任何數據類型都必須用小括號()擴住
// OC方法中的小括號():括住數據類型
- (void)run;
@end
實現部分:
包含了方法的真正實現,是方法的具體表現形式。 實現文件以.m結尾。
注意:.h文件、.m文件不要放在不同的文件夾,每一個.h文件對應一個.m文件是個好習慣~
例如:
// 2.類的實現
// 用來實現@inteface中聲明的方法
@implementation Car
// 方法的實現(說清楚方法裏面有什麼代碼)
- (void)run
{
NSLog(@"車子跑起來了");
}
@end
對象的創建和使用:
內存分配:爲對象動態的分配內存地址。
初始化:在內存中填上的初始值。
int main()
{
// 在OC中,想執行一些行爲,就寫上一個中括號[行爲執行者 行爲名稱]
// 利用類來創建對象
// 執行了Car這個類的new行爲來創建新對象
// 定義了一個指針變量p,p將來指向的是Car類型的對象
// [Car new]每次都會創建出一個新對象,並且會返回新對象本身(新對象的地址)
Car *p = [Car new];
Car *p2 = [Car new];
p2->wheels = 5;
p2->speed = 300;
[p2 run];
// 給p所指向對象的wheels屬性賦值
p->wheels = 4;
p->speed = 250;
// 給p所指向對象發送一條run消息
[p run];
NSLog(@"車子有%d個輪子,時速位:%dkm/h", p->wheels, p2->speed);
return 0;
}
四、詳談一下---方法
1)不帶參數的方法
// 方法聲明
- (double)pi;
// 方法實現
- (double)pi
{
return 3.14;
}
2)帶一個參數的方法
設計一個計算平方的方法
// 方法聲明
- (double)square:(double)number;
// 方法實現
- (double)square:(double)number
{
return number * number;
}
3)帶多個參數的方法
設計一個計算和的方法
// 方法聲明
- (double)sumOfNum1:(double)num1 andNum2:(double)num2;
// 方法實現
- (double)sumOfNum1:(double)num1 andNum2:(double)num2
{
return num1 + num2;
}
方法名注意:1)冒號也是方法名的一部分 2)同一個類中不允許兩個對象方法同名
五、匿名對象(作爲了解)
屬性訪問
[Car new]->speed = 200;
方法調用
[ [Car new] run];
看得懂就好,不建議在代碼中這麼書寫。