天天看點

《Objective-C入門經典》——2.1節Objective-C世界中的面向對象程式設計

本節書摘來自異步社群《objective-c入門經典》一書中的第2章,第2.1節objective-c世界中的面向對象程式設計,作者【美】jesse feiler,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

2.1 objective-c世界中的面向對象程式設計

objective-c入門經典

面向對象程式設計可能是現在最常用的程式設計範式了,但究竟什麼是面向對象程式設計卻并沒有一個清晰的定義。最常見的非正式描述(不是定義)是說它是一種使用對象—方法和變量的組合體,表示程式中的概念或實體對象—作為基本的建構塊的程式設計風格。在建構程式時,如果能夠将程式元件直接對應到實體世界中的對象和概念,就會使開發軟體變得更加容易,這是因為程式員可以在同一抽象層次考慮對象和軟體所模組化的概念。

除了需要了解基本的對象概念之外,還需要了解其他一些概念,包括資料抽象、封裝、消息、子產品化、多态以及繼承(這個清單來自于wikipedia上介紹面向對象程式設計的文章)。objective-c實作了所有這些概念,本章主要介紹資料抽象、封裝和子產品化。後續各章将會對剩下的概念予以介紹。

2.1.1 實作面向對象程式設計

盡管本書關注的是objective-c并且也不會将其與其他語言進行比較,但需要指出的一點是,在20世紀60年代面向對象程式設計開始流行時,人們對如何開發實際的程式是存有異議的,他們分為兩個派别。

面向對象語言—在過去幾十年中,很多純粹的面向對象語言被發明出來了,包括simula、ruby、eiffel和smalltalk。

面向對象添加(addition)—部分原因是讓程式員學習一門全新的語言是一件比較困難的事情,是以很多混合語言被開發出來了,其中包括c++、java、python、c#以及objective-c。面向對象特性也被添加進了諸如php之類的語言,甚至是fortran和cobol也增加了面向對象特性。

2.1.2 建構面向對象項目

在有了面向對象語言之後就可以開始建構面向對象項目了,但這僅僅是開始,可選擇的建構方式有很多種。由于objective-c幾乎隻用于建構mac os x和ios項目,是以本節将隻關注這兩類項目。

面向對象程式設計的主要目标之一是使複用既有代碼變得更加容易。當将代碼封裝進一個擁有結構良好的接口的正式對象中之後應該就能夠複用那段代碼了,設計該對象時所投入的精力會在将來複用該對象時得到收益的。

代碼複用是apple提供的開發環境中的關鍵部分,面向對象程式設計及其在objective-c中的實作為複用提供了基礎。ios和mac os x上的複用是以架構為基礎的。架構是一組實作開發者所關注的一些功能的相關類(和一些非類實體)。從本質上來講,架構是将一組類組織起來的工具,使用架構需要将所需的類引入到項目中,開發者所做的工作實際上是與架構中的類進行互動并使用和子類化這些類。

讀者在本書中将會接觸到cocoa和cocoa touch兩個架構(在本書中如果沒有明确地進行區分,兩個環境是可以互換的)。cocoa具備兩個方面:一個用于運作時,另一個用于開發。

在建立cocoa項目時通常是從xcode中的模闆開始的(讀者也可以從在developer.apple.com上下載下傳的示例開始)。這兩種方式都在檔案中提供了引入相關架構的import指令,讀者還可以添加任何所需的import指令。

2.1.3 架構初探

讀者一般會碰到兩組架構,正如前面所講的那樣,架構主要是一種組織結構,在xcode的organizer視窗或其他一些地方的文檔中可以找到這兩組架構的介紹資料。在mac os x上,各種架構本身被分為5層。

使用者體驗

應用程式架構

圖形和媒體(應用程式服務)

核心服務

整個結構的底層是darwin核心

在ios上,這5層為

應用程式

cocoa touch

媒體

os核心

與其他分層結構一樣,每一層能夠通路位于其下方的層,但無法通路位于其上方的層。是以,核心服務層的架構可以通路os核心(ios)和darwin(mac os x)中的類,但無法通路在它上方的層,如媒體和界面處理類。

在這個結構中有兩個架構幾乎是每個項目都需要通路的,在mac os x中,這兩個架構是

應用程式架構中的appkit

核心服務中的core foundation

在ios中,這兩個架構是

cocoa touch中的uikit

核心服務中的foundation

盡管架構中的大部分内容是類的集合,但它們還會包含其他一些實體。比如說,core foundation和foundation包含了諸如struct定義和typedef定義之類的c元素。對于這個結構而言,能夠在objective-c項目中使用原生c是非常重要的。

繼續閱讀