OC物件導向之封裝

2021-06-27 12:00:17 字數 3530 閱讀 7565

一、物件導向和封裝

物件導向三大特徵:封裝、繼承、多型。

封裝是物件和類概念的主要特性。它是隱藏內部實現,穩定外部介面,可以看作是「包裝」。 封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。

好處:使用更加簡單  變數更加安全 可以隱藏內部實現細節  開發速度加快。

蘋果官方文件中,有乙個配圖生動的闡釋了封裝:

@inte***ce用於給人們顯示時間,向外部提供展示以及api介面;@implementation是內部實現,人們不需要知道鐘錶內部如何運轉的,同樣開發人員也無需關心類、物件方法是如何實現,只需要呼叫api方法完成相應功能即可。

二、set方法

當我們封裝好乙個物件時,出於安全性考慮,開發人員往往不希望別人能夠直接訪問自己設計的類中成員變數可以被外界隨意的訪問。例如,person類中有乙個成員變數age,當用於為age賦值負數的時候,將會產生不可預料的後果,此時開發人員就必須將age這個屬性私有化(用@private修飾),然,還要為該屬性提供乙個外界可訪問的方法,以供訪問者修改age,那麼set方法就這樣誕生了。

set方法作用:用於設定成員變數值,可以在set方法中,單方面過濾掉一些不合法、不合理的值,提高系統健壯性。

set方法命名規範:

1)方法名必須以set開頭

2)set後面跟上成員變數名稱,且成員變數首字母必須大寫;如:setage

3)   返回值一定是 void

4)  一定要接收乙個引數,且該引數型別必須與成員變數型別一致,且該形參最好不要與成員變數同名

set方法的好處:

1) 不讓成員變數暴露在外 ,一定程度上保證了資料的安全性

2)對於使用者提交過來的資料進行校驗、過濾

**示例:

set方法宣告部分:

/*

4.設計乙個成績類

* c語言成績(可讀可寫)

* oc成績(可讀可寫)

* 總分(唯讀)

* 平均分(唯讀)

*/#import @inte***ce score : nsobject

- (void)setcscore:(int)cscore;

- (void)setocscore:(int)ocscore;

@end

set方法實現部分:

@implementation score

- (void)setcscore:(int)cscore

- (void)setocscore:(int)ocscore

@end

執行程式:

#import int main()

三、get方法上面提到,程式設計師出了安全性考慮將成員變數私有化,那麼在類的設計中,必須提供乙個方法供呼叫者獲得相應的成員變數,get方法隨之產生。

get方法的作用:

返回物件內部的成員變數

get方法命名規範:

1)get方法名一般與成員變數名一樣

2)一定有返回值,且返回型別必須與成員變數一致

3)無需接收任何引數

**示例(結合set方法一起):

get方法的宣告部分:

#import typedef enum  ***;

@inte***ce student : nsobject

// ***的set和get方法

- (void)set***:(***)***;

- (***)***;

// no的set和get方法

- (void)setno:(int)no;

- (int)no;

@end

get方法實現部分:

@implementation student

- (void)set***:(***)***

- (***)***

- (void)setno:(int)no

- (int)no

@end

執行程式:

#import int main()

注意點:乙個類的設計不一定要為每個成員變數都提供setter方法和getter方法,比如乙個成員變數,設計者只想讓呼叫者訪問,而不希望被其修改,那麼只需要提供getter方法即可,極具靈活性。

四、類方法

1)基本概念

類方法可以由類名來直接呼叫,無需生成物件。

2) 類方法  vs  物件方法

①物件方法名  以 -  開頭,而類方法以 + 開頭

②物件方法只能由物件呼叫,沒有物件,物件方法無法被呼叫, 類方法只能由類直接呼叫,不能由物件呼叫

③物件方法能訪問成員變數,類方法不能訪問成員變數

類方法的好處和使用場合:

1> 不依賴於物件,執行效率高

2> 能用類方法,盡量用類方法

3> 場合:當方法內部不需要使用到成員變數時,就可以改為類方法

可以允許類方法和物件方法同名

**示例:

#import @inte***ce person : nsobject

// 類方法都是以+開頭

+ (void)printclassname;

- (void)test;

+ (void)test;

@end

@implementation person

+ (void)printclassname

- (void)test

+ (void)test

@end

int main()

五、self關鍵字self 是乙個指標,代表當前的呼叫者,誰呼叫了,self就指向誰。

* self 出現在物件方法中,self 就代表物件

* self 出現在類方法中,    self 就代表類

self的用途:

1)用self關鍵字訪問成員變數可以區分同名的區域性變數

2)使用 [self  方法名]  來呼叫方法

**示例:

#import @inte***ce dog : nsobject

- (void)bark;

- (void)run;

@end

@implementation dog

- (void)bark

- (void)run

@end

int main()

OC物件導向 封裝

oc物件導向 封裝 一 物件導向和封裝 物件導向的三大特性 封裝 成員變數 繼承和多型 在oc語言中,使用 inte ce 和 implementation 來處理類。inte ce就好像暴露在外面的時鐘表面,像外界提供展示以及介面。implementation就好像隱藏在時鐘內部的構造實現,把具體...

OC物件導向 封裝

oc物件導向 封裝 一 物件導向和封裝 物件導向的三大特性 封裝 成員變數 繼承和多型 在 oc語言中,使用 inte ce和 implementation來處理類。inte ce就好像暴露在外面的時鐘表面,像外界提供展示以及介面。implementation就好像隱藏在時鐘內部的構造實現,把具體的...

OC物件導向 封裝

oc物件導向 封裝 一 物件導向和封裝 物件導向的三大特性 封裝 成員變數 繼承和多型 在oc語言中,使用 inte ce和 implementation來處理類。inte ce就好像暴露在外面的時鐘表面,像外界提供展示以及介面。implementation就好像隱藏在時鐘內部的構造實現,把具體的實...