教程詳細:
技術:objective-c
難度:初學者
歡迎來到學習objective-c系列教程的第二部分,
上週,我們回顧了objective-c中的c語言基礎,這週呢,我們將會重點介紹到底是什麼讓objective-c成為軟體開發的優秀語言。特別的,我們還會討論物件導向程式設計(oop)基礎,還有怎樣用objective-c去建立乙個類和給物件傳送訊息。
物件導向程式設計
為什麼還會有objective-c呢?為什麼我們不只用底層的c語言呢?理由是在我們編寫程式時objective-c提供物件導向的能力。oop是一種程式設計規範,它讓開發者專注於軟體設計中的物件和屬性,而不是變數和函式。具體的說,oop試圖獲取資料抽象,封裝,模組化,多型和繼承。oop的主題可以很容易的出一本關於它自己書(或是乙個系列教程),所以,我會通過一些例子去介紹這些基本的原則。
設想一下,你擁有一輛汽車,那你就可以認為這輛汽車是乙個物件了。但世界上有許許多多的汽車,並且你也許不止擁有一輛汽車。然而,你的汽車有著種種的屬性:牌子呀,型別呀,顏色呀,發動機型別呀等等。在物件導向程式設計概念裡,我們可以把這些概念抽象為汽車「類」,把這個單獨的汽車稱為這個汽車類的乙個物件或者例項(例項化物件)。當一輛汽車被製造時,乙個新的汽車類的例項將被例項化(或建立)並且給它設定初始屬性。
說到這裡還感覺到模糊嗎?還有乙個更通俗的例子就是餅模和大餅,類相當於餅模,物件相當於大餅。
那麼,為什麼我們還要考慮物件呢?原因之一是:實現生活中,你的大腦很自然地把生活概念化,這樣給抽象軟體開發帶來大大的好處,因為這些是相類似的。
類(和它的物件)是由方法和屬性組成的。如果你是由其他語言過渡過來的,你也許更熟悉等同於方法的函式,等同於屬性的變數。好了,這些我們會接著討論的。 方法
嗯~,現在我們擁有乙個汽車的例項,但我能用它來幹什麼呢?呵呵,可們可以駕駛它,還可以為它加汽油呀。駕駛和為它加汽油僅僅提供給我們使用的汽車,這就意味著,我們為一輛汽車加油和駕駛它,我們僅僅影響乙個例項而已,然而並不是影響到世界所有的汽車喲。因此,為汽車例項加汽油被認為是例項方法,那是我們對我們的例項並且僅僅是我們的例項作影響。
另一方面,如果我們想問原汽車類汽車可以有多少種顏色供選擇,這個時候就是乙個類方法了,因為我們不再是涉及到我們自己開的那輛汽車了,而是所有的汽車了。
許多原則開始變得清晰起來了,好拉,讓我們看看一些語法吧。
在objective-c中,我們通過傳送訊息來呼叫例項方法。當我們想知道我們的汽車例項還有多少汽油時,這時,我們就向例項傳送一條訊息,這訊息就是我們提供的方法。大概看起來是這樣的:
1. [recipient message];
方括號表明了我們傳送的訊息。裡面的第乙個引數是訊息的接收者,第二個引數就是訊息了。最後,我們會大部分程式語言一樣以分號結束。
這樣下來,對上面的例子已經熟悉了吧。下面是實現如何為我們的汽車例項加汽油的:
1. [danscar addgas];
在上面的例子假設我們例項化了乙個名叫「danscar」的汽車例項。然後,我們向"danscar」物件傳送」addgas」訊息,這就贊同於函式呼叫。在另一種語言裡,這行**可能會像這樣:
1. danscar.addgas();屬性
比方說,我們的汽車類有乙個用百分比表示汽油儲存量的油箱。例如,如果油箱指向50%,那表示它半滿的;如果指向100%,那意味著有油箱裡裝得滿滿的。現在,如果我們想知道油箱裡有多少汽油,我們並不會直接從這個屬性裡得到資訊,相反地,我們通過乙個訪問方法去訪問該屬性。同樣地,當我們想為汽車加油時,我們並不會給油箱的油量賦上乙個新的百分比值,而是使用乙個setter來更新屬性。這個過程呢,就被稱作為資料封裝了。
我們所說的資料封裝,其實就是資料的訪問要通過訪問方法。可能我們當中一些使用其他語言的童鞋們就會為這感到奇怪了,為什麼要這樣做呢。答案就是,資料封裝給類的建立者和類的使用者之間建立了乙個很好的緩衝。因為類裡的屬性是通過類方法去管理和維護的,這樣就可以更容易的保證資料的完整性了。還有另外乙個主要的好處,當開發者專注於他的類,使用者就不必關心類的內部結構如何。這樣,開發者也許公升級乙個方法,讓它變得更快更有效率,然而,這些改動對類的使用者是透明的,他們可以仍然以同樣的方法去使用它,不用作**的改動。
很好~,我們將接著看看objective-c是如何把介面和實現分離的。
介面和實現
當你用objective-c建立或操作乙個簡單的類,預設下,你會看到兩個檔案:乙個是實現檔案(以.m為字尾名),另乙個是介面檔案(以.h為字尾名)。 介面
1. #import <cocoa
cocoa.h
>
2.
3. @inte***ce car : nsobject
9.
10. //this is where methods go
11. - (void)addgas;
12.
13.@end
首先呢,我們引入提供大量可重用**的cocoa.h庫,裡面的**都可以供我們在編寫應用程式時使用。
下一步,我們宣告汽車介面,同時也把nsobject加入宣告行裡。對"nsobject」的新增意味著汽車類繼承於nsobject類。關於繼承,我們後續教程會更多的討論。
接著,宣告例項變數"filllevel」,為了更容易表現百分比,我們特意指定它為"float」型別。
下一行,宣告"addgas」方法,「-」表示這是乙個例項方法,而不是類方法。「(void)」部分意味著方法執行結束時不返回任何東西。如果方法要返回乙個整型,把這部分替換為」(int)」,其他型別依此類推。最後,我們以分號結束方法的宣告。 實現
1. #import "car.h"
2.
3. @implementation car
4.
5. -(void) addgas
8.
9. @end
好了,我們將要模擬為油箱加汽油的場景。同樣,我們引入介面檔案car.h。在addgas方法的地方,我們還可以增加更多的方法,但,今天僅僅侷限於讓大家更好地理解類的工作,而不是如何去完善乙個類。
下一節
挑戰 呵呵,本系列的這部分是有點小理論了,沒有太多東西可以實踐。無論怎樣,我建議你今周在
學習第二天
linux系統的檔案型別及許可權的相關知識 1.普通檔案 l 連線檔案 d 資料夾 表示不同的檔案型別 2.檔案許可權 r 可讀 w 可寫 x 可執行 3.chmod 修改檔案許可權,修符號或者使用八進位制 linux的基礎命令 cd 切換目錄 ls 檢視內容 表示當前目錄 上一級目錄等 touch...
第二天學習
快捷鍵 功能ctrl alt t 啟動終端 print 全屏截圖 ctrl alt a 截圖alt tab 切換視窗 shift alt tab 反向切換視窗 super d 顯示桌面 super e 檔案管理器 super l 屏鎖介面 super up 最大化視窗 super down 恢復視窗...
學習第二天
製表符和換行符 換行符 n 的作用是是來游標跳到下乙個新行,輸入完一行內容後游標下移一行 而製表符 t 的作用是 跳格 即到自下乙個 製表位置 在系統中乙個 製表區 佔8列,相當於4個或8個空格符。正斜槓和反斜槓 正斜槓 是斜率是正數的斜槓,反斜槓 是斜率為負數的斜槓 這個世界上就只有microso...