建体彩网|中彩网双色球连号|
?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

新蒲京澳門賭場網站:我的面向對象程序觀

?

作者:大年夜哥

email: [email protected]

日期:8/7/2001 5:30:26 PM

/**

* title:我的面向工具法度榜樣不雅

* 新蒲京澳門賭場網站description:描述我對面向工具的一些理解,思惟上并不成熟,文章隨時都在更新,盼望大年夜家都來介入評論爭論

* copyright:copyright (c) 2001

* company:matrixfox

* @author 莫特捕快

* @version 本文章還在繼承更新中。

*/

我的面向工具法度榜樣不雅

1)面向工具觀點的一些誤解

“面向工具”是一個如今被人叫爛的詞匯,就像去年人們都愛好把自己的公司打上“.新蒲京澳門賭場網站com”的標記一樣。著實有若干人能真正理解這個詞匯呢,很難說。我愛好這樣來比喻人們對“工具”一詞的濫用。“工具”就好比人們常常說的“酷”和“爽”,很多人并不仔細斟酌這兩個詞的區別,在很多環境下他們是通用的,“酷”和“爽”平日表達“心情不錯”的意思,你可以在你玩的痛快的時刻,大年夜聲的叫喊“太酷了,太爽了”,這個時刻兩個詞匯是通用的。然則你可以說“這小我很酷啊”,然則你不能說“這小我很爽啊”。人們對“工具”這個詞匯的濫用就發生在這里,“面向工具”和“基于工具”就好比“酷”和“爽”,這是兩個不合的觀點,然則人們平日將這兩個詞匯混為一談,一律用“面向工具”來表達。常見的差錯可以在此枚舉一些:

1)有小我歡欣鼓舞的和你說“我不愛好 flash 4 的腳本說話,flash 5 版本的 action script 采納了新的面向工具的“.”語法,寫起來很愜意。我現在不停用 flash 5 來做器械。”(同樣的話語也發生在 director 的 lingo 腳本說話中)

2)visual新蒲京澳門賭場網站 basic 采納了面向工具的屬性和措施,比起以前的 basic 說話新蒲京澳門賭場網站有了很大年夜的前進。

3)javascript 是面向工具的。

等等。

平日聽到類似的話,你都要賣力核閱措辭之人,闡發他說的話。可以肯定一點,他并非真正相識什么是面向工具的思惟。很多人沒有區分“面向工具”和“基于工具”兩個不合的觀點。面向工具的三大年夜特征(封裝,承襲,多態)卻一弗成,平日“基于工具”應用工具,然則無法使用現有的工具模板孕育發生新的工具類型,繼而孕育發生新的工具,也便是說“基于工具”沒有承襲的特征,而“多態”是表示為父類類型的子類工具實例,沒有了承襲的觀點也就無從討論“多態”。現在的很多盛行技巧都是基于工具的,它們應用一些封裝好的工具,調用工具的措施,設置工具的屬性。然則它們無法讓法度榜樣員派生新工具類型。他們只能應用現有工具的措施和屬性。以是當你判斷一個新的技巧是否是面向工具的時刻,平日可以應用后兩個特點來加以判斷。“面向工具”和“基于工具”都實現了“封裝”的觀點,然則面向工具實現了“承襲和多態”,而“基于工具”沒有實現這些,切實著實很饒口。

2)java 比 c++在貫徹面向工具的思惟方面加倍徹底。

我近來上的進修班的師長教師對我說:“c++ 是打著面向工具的幌子,干著歷程編程的勾當”,這句話我異常的附和,而且我不停以來也是這么覺得的。然則仔諦聽他解說后,我才發明,我是只是理解了這句話前兩層的意思。然則還有一層意思我沒有理解。你可能要問,“難道 c++ 不是面向工具的嗎?”。事實上 c++ 是真正的面向工具編程說話。然則它也是歷程編程說話。為什么怎么說呢, c++ 的孕育發生不只斟酌了面向工具的特點,而且也更多的斟酌了對 c 說話的向后兼容,使得 c++ 這種雜合說話體現出“歷程”和“工具”編程的雙重性。你平日既可以繼承用 c++ 編譯器來編寫傳統的 c 法度榜樣,也可以應用 c ++ 的類庫或者編寫自己的類來作面向工具編程。這種“兩面性”使得人們可以繼承保留原有的 c 代碼,同時也阻礙了面向工具思惟的推廣。

舉個簡單的例子,94 年的時刻,我開始進修 c++ ,當時是進修 turbo c++ 自己帶的一個叫作 turbo vision 的類庫來做項目。我的同硯也用 turbo c++ ,然則他一點也沒有進修過 c++ 這個說話,他只是用 turbo c++ 編譯器來從新編譯他曩昔用 turbo c 寫的法度榜樣,然后他自滿的對我說:“瞧,我用 c++ 做的器械”,似乎意思是說“我用 c++ 開拓項目了”,在那個 c 比 pascal 高級, pascal 比 foxbase 高級的年代里, c++ 的標簽絕對是個很"酷"的標志。我著實很清楚他的行徑。這便是“c++ 是打著面向工具的幌子,干著歷程編程的勾當”的第一重意思,也便是說, c++ 編譯器對 c 法度榜樣的兼容性造成了最底層的“歷程勾當”。在海內有很長一段光陰,人們都是在用 c++ 編譯器做 c 編程。 我當時在想,比起我那個同硯,我才是真正相識面向工具的人。 我進修了 c++ 說話,我相識封裝,承襲和多態,我進修了 turbo vision 的類庫,我派生了 turbo vision 的類庫并編寫了自己的類,以是我是相識面向工具的。從某種意義上說,我這么想是對的。然則從面向工具法度榜樣員的分類來說,我又不完全相識面向工具的思惟。從事面向工具編程的人按照分工來說,可以分為“類庫的創建者”和“類庫的應用者”,平日創建類庫的人才是真正相識面向工具思惟的人,他們創建類庫提供那些“客戶法度榜樣員”來應用,他們從頭開始制作類庫,他們進行面向工具的闡發,設計,實現的全歷程。當進修完 c++ 后,我的第一個感到是,從頭創建一個類庫真是很麻煩的工作,平日用 c 歷程編程很輕易實現的功能,你必須按照類的思惟來重新建立工具,然則一旦類庫建立好后,應用類庫和派生類,以及掩護代碼都是異常愜意的工作。應用類庫的人并不都是具備了面向工具思惟的人,平日知道若何承襲和派生新工具就可以應用類庫了,然而我們的思維并沒有真正的轉過來,應用類庫只是在形式上是面向工具,而實質上只是庫函數的一種擴展。這便是我理解的“c++ 是打著面向工具的幌子,干著歷程編程的勾當”的第二重意思,實際上用 c++ 編程的人,大年夜部分不自己創建類,而是應用類庫,這樣就造成了他們把類庫作為一種高檔的庫函數庫來理解,并沒有真正理解面向工具的思惟。

c++ 的面向工具的思惟推廣很慢,直到 mfc ,owl ,vcl 這樣的類庫出來今后,人們才垂垂的吸收了一些面向工具的思惟。為什么這條面向工具的蹊徑那么難走?我的謎底是“由于 c++ 給了我們第二條蹊徑去走歷程編程”,當然緣故原由是為了斟酌兼容 c 說話,然而恰是因為有了第二條老路才使得使得我們不會再去斟酌新的面向工具編程思維要領。

直到呈現了 java ,才真正迎來了面向工具的曙光。java 真恰是革命性的器械嗎?不是,所有現有的 java 的思惟都是承襲自其他的說話和技巧,沒有什么革命的地方,虛擬機的觀點早在 20 年前的 ucsd pascal 中就采納了,只是當時的機械速率太慢,虛擬機仿真造成的機能低落對付當時的硬件來說是相稱嚴重的。java 本身的很多器械也借鑒了 c++ 說話,連它的開創人也說,java 是 "c++--" 也便是說 java 去除了 c++ 的一些不太好的地方。以是說 java 本色上沒有什么革命的器械,以是那些對 java 的謳歌之詞都是 sun 公司的鼓吹手腕。沒有一種說話會長久的存鄙人去,你很難說你的孩子在二十年后還會繼承應用 c++ 或 java,以是我們要拋開這些浮華詞匯的背后,找尋真正我們必要進修的器械。否則本日我們大年夜家都是微軟的傀儡,翌日 sun 公司起來了,我們就都是 sun 的傀儡。仔細鉆研美國電腦技巧成長的歷史,美國人一貫愛好象第三天下兜售他們的逾期技巧,而他們始終可以自滿的說,我們將永世領先你們第三天下國家二十年。我們始終在跟在美國人的后面進修他們的器械,這切實著實讓人擔憂。我說著說著又跑題了。java 雖然沒有什么真正的革命性的器械,然則 java 在真正推動面向工具編程思惟方面是功弗成末的。應用 java 編程,你無需斟酌到向后兼容什么說話的問題,它是從新建立的說話,你在掌握這門說話之前,你必須將自己的編程思惟由歷程編程徹底轉向面向工具編程,由于 每個 java 法度榜樣,本身便是一個類,你編寫任何 java新蒲京澳門賭場網站 法度榜樣,你都不自覺的在構造一個工具模板,沒有第二條蹊徑,只能是面向工具編程。( 我異常愛好 java 將所有類定義和類聲明放在一個文件中,而不是象 c++ 那樣,cpp 和 .h 文件是分開的。平日剛剛開始進修 java 的人不習氣,不過進修一段光陰,你就會體會到它的好處了。), 應用 java 編寫法度榜樣(我更愛好說---編寫類,而不是法度榜樣)的時刻,你會必須從一個工具的角度來斟酌問題,由于你的法度榜樣便是一個類,你必須斟酌把哪些器械作為成員變量,哪些作為措施,要天生幾個類,哪些變量是成員變量,哪些是靜態的變量和措施,等等。平日做完一個項目,你就已經將面向工具的思惟運用此中了。之以是說 java 在面向工具的貫徹方面要比 c++ 徹底,便是由于你只能應用面向工具的要領來編寫 java 法度榜樣,而 c++ 卻可以采納別的一條非面向工具的要領來編寫法度榜樣。java 并沒有什么真正革命性的器械,它最大年夜的供獻當然是推廣面向工具的思惟了。

java 總的來說是低落了繼承歷程編程的可能性,然則并沒有完全打消它。面向工具是一種思惟,是我們斟酌工作的措施,平日體現為為我們是將問題的辦理按照歷程要領來辦理呢,照樣將問題抽象為一個工具來辦理它。很多環境下,我們會不知不覺的按照歷程要領來辦理它,由于我們平日習氣于斟酌辦理問題的措施,而不是斟酌將要辦理問題抽象為工具去辦理它。很多新的技巧使我們加倍趨向于歷程而非工具的思惟。最顯著的便是 rad (快速利用法度榜樣開拓)可視技巧的呈現,人們可以經由過程設置屬性和編寫事故函數來快速開拓利用法度榜樣,編寫事故函數便是范例的按照歷程編程的思惟(至少我是這么覺得的),試問有若干人能區分vb 和 delphi ,c++ builder ,java 的事故函數編寫有什么本色的差別, 后三者都采納了 delegation (委托模型),在 java 中是經由過程 anonymous 類(無名類),或者 adapter 類來實現delegation,這是一種面向工具的構想,然則 vb 不是,以是這底層的差別都被上層的相似性所抹殺了,應用 jbuilder 編程的時刻,我們假如沒有仔細鉆研 java 的 awt.event 編程要領的話,平日也是把它算作普通俗通的“類 vb"的編寫要領來寫法度榜樣,而實際闡發它在后臺所天生的代碼,你才能明白這些代碼是真正的面向工具的,然則假如你只是簡單的把它算作可視編程對象,你是永世不會明白什么是”委托模型“,什么是面向工具編程的。這是我理解的 “c++ 是打著面向工具的幌子,干著歷程編程的勾當”第三重意思。無論是 c++ 照樣 java 都有可能走歷程編程的老路, java 低落的歷程編寫的可能性,然則假如你沒有具備面向工具的編程思惟,你照樣可能走面向歷程的老路的。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

建体彩网
黑龙江快乐十分派奖 和微信朋友一起玩的麻将 快乐赛车走势 排列五复式模拟投注 网球王子真人版 博客有多少粉丝才能赚钱 双色球选号天平 中特玄机图白小姐 pk10 街机电玩捕鱼可以下分