欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

了解在Flash中的編程工作第2/4頁

 更新時間:2007年02月15日 00:00:00   作者:  

18.2 面向?qū)ο蟮能浖_發(fā)中的重要概念

  在第四章中我已經(jīng)簡單的介紹了什么是面向?qū)ο蟮能浖_發(fā),你應(yīng)該還記得那個以“人”作為對象的例子,以及當(dāng)路遇惡狗而被惡狗攆這一事件發(fā)生時,他可以調(diào)用“撒腿就跑”這個方法來作為對這個事件的響應(yīng)。
 
  但不管怎么說,我不想因為這些例子而使你輕視了面向?qū)ο蟮能浖_發(fā)。事實上,面向?qū)ο蠛x深遠,涉及許多重要的概念,只有充分理解了這些概念的含義,你才算真正理解了什么叫面向?qū)ο?。很多概念你都?yīng)該知道,但限于篇幅,本節(jié)中我將講解其中最重要的九個。
  面向?qū)ο蟮能浖_發(fā)中九個最基本的概念:類、對象、屬性、方法、抽象、封裝、繼承、多態(tài),以及事件。

18.2.1 類和對象

  類是對象的軟件抽象,是創(chuàng)建對象的模板。例如,如果一個人被看作一個對象的話,則人這個物種就可以被看作一個類。類定義描述了包括數(shù)據(jù)和功能在內(nèi)的結(jié)構(gòu),對象由其創(chuàng)建。一個類表示一組相似的對象。對象是類的實例。

  為什么需要類,想象這樣一個情況,假如我們要編寫一個Flash游戲,里面要有一些能自主活動的小人,這些小人都有相同的體貌特征和活動能力,那么,若我們要為每個小人編寫程序的話,則工作量毫無疑問是巨大和重復(fù)的。在這種情況下,我們就應(yīng)該創(chuàng)建一個“小人”類,以后每當(dāng)需要一個新的小人時就從“小人”類生成一個小人即可。

  話說到這里,你一定想到了元件和實例的關(guān)系。沒錯,類和對象的關(guān)系與元件和實例的關(guān)系一樣,因為元件實際上就是Flash的內(nèi)建類。

18.2.2 屬性和方法

  屬性是數(shù)據(jù),而方法是函數(shù)。屬性是類知道的事情,而方法是類完成的事情。屬性和方法都是類的職責(zé)。面向?qū)ο蟮能浖_發(fā)是基于這樣的概念:系統(tǒng)應(yīng)由對象來創(chuàng)建,對象擁有數(shù)據(jù)和功能。屬性定義數(shù)據(jù),而方法定義功能。

  顯然,在面向?qū)ο蟮拈_發(fā)中,最重要的工作就是定義類。而定義類時,就必須定義它的屬性和方法。屬性的定義應(yīng)該是直接明了的,需要定義它的名稱和數(shù)據(jù)類型。方法的定義就是創(chuàng)建一個函數(shù)的過程,根據(jù)需要,你可以創(chuàng)建出能夠接受參數(shù)且能夠返回值的方法。

18.2.3 抽象

  世界非常復(fù)雜,為了處理它的復(fù)雜性,在軟件設(shè)計中,當(dāng)需要對事物建立數(shù)學(xué)模型時,我們有必要對事物進行泛化或抽象。還是以人作為對象,從招聘的角度看,我們需要知道這個人的姓名、性別、年齡、教育背景、工作經(jīng)歷,聯(lián)系方式,以及性格特點;而從相親的角度看,則需要知道這個人的年齡、身高、外貌、教育背景、家庭背景,甚至生辰八字。還是同一個人,只是對他(或她)進行了不同的抽象而已,對一個事物進行怎樣的抽象將依據(jù)你要設(shè)計的程序而定。

  抽象是個分析的過程,是在事物周圍繪制出一個清晰的框架的過程。抽象應(yīng)該包含應(yīng)用程序感興趣的功能、屬性、方法,而將其他因素忽略。這就是為什么招聘的抽象包含教育背景和工作經(jīng)歷,但不會包含生辰八字的原因。抽象的過程,就是定義類知道和要完成的事情的過程。

18.2.4 封裝

  盡管抽象告訴我們,對于招聘,我們應(yīng)該存儲應(yīng)聘者的教育背景和工作經(jīng)歷,但它沒有告訴我們該怎樣完成這些事情。封裝解決了如何為系統(tǒng)功能建模的問題。在面向?qū)ο蟮氖澜缰校覀円严到y(tǒng)建模成類,類也要建模為屬性和方法。設(shè)計類將如何完成這些事情的過程就被稱為封裝。

  封裝描述了如何在系統(tǒng)中劃分功能的問題。我們并不需要知道對象內(nèi)部是怎樣實現(xiàn)的。封裝暗示著我們能夠以任何方式構(gòu)建系統(tǒng),如果需要的話,還可以在日后再次修改其內(nèi)部的結(jié)構(gòu),只要系統(tǒng)中不同功能組件之間的接口沒有發(fā)生變化,那么對系統(tǒng)中一個功能部分的改變不會對系統(tǒng)的其他功能部分產(chǎn)生影響。

  封裝是把事物周圍的那個框架涂黑的過程。你可以定義任何想要定義的東西,但你并不需要告知外界你的做法。例如,當(dāng)你到銀行存取現(xiàn)金的時候,你并不需要知道銀行的數(shù)據(jù)中心是如何使用大型機、小型機和PC機來記錄你的賬戶信息的,它們使用著怎樣的數(shù)據(jù)庫和操作系統(tǒng),也根本無關(guān)緊要,因為它們已經(jīng)把賬戶服務(wù)的功能封裝起來了。你只需走到柜臺前,把存折遞給銀行的工作人員既可。通過隱藏起實現(xiàn)賬戶功能的細節(jié),銀行能夠在任何時候自由改變功能實現(xiàn),而不用費事得更換每一個用戶的存折。

  為了讓應(yīng)用程序容易維護和增加安全性及健壯性,需要限制對類的屬性和方法的訪問?;舅枷肴缦拢喝绻粋€類想獲取另一個類的信息,必需先征得同意,而不是直接拿來就用??紤]一下,在現(xiàn)實世界中其實也是按照這種方法工作的。如果你想了解其他人的姓名,你該怎么做?是直接詢問這個人他的姓名呢,還是偷走他的錢包看看他的身份證呢?

18.2.5 繼承

  不同的類之間經(jīng)常會存在相似性。兩個以上的類也會經(jīng)常共享相同的屬性和/或相同的方法。因為我們并不想重復(fù)編寫代碼,因此我們就要利用這種相似機制。繼承就是這種機制,它使你可以很容易的重用現(xiàn)有的數(shù)據(jù)和代碼。

  例如,學(xué)生都有姓名、地址、手機,也都能快跑。同時,老師也都有這些東西。毫無疑問,我們可以開發(fā)有關(guān)學(xué)生和老師的類,讓它們一起運行。實際上,僅需要先開發(fā)Student類,一旦它運行起來了,制作一份拷貝,就叫Teacher類,并對其進行一些適當(dāng)?shù)男薷募纯?。這樣做很容易,但并不完美。如果Student類中的源代碼出現(xiàn)錯誤將會怎樣?你將不得不在兩個地方改正錯誤。這將是索然無趣的工作。如果僅有一份代碼拷貝用于開發(fā)和維護,這樣不是更好嗎?

  這就是繼承的思想。使用繼承,就可以定義一個類來封裝學(xué)生和老師之間的相似性。新的類將有屬性name、address、mobileTelephone,以及方法run。我們可以把這個類命名為Person。

  一旦定義了Person類,就可以從它繼承出Student和Teacher類。我們稱Person是Student和Teacher類的超類,而Student和Teacher類則是Person類的子類。任何超類知道和完成的事情,子類也知道。因此,既然Person類遇到惡狗時能撒腿就跑,Student和Teacher類也能。

18.2.6 多態(tài)

  讓我們考慮一下這個例子。你很愛你的女友,你對她說“親愛的,我愛你”,你的女友熱情的擁抱你,你還得到了一個吻,你覺得這很不錯。然后,你來到了大街上,看到一位很有氣質(zhì)的美女,你也用跟女友打招呼的方式對這位美女說“親愛的,我愛你”,你將立刻得到有關(guān)你的神經(jīng)和品德方面的一些建議。隨后,你又來到醫(yī)院,對一老中醫(yī)說“親愛的,我愛你”,老中醫(yī)將毫不猶豫的拉過你的手腕,開始為你把脈。你心想,無論何時當(dāng)我遭遇這些對象并說“親愛的,我愛你”時,這種情況肯定就會發(fā)生—這就是多態(tài)。

  多態(tài)使得對象可以在事先不知道其他對象的類型時就與其他對象協(xié)作。
  從這次經(jīng)歷中你可以學(xué)到幾個有意思的經(jīng)驗:

  第一,多態(tài)阻礙了你與其他對象之間的交互。你并不區(qū)別其他對象的類型,你以同樣的方式對待他們。你的想法是其他對象都是人。多態(tài)是允許這種情況發(fā)生的一個概念。

  第二,不同的對象以他們自己的方式作出不同的響應(yīng)。你的女友擁抱你并給你吻;陌生的美女給你有關(guān)神經(jīng)和品德方面的建議;而老中醫(yī)則給你把脈。同一消息到達不同的對象,每一個完成的事情都是不同的。實際上,從各個對象的角度看,他們做了應(yīng)該做的事情。

  第三,多態(tài)可以實現(xiàn)一致而恰當(dāng)?shù)姆椒?。盡管每種對象都以適當(dāng)?shù)姆绞巾憫?yīng)了“親愛的,我愛你”,但還是要實現(xiàn)方法的不同版本。

  多態(tài)性主要包括兩個方面:
  運算符的重載:同一運算符可以作用在多種對象類型上。
  函數(shù)名重載:相同的函數(shù)名可以作用在不同的對象類型上,并產(chǎn)生不同的效果。

18.2.7 事件

  面向?qū)ο蟮能浖倪\行是隨著一個個事件的發(fā)生來進行的,這被稱為“事件驅(qū)動”。例如,當(dāng)你欣賞Flash動畫時,實際上是正在發(fā)生一個個“進入幀”事件,在這些事件中,F(xiàn)lash Player會呈遞每幀中的內(nèi)容,所以你就能看到畫面。

  同樣的,當(dāng)你點擊按鈕時,一個按鈕事件就發(fā)生了,該按鈕事件中的腳本就被執(zhí)行,這些腳本的作用可能是把你帶到特定的場景、特定的幀,或是鏈接到某個URL。

  在面向?qū)ο蟮某绦蛟O(shè)計中,整個軟件都是以事件驅(qū)動的,這意味著假如沒有任何事件發(fā)生,你的程序?qū)⒋绮诫y行,不過好在程序中總是有某些事情發(fā)生的,即使所有其他的事件都不發(fā)生,也會有時間流逝這一事件在時刻發(fā)生著。

  在本書后面章中的實際開發(fā)中,你將看到上述所有這些面向?qū)ο蟮母拍畹膶嶋H運用。

相關(guān)文章

最新評論