本文內容純屬筆者**寫多了後的個人理解,如有疏漏請多多包涵,如有錯誤煩請指正,如有想法交流非常歡迎!在我剛開始學習程式設計的時候,「物件導向」一詞曾經在很長一段時間內給我巨大的困惑。
前段時間,有個非專業的朋友也問了我這個問題:「什麼是物件導向?我聽了很長時間了,始終沒理解什麼是物件導向」。我努力地把我對這個概念的理解全部說給他聽,可是最後卻發現,他並沒有對這個名字理解得更加明白。
注意標題中「徹底」一詞。
從我自己的經歷來看,沒有編寫過面向過程(不是物件導向)語言的**,是不能真切體會到沒有「物件導向」所帶來的痛點的,只有經歷這些**編寫實踐,才能徹底理解「物件導向」解決了哪些問題,又是怎麼解決的,又經歷了哪些關鍵性的問題。
就和「雜交水稻」是農業方面的技術一樣,「物件導向」是軟體行業的一項技術。
特殊之處在於,由於軟體(也就是程式),是一種純粹的人的腦力勞動(996可能也算體力勞動?),所以軟體方面的技術也是改造腦力勞動的技術,是改進軟體生產人員「思想方式」的一項技術。
程式設計師在程式設計中的思考方式,完全可能被他用到其他地方,因而從這個意義上說,「物件導向」改變了人的思考方式,它也可以算的上一種「思想」,這種思想叫「物件導向思想」。其實不光是軟體行業,任何行業都一樣,人通過勞動改造客觀世界的同時,也在通過勞動改造自身,任何勞動都會反作用於自己的認知意識,只不過軟體行業更直接。
軟體開發就像做數學題,有時題很簡單,畫兩筆就做出來了,有時題目很複雜,想幾天都沒做出來(然後找老師,結果發現是題看錯了),總而言之,軟體開發的效率具有很大的不確定性。
而且,對於動輒幾萬行的產品級程式來說,這就像一道超長的高考數學題,期間任何乙個等於號算錯了,最後都是滿盤皆輸。
在了解軟體開發的特殊性後,就能理解「提高軟體開發效率」是一項多麼迫切的需求。
物件導向技術就是出來解決這個問題的,儘管如此,它並沒有完全、完美地解決這個問題,目前,軟體開發效率仍然遠低於社會對軟體產品的需求。
答:通過提高**復用率的方式。
**復用,就是指之前做其他程式的**,可能已經寫好了幾千行幾萬行,拿過來,稍加修改,甚至不改,直接複製+貼上拿到新的軟體上面去用,這就叫**復用。
如果還用做高考數學題打比方,就是原來做過的原題,結果高考只是改了個數字,那麼你就把背過的原題答案直接照抄,改幾個數值,算出個新值就行了,這就太爽了,省的想了。
當然仔細想想,就會發現這是很難遇到的事情,畢竟大多數人高考從來都考不到這種原題。程式設計師也一樣,縱使他想復用**,但是他的**不允許,多數情況程式設計師會發現,為了把他之前寫的**移植到新程式上所花費的時間、精力,和從頭開始重新寫這個新程式所花費的時間、精力差不多,甚至更多,非但不省功夫,可能更費工夫。
為什麼會出現這樣的情況呢?答案很簡單:因為不是所有的**都是方便復用的。很顯然,那些方便復用的**顯然要遵循一定的編寫規範、規章制度,或者說,寫出容易復用的**是要遵循一定的科學規律的。
打個說,你不能在**裡寫一些亂七八糟的東西,就好比記筆記,當時記的時候非常潦草,再看的時候字就不認識了,這樣的**(筆記)怎麼能達到「復用」的目的呢?
往粗略得說,把物件導向理解成一種**編寫「規範」、「規章制度」對於非專業人士來說也未嘗不可。但是應該指出,物件導向的含義可絕不僅僅限於「規範」而已,在寫**的時候,一方面,當然要遵循一定的規範,另一方面,就要開始思考「用」的時候,為復用做準備了。
物件導向技術,可以說是一整套提高**復用率的解決方案。總而言之,就是讓程式設計師的心血能積累下來,不是每次都重頭再來。
總得來說,物件導向有三大關鍵性的名詞:封裝、繼承、多型。
至於這三大名詞都是幹什麼的,這裡簡單提一下,只是粗略的回答,可能解釋得並不全面。
封裝:就是用來防止犯錯的,約束程式設計師,讓他更難寫出錯誤的**。
繼承:就是**復用,這個非常切題。
多型:和封裝通過約束程式設計師來提高**在將來復用性的方式不同,多型是通過方便**的使用來提高**復用率的,總的來說,多型提高了**編寫以及復用時的靈活性。(這個是最難理解的,我記憶中很多文章會舉「開車」和「開門」的例子,這裡我不用這種方式)
有生之年可能再寫另外一篇文章細說這三大名詞。
什麼是面向過程?什麼是物件導向?
論語 述而 舉一隅,不以三隅反,則不復也。簡單來說就是舉一反三,我們知道計算機大神會許多種程式語言,對於一門新的語言他們只要乙個月或者幾個星期就可以精通。而對於我們這種程式設計的初學者學會一門語言都感覺好難,更別說精通了。其實主要還是我們的方法不對會接,我們沒有一種程式設計的思維所以我們學起來比較困...
什麼是物件導向
什麼是物件導向 物件導向,就是,思考問題的方法,以物件為主體,眼睛看什麼都是物件 說 物件 其實還是不好懂,因為這個概念是直接從英文翻譯過來的 對中國人也許說,面向東西,面向物體 抽象的物體 面向事物,之類的翻譯或許更好理解 為什麼說是物件導向呢,是為了和 面向過程 相對以前 物件導向 的程式概念等...
什麼是物件導向?
物件導向程式設計 基本定義 物件 object 一切客觀實體的抽象,即將現實世界中的事物抽象成物件 類 class 定義了一件事物的抽象特點。如 狗 是乙個類,它包含狗的一切特徵和行為,是乙個模板 物件 object 是類的例項。如 名叫pyton的臘腸狗 物件導向的起源 1.以c為例他是結構化的語...