您好,登錄后才能下訂單哦!
OOP,iOS,MVC
何政達
【前言】:寫這篇文章的目的是總結(jié)一下這幾天學到的有關(guān)iOS編程的有關(guān)知識點。主要分三部分:OOP的設(shè)計理念;iOS的構(gòu)成;MVC的具體應(yīng)用。
Part I :OOP
說起OOP,大家都知道是什么——面向?qū)ο蟪绦蛟O(shè)計(Object-OrientedProgramming)。但是我們?yōu)槭裁匆褂眠@樣的一種設(shè)計模式來進行我們的程序設(shè)計呢?記得一開始學習編程的時候是小學六年級,當時學習的是BASIC;上了初中以后學習PASCAL語言;上了高中開始學習C語言;到了大學之后逐漸熟悉了Java,Python,Object-C。在常用的設(shè)計模式當中,面向過程和面向?qū)ο筮@兩種設(shè)計模式是使用最廣泛的。面向過程往往用于一個具體任務(wù)的設(shè)計實現(xiàn)(比如在科學計算當中具體算法的實現(xiàn));而面向?qū)ο蟮脑O(shè)計模式往往是針對可視化程序、網(wǎng)絡(luò)以及移動程序設(shè)計的;在這些程序當中,可能沒有一個真正線性的從頭到尾的“流程”。比如一個程序上有許多按鈕,用戶可能隨意按任何一個按鈕,而且人和人之間選擇的方式又有所區(qū)別,因此順序式的程序設(shè)計顯然不能滿足我們對于程序的高要求。那么下面我們就用非常簡單的語言來描述一下什么叫面向?qū)ο蟪绦蛟O(shè)計。
面向?qū)ο蟪绦蛟O(shè)計的靈魂概念是“對象”(別想歪了。。。。)。一個對象就是一個“實例物體”,它具有兩種最基本的屬性:(1)將自己與別人進行區(qū)分的instantvariable(2)自己可以執(zhí)行的一些method。從這我們就可以知道我們使用一個對象的方式其實非常簡單:利用instant variable找到我們想用的對象,然后再使用方法調(diào)用來運用相關(guān)的方法來完成任務(wù)。對象與對象之間的協(xié)作也是非常重要的一個方面,我們使用一種所謂“protocol”的方法來進行這樣的協(xié)作,用來完成更復(fù)雜的任務(wù)。當然還可以有delegate這樣的復(fù)雜關(guān)系(一個對象的方法會使用另一個對象的方法)。
那么我們?nèi)绾稳?/span>build一個對象呢?這就需要一個抽象化的思維:類。比如我們?nèi)?,你和我都是人的實例(也就是對象),我們有自己的名字、年齡、身高、體重,這些數(shù)據(jù)就是我們的instantvariables;同時我們還擁有一些方法:說話、唱歌、吃飯等等,這些方法說明了我們可以做什么事情。但是人作為一個概念卻具有廣泛的共性,這樣我們就可以將這樣的共性提取出來,和對象一樣,進行兩部分的設(shè)計:(1)instantvariables(2)methods。當我們建立好了一個類以后,我們就可以利用類中的Init(初始化)方法來新建一個對象并對其進行初始化。而對于Instantvariable(在Object-C當中稱為property)我們也會有相應(yīng)的getter與setter來進行選擇和處理。
要想良好的使用OOP的程序設(shè)計模式,思考方式的轉(zhuǎn)變必不可少。原來我們都是以“算法”為中心,以具體的步驟為中心。但是在OOP設(shè)計模式中,我們更關(guān)心的是Object之間的相互協(xié)作來完成復(fù)雜的任務(wù)。而且在OOP當中,重用性和封裝程度是非常重要的兩個指標,我們需要盡可能增加我們類的重用性以及盡可能將我們需要的功能封裝到類當中。當然如果我們需要對類進行進一步的細節(jié)化(但又不是直接新建一個object),那么這個時候就開始了inherite(繼承)的觀念。目前我還沒有學到有關(guān)于繼承的深層次的東西,因此這次就不在這里敘述。
總結(jié)一下,OOP的核心就是:類àObjectàObject之間的協(xié)作。
iOS
什么是iOS?iOS包括哪些東西?這是我們在進行iOS開發(fā)之前必須要搞清楚的問題。iOS是運行在iphone以及ipad上的操作系統(tǒng)。它是Unix為底層的一個移動端操作系統(tǒng)。而在unix kernel之上又加了許多的應(yīng)用和接口(API),以及相應(yīng)的框架(Framework)。因此iOS最核心的應(yīng)該是:(1)Objective-C語言(2)Cocoa Touch框架(3)其他的重要服務(wù)(視頻、音頻、網(wǎng)絡(luò)、游戲等等)。在StanfordCS139P第一講的PPT當中有詳細的介紹。因此在這里就不贅述了,如果好奇想了解更多,不妨去看看第一講的PPT。因此學習iOS程序設(shè)計最困難的也就是掌握Cocoa Touch以及iOS包含的眾多Framework。我們要清楚:所有的Framework都是OOP的,它們都使用OOP的設(shè)計理念來進行設(shè)計并進行整合的。因此整個iOSprogramming就是OOP。這點非常的重要。
MVC
在iOS編程當中,我們使用的設(shè)計模式是MVC(Model-View-Controller)。那么下面就分別按照Model,View,Controller進行總結(jié)。
Model顧名思義就是你的程序是做什么的,你的程序的具體實現(xiàn)思路怎樣(注意:在model當中的邏輯是完全不考慮UI的,我們就在純粹的思維上去進行思考)。它會包含你的程序所需要的所有數(shù)據(jù)結(jié)構(gòu)以及數(shù)據(jù)結(jié)構(gòu)之間的相互作用關(guān)系。這就是model。有了model,就知道程序是如何去做的了。
View就是我們程序和用戶進行交互的地方,也是我們?nèi)绾卧O(shè)計讓我們的程序去執(zhí)行的地方,但是注意:View完全不知道我們要執(zhí)行的是什么東西。它只聽Controller的話。Controller讓它干嘛,它就干嘛。讓它顯示什么就顯示什么。
Controller是連接Model和View的橋梁,也是我們需要在Xcode編程當中花大力氣去編寫的。Controller可以向Model詢問,也可以向View詢問。
Model,View,Controller之間的關(guān)系:
(1) Controller可以指向Model以及View
(2) Model絕對不能和View進行互動
(3) Model如果改變想提醒Controller,需要使用一種類似于“radio”的方式進行
(4) View如何受到互動(比如用戶按了一個按鈕),那么它會以target-action的方式告訴Controller,然后等待Controller告訴它下一步應(yīng)該如何去做。
(5) View也會和Controller有兩種方式的互動:一種稱為Data Source,另外一種是“did,should, would”形式的。這個在不同的UIView的Object中會有應(yīng)用。
如果我們熟練掌握了上面5種MVC中的交互方式,我們就能很好的使用Xcode以及iOS中的Framework,因為它們的設(shè)計都是基于MVC的。
【總結(jié)】:在上面我們簡單的總結(jié)了OOP,iOS以及MVC的相關(guān)知識點。當然我才剛剛開始接觸iOS,后面還有很長的路要走,要寫許多許多自己的class;也要熟悉iOS所提供的Framework以及相應(yīng)的SDK。千里之行始于足下,加油吧。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。