一、引言
當(dāng)我們打開招聘網(wǎng)站時(shí),通常看到職位要求的第一條便是“有面向?qū)ο缶幊趟枷搿保@一條會(huì)被大多數(shù)人忽視,心想“不就是寫幾個(gè)類嗎,我將具體的事物抽象一下就是嘍!”,對,你說的一點(diǎn)都沒錯(cuò),但我要說,你對面向?qū)ο蟮乃枷脒€只停留在表層。
當(dāng)我們遇到一個(gè)問題或者是接觸一種新的思想時(shí),往往只關(guān)心其字面上的意思,并沒有真正的去深究這其中的道理,這種淺嘗輒止的思維方式已經(jīng)根深到大多數(shù)人的思維習(xí)慣中。科學(xué)之所以誕生 在西方,與西方人刨根問底的精神是離不開的。
當(dāng)芝諾提出飛矢不動(dòng)論(飛著的箭在任何瞬間都是既非靜止又非運(yùn)動(dòng)的)時(shí),所有古希臘人都
芝諾問他的學(xué)生:“一支射出的箭是動(dòng)的還是不動(dòng)的?”“那還用說,當(dāng)然是動(dòng)的。”“確實(shí)是這樣,在每個(gè)人的眼里它都是動(dòng)的。可是,這支箭在每一個(gè)瞬間里都有它的位置嗎?”“在這一瞬間里,它占據(jù)的空間和它的體積一樣嗎?”“有確定的位置,又占據(jù)著和自身體積一樣大小的空間。”“那么,在這一瞬間里,這支箭是動(dòng)的,還是不動(dòng)的?”“不動(dòng)的,老師”“這一瞬間是不動(dòng)的,那么其他瞬間呢?”“也是不動(dòng)的,老師”“所以,射出去的箭是不動(dòng)的?”
會(huì)參與到這個(gè)看似無稽的問題中,但正是因?yàn)檫@樣的探索和質(zhì)疑之聲才促進(jìn)了文明的發(fā)展。在我國,甚至比芝諾更早,就已經(jīng)有人提出了類似的問題,例如“飛鳥之影,未嘗動(dòng)也”等言論,但這都僅僅停步于此,如果誰去探討這樣的問題,會(huì)被當(dāng)作是不學(xué)無術(shù)。
二、一個(gè)實(shí)驗(yàn)
好,請你耐住性子,在引入主題前,我先請你做個(gè)實(shí)驗(yàn):
假設(shè)存在一片虛無空間,里面完全為空,現(xiàn)讓你創(chuàng)建一個(gè)適宜人類居住的生活環(huán)境,那么請問,你會(huì)如何做,如何創(chuàng)建?這里,請你先思考三分鐘再往下看。
思考三分鐘哦。好,我想沒有人的想法會(huì)脫離下面的這些:
1. 溫度,空氣,水,土壤,光等生命要素。
2. 山川,河海等地理環(huán)境。
3. 森林,各種動(dòng)植物,微生物。
4. 各種自然規(guī)律。
5. 生活要素。
6. 其他。
三、面向?qū)ο?/p>
好,以上這些都是我們根據(jù)自身的認(rèn)知模型所創(chuàng)造出來的具體事物,而你自己也默默的充當(dāng)了一次造物主的角色,那么提出今天的問題:在計(jì)算機(jī)的世界里,什么是面向?qū)ο竽兀?/p>
所謂面向?qū)ο螅矗河?jì)算機(jī)世界是人類真實(shí)世界的映射,而真實(shí)世界中的人類認(rèn)知模型概念,我們在計(jì)算機(jī)編程中把它統(tǒng)稱為類,而以類的方式構(gòu)建程序模型,我稱之為面向?qū)ο缶幊獭?/strong>
也許你還不太了解,就拿上面的實(shí)驗(yàn)比喻:
那塊虛無空間在計(jì)算機(jī)中,可類比計(jì)算機(jī)中的內(nèi)存;
你所創(chuàng)造出的物體,在面向?qū)ο缶幊讨蟹Q之為實(shí)例;
你的認(rèn)知模型(貓,狗等概念)在編程中稱之為類。
講到這里,你可能就會(huì)體會(huì)到不管是Java,C++亦或是其它語言的書籍當(dāng)中,你見到的第一句話就是“萬物皆為類”,這么五個(gè)字,它恰恰也詮釋了什么叫面向?qū)ο缶幊蹋苍S你現(xiàn)在還不明白,但等你有足夠多的編程經(jīng)驗(yàn)后,終會(huì)發(fā)現(xiàn)這五個(gè)字的深刻含義。
四、如何創(chuàng)建類
既然知道了面向?qū)ο缶褪敲嫦蝾悾敲次覀儜?yīng)如何來創(chuàng)建類呢。要知道一只貓之所以區(qū)別于一只狗,是因?yàn)樗兄煌诠返奶匦裕纾穆暰€可以使它的叫聲為“喵”,它的胡子可以幫它抓到老鼠,它發(fā)達(dá)的肌肉系統(tǒng)可以幫助它跳得很高等等,一切屬于貓的屬性,都決定了它是一只貓。所以當(dāng)一個(gè)物體具有了某方面的屬性后,它便獲得了相應(yīng)的能力,所以我們在創(chuàng)建類之前,必須明確這是個(gè)什么類,它應(yīng)該具備哪些屬性,如果它多了某種屬性,它就不再是貓,那么這個(gè)屬性就是不能要的。所以創(chuàng)建類的思維方法,我總結(jié)如下(希望重點(diǎn)牢記):
1.計(jì)算機(jī)中要盡可能的還原真實(shí)世界,所以要提高自己對真實(shí)世界的認(rèn)知水平,為類賦予它應(yīng)有的屬性,去掉那些本不屬于它的屬性。
2.屬性決定了類所具有的能力,能力反映了類所具有的屬性,如果這個(gè)類只有g(shù)et和set方法,那么這便不是個(gè)類,只是存儲(chǔ)數(shù)據(jù)的一個(gè)結(jié)構(gòu)罷了,那這個(gè)類的設(shè)計(jì)也是失敗的。
3.打破思維慣性,嘗試尋找類與類的差異與共性,將共性升華,使其變成抽象類,在你自己的認(rèn)知水平上構(gòu)造連接虛擬與現(xiàn)實(shí)的模型框架。抽象類之所以不能實(shí)例化對象,是因?yàn)槿绻幻佬g(shù)老師讓你畫一只哺乳動(dòng)物,那你知道要怎么畫嗎,唯獨(dú)他說讓你畫貓,你才會(huì)畫。
4.類不僅僅包括我們看得到摸得到的事物,還包括諸如管理制度,自然規(guī)律,社會(huì)禮法等,所以類是開放的,多元的,所以你的思維要保持廣度和深度。
5.時(shí)刻以造物主的身份,創(chuàng)造并設(shè)計(jì)你的軟件構(gòu)成,讓它符合真實(shí)世界的認(rèn)知。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.