国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ObjectiveC-08-OOP面向對象程序設計-類的分離與組合

這篇具有很好參考價值的文章主要介紹了ObjectiveC-08-OOP面向對象程序設計-類的分離與組合。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本節(jié)用一簡短的文章來說下是ObjectiveC中的類。類其實是OOP中的一個概念,概念上簡單來講類是它是一組關系密切屬性的集合,所謂的關系就是對現(xiàn)實事物的抽象。

  • 上面提到的關系包括很多種,比如has a, is a,has some等;
  • 關系是一種抽象過程,源于對事務的理解,同時還要平衡開發(fā)的成本,這是一門藝術;

類的結構

OOP標準結構

下圖是一張通用的類完整結構圖表示,本章暫時只講最基礎的部分,后續(xù)章節(jié)會圍繞這個基礎逐漸深入展開。
ObjectiveC-08-OOP面向對象程序設計-類的分離與組合,MacOS,cocoa,ios,objective-c,macos,c++
幾點需要說明下:

  1. 在OOP世界中,所有的類都有一個默認的父類,一般稱為基類。比如java里的基類名為Object,ObjectiveC中的基類名稱為NSObject。
  2. OOP中不允許多繼承,ObjC也不例外;
  3. 協(xié)議可以實現(xiàn)多個,即一個類可以實現(xiàn)多種不同的協(xié)議;

OOP在ObjC中的實現(xiàn)

ObjectiveC中的代碼實現(xiàn)模式:
ObjectiveC-08-OOP面向對象程序設計-類的分離與組合,MacOS,cocoa,ios,objective-c,macos,c++
幾點需要說明下:

  1. 在ObjectiveC中,會把一個類拆分成兩個文件接口(.h)和實現(xiàn)(.m)。
  2. ObjectiveC中的文件只是一個載體,具體的定義是由關鍵標識來定義的,比如在一個.h文件中可以定義多個接口定義;在一個.m文件中也可以定義多個接口的實現(xiàn)

在同一個.m文件中書寫全部的代碼,這種方式并不推薦,因為會給維護帶來很大問題。

#import <Foundation/Foundation.h>
// ----------------------類聲明----------------------------
@interface Fraction : NSObject
@end // Tire

// -----------------------類實現(xiàn)---------------------------
@implementation Fraction

- (NSString *) description
{
    return (@"I am a tire. I last a while");
} // description

@end // Tire

// -----------------------main入口函數(shù)---------------------------
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Fraction *engine = [Fraction new];
    }
    return 0;
}// main

所以推薦的類組織方式是:

分離接口和實現(xiàn)

把@interface和@implementation代碼定義在同一個.m文件中,這種方式呢做練習用還可以,如果是正式的程序就不太方便了。因為這樣的話在代碼行數(shù)比較多時維護會是個大總是,所以最好的方法是分離接口和實現(xiàn),實現(xiàn)分而治之,如下:
ObjectiveC-08-OOP面向對象程序設計-類的分離與組合,MacOS,cocoa,ios,objective-c,macos,c++

創(chuàng)建類文件

使用XCode工具,在“New File時”選擇Cocoa class創(chuàng)建文件時會自動分離.h和.m,如下圖所示:
ObjectiveC-08-OOP面向對象程序設計-類的分離與組合,MacOS,cocoa,ios,objective-c,macos,c++
在下一步窗口中添填寫新創(chuàng)建的類名稱,也可以選擇需要繼承的父類(父類可以是自定義的類):
ObjectiveC-08-OOP面向對象程序設計-類的分離與組合,MacOS,cocoa,ios,objective-c,macos,c++
最后設置文件存放目錄,也可以設置目標和群組,復雜的項目可以有多個組和目標:
ObjectiveC-08-OOP面向對象程序設計-類的分離與組合,MacOS,cocoa,ios,objective-c,macos,c++

  • Group:Group主要是用于管理項目的源文件,比如可以創(chuàng)建兩個Group,一個用于存放UI文件,一個用于存放處理程序類。Group不是java中package的概念,它是XCode的一個邏輯分組并不會真正的移動文件位置,甚至可以讓Group指向磁盤上某個特定的文件夾;
  • Target:簡單可理解應用編譯后的運行環(huán)境,比如一個IOS程序,其可以設置多個不同的目標如iphone12、iphone13等,每個目標采用不同的配置,這樣也比較方便測試其兼容性;

.h類聲明實現(xiàn)

相當于類功能的描述,默認格式上文件名與類名相同。在.h文件中一般用于定義類的@interface指令、公共的struct定義、enum常量、#defines和extern全局變量。新創(chuàng)建一個Fraction.h文件,代碼示例如下:

#import <Foundation/Foundation.h>

@interface Fraction : NSObject

-(void) print;

@end //end Fraction

.m類功能實現(xiàn)

相當于類功能的實現(xiàn),默認格式上文件名與類名相同。在.m一般用于定義類的@implementation指令、私有的struct定義、extern全局變量定義。新創(chuàng)建一個Fraction.m文件

如果創(chuàng)建的是以.mm為后綴的文件則可以同時使用C++和ObjectiveC語法,示例代碼如下:

#import "Fraction.h"

@implementation Fraction {//私有屬性
    int numerator;
    int denominator;
}
- (void) print {
    NSLog(@"%i / %i", numerator, denominator);
}

- (void) setNumerator:(int) n {
    numerator = n;
}

- (void) setDenominator:(int) d {
    denominator = d;
}
@end

分離后的代碼會有如下特點:

  1. 在@interface中引入的頭文件,可直接繼承到@implementation實現(xiàn)中不必重復導入,比如在.h文件中import <Foundation/Foundation.h>,則.m文件中就不需要再寫一遍了(雖然可以);
  2. 在 @implementation 實現(xiàn)中也可以定義 @interface 中未出現(xiàn)過的方法和變量,但要注意不要和.h文件中定義的變量名重復;
  3. 在@implementation或@interface中定義的方法的參數(shù)名稱盡量不要和自定義的變量重名,所以給變量前面加上self是一個非常好的習慣,比如下列代碼;
//聲明部分
-(void) setNumerator: (int) name;

//實現(xiàn)部分
NSString *name;
- (void) setDenominator:(int) name {
    name = name;
    //上面這行代碼必須替換為如下代碼,否則會發(fā)生錯誤
    self.name = name;
}

類的實例化

類可以通過new或alloc關鍵字實現(xiàn)實例化,類的實例化是一大塊內(nèi)容,本節(jié)只需簡單了解其使用調(diào)用,如果用XCode創(chuàng)建工程,則會默認生成一個名為main.m的文件,里面包含一個main方法(注意:一個工程只允許存在一個main()方法)。

// -----------------------main入口函數(shù)---------------------------
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Fraction *engine = [[Fraction alloc] init];
    }
    return 0;
}

類的組合

上述就是最簡單類的實現(xiàn),下面看到類封裝的基本用法。也是一種最簡單的設計模式組合。比如描述一輛汽車:
ObjectiveC-08-OOP面向對象程序設計-類的分離與組合,MacOS,cocoa,ios,objective-c,macos,c++
對象組合其實是一種設計思想,并不是一種技術框架實現(xiàn)。類的擴展有分類和協(xié)議兩種技術,另一種技術就是合成對象,它可以定義一個類包含其他類的一個或多個對象,這個新類就是所謂的合成對象。即手動處理,比如父子類的實現(xiàn)可修改成如下代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-845881.html

@interface Car: NSObject{
    Tires *tires[4]; //4條輪胎
    Engine *engine; //1個引擎
}

@interface Tires: NSObject{
    int par; //標準的氣壓值
    int position;//安裝位置
}

@interface Engine: NSObject{
    NSString *name; //引擎名稱
}

到了這里,關于ObjectiveC-08-OOP面向對象程序設計-類的分離與組合的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Python-基礎篇-類與對象/面向對象程序設計

    Python-基礎篇-類與對象/面向對象程序設計

    “類”是物以類聚的 “類” 類 和 對象 是 面向對象編程的 兩個 核心概念 類 是對一群具有 相同 特征 或者 行為 的事物的一個統(tǒng)稱,是抽象的, 不能直接使用 特征 被稱為 屬性 行為 被稱為 方法 類 就相當于制造飛機時的 圖紙 ,是一個 模板 ,是 負責創(chuàng)建對象的 定義類??

    2024年01月19日
    瀏覽(62)
  • 面向對象程序設計第三次bolg

    面向對象程序設計第三次bolg

    本次博客針對面向對象程序設計的課程所發(fā)的PTA作業(yè)7,8以及期末考試中的面向對象編程題的分析和總結,重點介紹課程成績統(tǒng)計程序系列題目以及期末考試的編程題。 在這次作業(yè)中7-1、7-2內(nèi)容和考點相同,在此我分析一下7-2Hashmap的排序這個問題。 7-2 容器-HashMap-排序 分數(shù)

    2024年02月05日
    瀏覽(25)
  • 2023.5.5 面向對象程序設計實驗報告

    實驗項目名稱:模板 1、熟練掌握函數(shù)模板和類模板的定義格式。 2、熟練運用函數(shù)模板和類模板解決實際問題。 1、復數(shù)類Complex有兩個數(shù)據(jù)成員:a和b, 分別代表復數(shù)的實部和虛部,并有若干構造函數(shù)和一個重載-(減號,用于計算兩個復數(shù)的距離)的成員函數(shù)。 要求設計一個

    2024年02月02日
    瀏覽(26)
  • 面向對象程序設計 之 文件輸入輸出流

    面向對象程序設計 之 文件輸入輸出流

    石 家 莊 鐵 道 大 學 實 驗 報 告 課程名稱 面向對象程序設計 班級 ? 姓名 ? 學號 ? 實驗日期 2023.5.16 評分 100 ? 實驗項目名稱:輸入輸出流 一、實驗目的 掌握文本文件和二進制文件的基本訪問方法; 了解一般I/O流和文件流的關系;了解文件與文件流的關系; 了解文件系統(tǒng)

    2024年02月05日
    瀏覽(42)
  • C++面向對象程序設計 - 類和對象進一步討論

    C++面向對象程序設計 - 類和對象進一步討論

    ? ? ? ? 在C++中,關于面向對象程序設計已經(jīng)講了很大篇幅,也例舉很多案例,此篇將通過一些習題來進一步了解對象、靜態(tài)成員、指針、引用、友元、類模板等等相關知識。 ? ? ? ? 示例代碼: ? ? ? ? 如上代碼,運行后結果如下圖: ???????? 現(xiàn)在將上述代碼中,第

    2024年04月16日
    瀏覽(25)
  • .NET 面向對象程序設計 —— 學習筆記 詳細版

    .NET 面向對象程序設計 —— 學習筆記 詳細版

    ????????開始考慮通過封裝、繼承、多態(tài)把程序的耦合度降低(傳統(tǒng)印刷 術的問題就在于所有的字都刻在同一版面上造成耦合度太高所制),開始用設計模式使得程序更加的靈活,容易修改, 并且易于復用。 ????????大鳥說:“且先不說出題人的意思,單就你現(xiàn)在的

    2024年04月26日
    瀏覽(27)
  • C++面向對象程序設計-基礎入門(超詳細)

    C++面向對象程序設計-基礎入門(超詳細)

    目錄 一、c++概述 二、初識c++ 1、第一個c++程序 ?2、c++面向對象的三大特性(重要) 三、作用域運算符:: 1、使用namespace創(chuàng)建一個命名空間 2、命名空間只能定義在全局 3、 命名空間嵌套 ?4、隨時將新的成員加入命名空間 5、命名空間中 函數(shù)的聲明和實現(xiàn)分開? ?6、

    2024年02月16日
    瀏覽(21)
  • Java面向對象程序設計 - 清覽云題庫

    目錄 清覽題庫1 清覽題庫2 清覽題庫3 清覽題庫4 清覽題庫5 1.?? 給出下列【代碼】注釋標注的代碼的輸出結果。 public class Example { ?? public static void main(String args[]) ?{ ????? System.out.println(\\\"hello\\\"); //【代碼】 ? ??????? ?} } 答案 hello 2.?? 給出下列【代碼】注釋標注的代碼

    2024年02月08日
    瀏覽(33)
  • C++面向對象程序設計 - 運算符重載

    C++面向對象程序設計 - 運算符重載

    ? ? ? ? 函數(shù)重載就是對一個已有的函數(shù)賦予新的含義,使之實現(xiàn)新的功能。因此一個函數(shù)名就可以用來代表不同功能的函數(shù),也就是一名多用。運算符也可以重載,即運算符重載(operator overloading)。 ? ? ? ? 運算符重載的方法是定義一個重載運算符的函數(shù),在需要執(zhí)行被

    2024年04月25日
    瀏覽(20)
  • 【面向對象程序設計】賬戶類(Java、JavaFX)

    目錄 版本1: 設計Account1類,包含: 設計測試類ATMMachine1: 版本2: 擴展Account1類為Account2類: ? 設計測試類ATMMachine2,其主菜單如下: 版本3: uml啥的找不到了,太久遠了,有什么不懂得評論或者私聊問我吧。 ■ 一個名為id 的int 類型的私有數(shù)據(jù)域(默認值為0),長度為6位

    2024年02月08日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包