基於Objective-C的面向對象編程入門

本文中介紹到得概念有:

  1. 對象(Object)的概念
  2. 繼承(inheritance)
  3. MVC(Model-View-Controller是一種軟件設計典範)

(之後的OC都指代Objective-C)


一、 對象的概念

  1. 對象指的是人們要進行研究的任何事物,從最簡單的整數到複雜的飛機等均可以看做對象,它不僅能代表具體的事物,也可以表示抽象的規則、計劃或事件。
  2. 比如交通工具(Vehicle)是一個類,它具有一些屬性,包括輪子、商標、出產日期等。還具有一些方法,比如,向前,向後,拐彎等。在面向對象編程中,我們就可以通過繼承的方法,生成交通工具的子類比如自行車、摩托車和轎車。交通工具就是自行車的父類,父類可以將自身的方法傳遞給子類。子類也可以通過重寫父類的方法來實現自身的功能,還可以增加自身的特有的方法。比如轎車可以添加別的屬性,比如引擎、多少個側門、後備箱等,也可以增加一些方法,比如鳴笛、打燈等等。在轎車的基礎上,你還可以再產生新的子類。
  3. 對象則是上面提到的類的一個實例。面向對象有很好地可維護性、可擴展性、可重用性。
  4. 在OC中對象擁有屬性(properties)以及方法(method)


創建一個Vehicle類

在Vehicle.h文件中添加以下屬性

@interface Vehicle : NSObject

@property (nonatomic, assign) NSInteger numberOfWheels;	//輪子的個數
@property (nonatomic, assign) NSInteger modelYear;		//出產日期
@property (nonatomic, copy) NSString *brandName;		//商標

+ (instancetype)vehicleWithBrandName:(NSString *)brandName modelYear:(NSInteger)modelYear wheels:(NSInteger)numberOfWheels;
- (NSString *)goForward;
- (NSString *)goBackward;
- (NSString *)stopMoving;

@end


其中以-開頭的是實例方法,只有對象纔可以調用。

+開頭的是類方法,對象是不可以調用的,只有類纔可以調用,一般都是用來實現初始化的


然後在Vehicle.m中實現方法,把代碼放在@implementation下面。

- (NSString *)goForward
{
    return nil;
}

- (NSString *)goBackward
{
    return nil;
}

- (NSString *)stopMoving
{
    return nil;
}

+ (instancetype)vehicleWithBrandName:(NSString *)brandName modelYear:(NSInteger)modelYear wheels:(NSInteger)numberOfWheels
{   
    Vehicle *newVehicle = [[self alloc] init];
    
    //設置實例變量
    newVehicle.brandName = brandName;
    newVehicle.modelYear = modelYear;
    newVehicle.numberOfWheels = numberOfWheels;
    
    //返回對象
    return newVehicle;
}



二、繼承

我們通過繼承Vehicle類來生成一個新的類Car

  1. 新建一個Class命名爲Car,繼承自Vehicle。通過這個操作,我們的Car類繼承了所有Vehicle在頭文件中命名的屬性和方法,(類似於繼承了C++中public下的一些變量和方法)
  2. 在Car.m下添加初始化方法在@implementation下方

- (id)init
{
    if (self = [super init]) {
        //Since all cars have four wheels, we can safely set this for every initialized instance of a car.
        
        self.numberOfWheels = 4;
    }
    
    return self;
}

其中 self = [super init] 是用父類的init方法進行初始化後,如果初始化成功則執行if(){}中的語句。然後return self。

如果初始化失敗,則self = nil,那就不會進入if中的語句,直接return一個nil。


3.  在Car.h中可以添加Car獨有的一些屬性,像(一)中所說的比如側門的數量,是否有後備箱等。還可以重寫(override)Vehicle類中的goForward等方法。也可以添加自身獨有的方法。


//重寫父類的方法
- (NSString *)goForward
{
    return [NSString stringWithFormat:@"%@ %@ Then depress gas pedal.", [self start], [self changeGears:@"Forward"]];
}

- (NSString *)goBackward
{
    return [NSString stringWithFormat:@"%@ %@ Check your rear view mirror. Then depress gas pedal.", [self start], [self changeGears:@"Reverse"]];
}

- (NSString *)stopMoving
{
    return [NSString stringWithFormat:@"Depress brake pedal. %@", [self changeGears:@"Park"]];
}

//添加自身的方法
- (NSString *)makeNoise
{
    return @"Beep beep!";
}


三、MVC設計模式

Model模型:負責數據的存儲

View視圖:負責數據的展示

Controller控制器:協調模型和視圖之間數據調度和請求響應等。


在iOS開發中,比如生成項目後會產生storyboard文件和ViewController文件

其中storyboard屬於視圖,ViewController屬於控制器,負責將數據展示在視圖上。

模型則需要自己來創建,比如(一)(二)中的Vehicle和Car類。

我們可以創建一個VehicleList類來保存Vehicle或者Car的對象。那麼這個VehicleList就是所謂的模型了。

當我們需要添加更多地車輛信息,我們只需要在VehicleList中添加實例即可,就可以不需要去修改視圖或者控制器文件。

這樣在大型的app工程下就可以使工程更容易維護。


參考鏈接:

http://www.raywenderlich.com/45940/intro-object-oriented-design-part-1




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