面向?qū)ο蠛兔嫦蜻^程的區(qū)別
面向過程編程思想思考問題時(shí)栽燕,我們首先思考“怎么按步驟實(shí)現(xiàn)?”并將步驟對(duì)應(yīng)成方法改淑,一步一步碍岔,最終完成。?這個(gè)適合簡(jiǎn)單任務(wù)朵夏,不需要過多協(xié)作的情況下蔼啦。比如,如何開車仰猖?我們很容易就列出實(shí)現(xiàn)步驟:
? 1.?發(fā)動(dòng)車??
? 2.?掛擋???
? 3.踩油門????
? 4.?走捏肢,你
面向過程適合簡(jiǎn)單掠河、不需要協(xié)作的事務(wù)。?如果猛计,我們需要思考“如何造車?”爆捞,你就會(huì)發(fā)現(xiàn)列出1234這樣的步驟奉瘤,是不可能的。那是因?yàn)橹笊燔囂珡?fù)雜盗温,需要很多協(xié)作才能完成。
面向?qū)ο?Object)編程成肘,更契合人的思維模式卖局。我們首先思考的是“怎么設(shè)計(jì)這個(gè)事物?”?比如双霍,思考造車砚偶,我們就會(huì)先思考“車怎么設(shè)計(jì)?”洒闸,而不是“怎么按步驟造車的問題”染坯。這就是思維方式的轉(zhuǎn)變。
面向?qū)ο笏伎荚燔嚽鹨荩l(fā)現(xiàn)車由如下對(duì)象組成:
1.?輪胎
2.?發(fā)動(dòng)機(jī)
3.??車殼
4.??座椅
5.??擋風(fēng)玻璃
為了便于協(xié)作单鹿,我們找輪胎廠完成制造輪胎的步驟,發(fā)動(dòng)機(jī)廠完成知道發(fā)動(dòng)機(jī)的步驟深纲;這樣仲锄,發(fā)現(xiàn)大家可以同時(shí)進(jìn)行車的制造,最終進(jìn)行組裝湃鹊,大大提高了效率儒喊。但是,具體到輪胎廠的一個(gè)流水線操作涛舍,仍然是有步驟的澄惊!
因此,面向?qū)ο罂梢詭椭覀儚暮暧^上把握富雅、從整體上分析整個(gè)系統(tǒng)掸驱。?但是,具體到實(shí)現(xiàn)部分的微觀操作(就是一個(gè)個(gè)方法)没佑,仍然需要面向過程的思路去處理毕贼。
我們千萬不要把面向過程和面向?qū)ο髮?duì)立起來。他們是相輔相成的蛤奢。面向?qū)ο箅x不開面向過程鬼癣!
面向?qū)ο蠛兔嫦蜻^程的總結(jié)
?都是解決問題的思維方式陶贼,都是代碼組織的方式。
?解決簡(jiǎn)單問題可以使用面向過程
?解決復(fù)雜問題:宏觀上使用面向?qū)ο蟀盐沾海⒂^處理上仍然是面向過程拜秧。
面向?qū)ο笏伎挤绞?/strong>
遇到復(fù)雜問題,先從問題中找名詞章郁,然后確立這些名詞哪些可以作為類枉氮,再根據(jù)問題需求確定的類的屬性和方法,確定類之間的關(guān)系暖庄。
面向?qū)ο缶幊痰恼Z言的三大特征簡(jiǎn)介
封裝(encapsulation,? capsul膠囊)
封裝指的就是將對(duì)象的屬性和方法封裝起來聊替,不需要外界知道內(nèi)部的細(xì)節(jié),實(shí)現(xiàn)方便的調(diào)用培廓。比如:我們使用Ipad惹悄,只需要直接觸屏使用即可,不需要知道Ipad內(nèi)部的細(xì)節(jié)肩钠。
繼承(extend)
繼承讓我們更加容易實(shí)現(xiàn)類的擴(kuò)展泣港。?比如,我們定義了人類蔬将;再定義Boy類就只需要擴(kuò)展人類即可爷速。實(shí)現(xiàn)了代碼的重用,讓我們不再重新發(fā)明輪子(don’t? reinvent? wheels)霞怀。
多態(tài)(polymorphism)
多態(tài)指的是同一個(gè)方法調(diào)用惫东,由于對(duì)象不同可能會(huì)有不同的行為。現(xiàn)實(shí)生活中毙石,同一個(gè)方法廉沮,具體實(shí)現(xiàn)會(huì)完全不同。?
比如:同樣是調(diào)用人的“休息”方法徐矩。?有人是睡覺滞时,有人是旅游,有人是敲段代碼滤灯;
對(duì)象的進(jìn)化史(數(shù)據(jù)管理和企業(yè)管理共通之處)
事物的發(fā)展總是遵循“量變引起質(zhì)變”的哲學(xué)原則坪稽;企業(yè)管理和數(shù)據(jù)管理、甚至社會(huì)管理也有很多共通的地方鳞骤。本節(jié)課類比企業(yè)發(fā)展窒百,讓大家更容易理解為什么會(huì)產(chǎn)生“對(duì)象”這個(gè)概念。
數(shù)據(jù)無管理時(shí)代
最初的計(jì)算機(jī)語言只有基本變量(類似我們學(xué)習(xí)的基本數(shù)據(jù)類型)豫尽,用來保存數(shù)據(jù)篙梢。那時(shí)候,我們面對(duì)的數(shù)據(jù)非常簡(jiǎn)單美旧,只需要幾個(gè)變量即可搞定渤滞;這個(gè)時(shí)候不涉及“數(shù)據(jù)管理”的問題贬墩。
同理,就像在企業(yè)最初發(fā)展階段只有幾個(gè)人的時(shí)候妄呕,不涉及管理問題陶舞,大家悶頭做事就OK了。
數(shù)組管理和企業(yè)部門制
企業(yè)發(fā)展中绪励,員工多了怎么辦吊说?我們很自然的想法就是歸類,將類型一致的人放到一起优炬;企業(yè)中,會(huì)將都做銷售工作的放到銷售部管理厅贪;會(huì)將研發(fā)軟件的放到開發(fā)部管理蠢护;
同理,在編程中养涮,變量多了葵硕,我們很容易的想法就是“將同類型數(shù)據(jù)放到一起”,?于是就形成了“數(shù)組”的概念政己,單詞對(duì)應(yīng)“array”芜飘。
這種“歸類”的思想膏执,便于管理數(shù)據(jù)、管理人介评。
對(duì)象和企業(yè)項(xiàng)目制
企業(yè)繼續(xù)發(fā)展,面對(duì)的場(chǎng)景更加復(fù)雜爬舰。?一個(gè)項(xiàng)目可能需要經(jīng)常協(xié)同多個(gè)部門才能完成工作们陆;一個(gè)項(xiàng)目從談判接觸可能需要銷售部介入;?談判完成后,需求調(diào)研開始研發(fā)部和銷售部一起介入;開發(fā)階段需要開發(fā)部和測(cè)試部互相配合敏捷開發(fā);?同時(shí)整個(gè)過程財(cái)務(wù)部也需要跟進(jìn)情屹。
在企業(yè)中坪仇,為了便于協(xié)作和管理,很自然就興起了“項(xiàng)目制”垃你,以項(xiàng)目組的形式組織椅文,一個(gè)項(xiàng)目組可能包含各種類型的人員。?一個(gè)完整的項(xiàng)目組惜颇,麻雀雖小五臟俱全皆刺,就是個(gè)創(chuàng)業(yè)公司甚至小型公司的編制,從行政后勤人員官还、財(cái)務(wù)核算人員芹橡、開發(fā)人員、售前人員望伦、售后人員林说、測(cè)試人員煎殷、設(shè)計(jì)人員等等。事實(shí)上腿箩,華為豪直、騰訊、阿里巴巴等大型公司內(nèi)部都是采用這種“項(xiàng)目制”的方式進(jìn)行管理珠移。
計(jì)算機(jī)編程繼續(xù)發(fā)展弓乙,各種類型的變量更加多了,而且對(duì)數(shù)據(jù)的操作(指的就是方法钧惧,方法可以看做是對(duì)數(shù)據(jù)操作的管理)也復(fù)雜了暇韧,怎么辦? ?
為了便于協(xié)作和管理,我們將”相關(guān)數(shù)據(jù)和相關(guān)方法封裝到一個(gè)獨(dú)立的實(shí)體”浓瞪,于是“對(duì)象”產(chǎn)生了懈玻。?比如,我們的一個(gè)學(xué)生對(duì)象:
有屬性:
年齡:18乾颁,姓名:高淇涂乌,學(xué)號(hào):1234
也可以有方法:
學(xué)習(xí)(),?吃飯(),考試()
表1?對(duì)象進(jìn)化史和企業(yè)進(jìn)化史
總結(jié):??
?·對(duì)象說白了也是一種數(shù)據(jù)結(jié)構(gòu)(對(duì)數(shù)據(jù)的管理模式)英岭,將數(shù)據(jù)和數(shù)據(jù)的行為放到了一起湾盒。
?·在內(nèi)存上,對(duì)象就是一個(gè)內(nèi)存塊诅妹,存放了相關(guān)的數(shù)據(jù)集合罚勾!
?·對(duì)象的本質(zhì)就一種數(shù)據(jù)的組織方式!
「全棧Java筆記」是一部能幫大家從零到一成長(zhǎng)為全棧Java工程師系列筆記吭狡。筆者江湖人稱 Mr. G荧库,10年Java研發(fā)經(jīng)驗(yàn),曾在神州數(shù)碼赵刑、航天院某所研發(fā)中心從事軟件設(shè)計(jì)及研發(fā)工作分衫,從小白逐漸做到工程師、高級(jí)工程師般此、架構(gòu)師蚪战。精通Java平臺(tái)軟件開發(fā),精通JAVAEE铐懊,熟悉各種流行開發(fā)框架邀桑。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數(shù)據(jù)庫從入門到精通
C-手刃移動(dòng)前端和Web前端
D-J2EE從了解到實(shí)戰(zhàn)
E-Java高級(jí)框架精解
F-Linux和Hadoop?