摘要:下面我們來(lái)使用面向?qū)ο箢?lèi)圖這里就不再畫(huà)了首先面試題中所提到的我們都可以看成類(lèi),比如停車(chē)場(chǎng)是一個(gè)類(lèi)吧,它里面的車(chē)位是一個(gè)類(lèi)吧,攝像頭,屏幕。。。
以下是某場(chǎng)的一道面試題(大概):
1、一個(gè)停車(chē)場(chǎng),車(chē)輛入場(chǎng)時(shí),攝像頭記錄下車(chē)輛信息
2、屏幕上顯示所接收的車(chē)輛的信息情況(車(chē)牌號(hào))以及各層車(chē)位的車(chē)位余量
3、停車(chē)場(chǎng)一共四層車(chē)位,其中的三層都為普通車(chē)位,還有一層為特殊車(chē)位(體現(xiàn)在停車(chē)計(jì)費(fèi)價(jià)格上面的不同)
看到第一個(gè)條件的時(shí)候,我大概知道了這道題考察的應(yīng)該是面向?qū)ο笙嚓P(guān)的,三個(gè)條件看完后以及基本確認(rèn)了。
說(shuō)到這里,簡(jiǎn)單地說(shuō)一下面向?qū)ο?/em>,至于什么是面向?qū)ο笪疫@里就不多說(shuō)了,每個(gè)人也都有自己不同的理解,包括它的三要素(封裝、繼承、多態(tài))。
簡(jiǎn)單地說(shuō)一下為什么我們要面向?qū)ο?為什么要使用面向?qū)ο螅空f(shuō)一下我的理解
先拋開(kāi)面向?qū)ο螅紫扔?jì)算機(jī)的 程序執(zhí)行 無(wú)非就是 順序、判斷、循環(huán) 我們現(xiàn)在所有用到的語(yǔ)言包括c、java、php... 沒(méi)有其它的, 如js中的 if...else, switch...case...就是判斷,for,while就是循環(huán),也包括一些遍歷、遞歸也都是基于這三種方式!我們每天所產(chǎn)出的代碼,所有的這些都是通過(guò)順序、判斷和循環(huán)這三個(gè)方式都能輕松搞定,沒(méi)有第四種方式,為什么呢?因?yàn)槲覀兺ㄟ^(guò)這三種方式來(lái)解決就實(shí)現(xiàn)了一個(gè)結(jié)構(gòu)化的問(wèn)題,也就是我們通過(guò)這三個(gè)就能滿(mǎn)足所有的需求,也就不需要第四個(gè)了這樣的化對(duì)我們的程序就已經(jīng)結(jié)構(gòu)化了,對(duì)于編譯器也能很高效的執(zhí)行、解析這些東西, 外插一嘴,goto語(yǔ)句其實(shí)就是游離在這三個(gè)之外,會(huì)導(dǎo)致程序、邏輯的混亂,很少有用基本被淘汰了,不能說(shuō)他因?yàn)樾实停男士赡軙?huì)很高,但是因?yàn)槊撾x了結(jié)構(gòu)化,所以至少在業(yè)務(wù)代碼上我們極少使用它。
說(shuō)到這里,也就是程勛執(zhí)行我們都簡(jiǎn)化成 這個(gè)結(jié)構(gòu),而面向?qū)ο笠沧屛覀兊臄?shù)據(jù)也簡(jiǎn)化了即結(jié)構(gòu)化(這句話也不是我說(shuō)的,而是ruby語(yǔ)言的作者),書(shū)里說(shuō)了,面向?qū)ο笫菫榱四M、表示事件得萬(wàn)物,比如人、鳥(niǎo)類(lèi)、到具體服務(wù)員類(lèi),有具體行為的類(lèi)。其實(shí)js里面向?qū)ο笠饬x根本不拘泥于此,書(shū)上的只是為了讓我們好入門(mén)好學(xué)習(xí)而已,它的意義是將零散的數(shù)據(jù)進(jìn)行結(jié)構(gòu)化。計(jì)算機(jī)有個(gè)毛病,結(jié)構(gòu)化的程序?qū)τ谒鼇?lái)說(shuō)是最簡(jiǎn)單的!
簡(jiǎn)單解釋一下,我們?yōu)g覽器加載網(wǎng)頁(yè)加載的是什么?是流,流是什么呢?其實(shí)就是字符串,雖然我們看到之后是html,css,js代碼,但是代碼不就是字符串嘛,那我們字符串怎么辦,瀏覽器拿到字符串首先就是dom節(jié)點(diǎn)的解析然后生成生成渲染樹(shù)(渲染樹(shù)與dom樹(shù)不同的地方在于,dom樹(shù)會(huì)把所有的dom節(jié)點(diǎn)都展示出來(lái),渲染樹(shù)只會(huì)展示display非none的元素),都是一步步順序執(zhí)行的。
相比來(lái)說(shuō),程序也是如此了,如果我們的程序中充滿(mǎn)了散亂的數(shù)據(jù),那我們還怎么按照結(jié)構(gòu)化的要求去操作呢?比如說(shuō),通過(guò)人做一個(gè)對(duì)象,人有外貌,行為,狀態(tài)(吃、傳、喝、高矮胖瘦)這么多東西可以集成在一個(gè)對(duì)象中來(lái)操作,但是如果沒(méi)有面向?qū)ο螅@些特征,行為也就散亂了,一旦散亂了以后還怎么管理,并且這只是一個(gè)人,就有這么多東西,再來(lái)十個(gè),一百個(gè),再來(lái)只狗類(lèi)呢?我們的程序就成了一盤(pán)散沙了,當(dāng)然這些只是舉例子,具體業(yè)務(wù)還要拿來(lái)具體分析。所以面向?qū)ο蟛粌H符合計(jì)算機(jī)所喜愛(ài)的結(jié)構(gòu)化,還能讓我們管理起來(lái),維護(hù)起來(lái),都符合結(jié)構(gòu)化。
再引用雙越老師的一句話:編程就應(yīng)該簡(jiǎn)單&抽象。
有一篇小說(shuō)里面有一段話我覺(jué)得還蠻有意思的,早期的人們之所以沒(méi)有設(shè)計(jì)出來(lái)計(jì)算機(jī),就是因?yàn)樗麄兿氲牟粔蚝?jiǎn)單,而不是不夠復(fù)雜,其實(shí)計(jì)算機(jī)很簡(jiǎn)單,不就是0和1嗎。
所有說(shuō)我們編程,設(shè)計(jì)時(shí)候要做到 結(jié)構(gòu)化,簡(jiǎn)單+抽象,抽象完之后才能簡(jiǎn)單,簡(jiǎn)單的前提是我們應(yīng)該抽象好,我認(rèn)為這就是我們?yōu)槭裁匆嫦驅(qū)ο笞钪饕脑颍覀冎悦嫦驅(qū)ο缶幊叹褪且驗(yàn)樗梢猿橄螅梢詳U(kuò)展。而不是面向具體,可能這些話對(duì)于初學(xué)前端的來(lái)說(shuō)不好理解,但是隨著你工作時(shí)間的提升,相信很快就會(huì)理解的。
**回到面試題,我們來(lái)分析** 這個(gè)面試題,如果我們沒(méi)有面向?qū)ο螅嫦虺橄蟮母拍睿?那我們應(yīng)該很快就能拿起鍵盤(pán)了,一個(gè)停車(chē)場(chǎng),三個(gè)普通車(chē)位,一個(gè)豪華車(chē)位,一個(gè)攝像頭,一個(gè)大屏幕顯示器,各種各樣的車(chē),可能我們很快就能做完,‘設(shè)計(jì)完’,畢竟面向具體是真的很簡(jiǎn)單,要求什么我就做什么。。。 不過(guò)說(shuō)回來(lái),如果面試官再讓你減一個(gè)車(chē)位或者增加兩個(gè)豪華車(chē)位,加兩個(gè)攝像頭?如果按照我們之前的來(lái)寫(xiě),簡(jiǎn)單。。。改一下不就行了,加一個(gè)豪華車(chē)位,加兩個(gè)攝像頭。。。其實(shí)到這里想必已經(jīng)涼涼了。 下面我們來(lái)使用面向?qū)ο? 類(lèi)圖這里就不再畫(huà)了 首先面試題中所提到的我們都可以看成類(lèi),比如停車(chē)場(chǎng)是一個(gè)類(lèi)吧,它里面的車(chē)位是一個(gè)類(lèi)吧,攝像頭,屏幕。。。我們都可以看做是類(lèi) 停車(chē)場(chǎng),有層位,有攝像頭,屏幕,所以我們先來(lái)創(chuàng)建一個(gè)停車(chē)場(chǎng),這一類(lèi) class Park { constructor () { } } 停車(chē)場(chǎng)有層位,層位里面有若干車(chē)位 class Floor { constructor (num, places) { this.num = num this.places = places } } 車(chē)位也歸為一類(lèi),車(chē)位有自己的狀態(tài),有車(chē),無(wú)車(chē) class Place { constructor () { this.empty = true } } 車(chē)位分為普通車(chē)位,豪華車(chē)位,但是不論是普通還是豪華,他們也都有自己的狀態(tài),有車(chē),無(wú)車(chē),所以我們直接讓這兩個(gè)類(lèi)繼承車(chē)位類(lèi) 普通車(chē)位 class NormalPlace extends Place{ constructor () { super() } } 豪華車(chē)位 class SpecialPlace extends Place{ constructor () { super() } } 攝像頭 class Camera { constructor () { } } 電腦,可以記錄所有車(chē)的數(shù)據(jù) class Computer { constructor () { this.symbols = {} } } // 屏幕 class Screen { } 這樣一看我們所有類(lèi)都創(chuàng)建完了,差的是來(lái)分析他們的行為,狀態(tài),聯(lián)系,這里不再多做分析。只舉一個(gè)簡(jiǎn)單的例子,然后上完整代碼 停車(chē)場(chǎng), 有層 攝像圖 屏幕,有出入車(chē)時(shí)所發(fā)生的行為 class Park { constructor (floors) { this.floors = floors this.camera = new Camera() this.screen = new Screen() } in (car) { } out (car) { } } 我自己寫(xiě)了一個(gè)簡(jiǎn)單的demo,當(dāng)然也沒(méi)有考慮得特別細(xì)致 ***完整代碼***
收入 0 元
代碼可以直接粘貼到html里,直接運(yùn)行打開(kāi),大家只要看各個(gè)類(lèi)之間的聯(lián)系就可以,具體到行為的邏輯代碼只是怎么簡(jiǎn)單想怎么寫(xiě)就怎么寫(xiě)的,當(dāng)然也有沒(méi)考慮全面的,比如各個(gè)車(chē)位的價(jià)格應(yīng)該也是動(dòng)態(tài)的,為了趕時(shí)間,好多東西我都直接定死了。
抽象好了之后,這樣不論是增加減少變更價(jià)錢(qián)我們都可以靈活地處理,每個(gè)類(lèi)最基礎(chǔ)的行為和方法幾乎是不變得,我們只需要變?nèi)菀鬃兊贸橄笃饋?lái),封裝起來(lái)。之后, 就變得‘簡(jiǎn)單’
歡迎一起探討,大家共同進(jìn)步!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/114753.html
摘要:想必面試題刷的多的同學(xué)對(duì)下面這道題目不陌生,能夠立即回答出輸出個(gè),可是你真的懂為什么嗎為什么是輸出為什么是輸出個(gè)這兩個(gè)問(wèn)題在我腦邊縈繞。同步任務(wù)都好理解,一個(gè)執(zhí)行完執(zhí)行下一個(gè)。本文只是我對(duì)這道面試題的一點(diǎn)思考,有誤的地方望批評(píng)指正。 想必面試題刷的多的同學(xué)對(duì)下面這道題目不陌生,能夠立即回答出輸出10個(gè)10,可是你真的懂為什么嗎?為什么是輸出10?為什么是輸出10個(gè)10?這兩個(gè)問(wèn)題在我腦...
摘要:直接開(kāi)始題目是厲害了說(shuō)句實(shí)話開(kāi)發(fā)中誰(shuí)寫(xiě)成這樣保證會(huì)被打死。不過(guò)面試就是面試,有面試官的考量點(diǎn)。官方是這么說(shuō)的。結(jié)果完美,不過(guò)小姐姐的意思是數(shù)組的方法會(huì)自動(dòng)觸發(fā)數(shù)組的。 直接開(kāi)始題目是 if(a==1 && a==2 && a==3){ alert(厲害了) } 說(shuō)句實(shí)話開(kāi)發(fā)中誰(shuí)寫(xiě)成這樣保證會(huì)被打死。 不過(guò)面試就是面試,有面試官的考量點(diǎn)。 我理解的點(diǎn)有兩個(gè) 1、隱式類(lèi)型轉(zhuǎn)換 先說(shuō)...
摘要:另一個(gè)問(wèn)題,就是我下面要提及的作用域問(wèn)題,我當(dāng)時(shí)思考的時(shí)間太久了這是回憶中的面試題實(shí)際略有差異,不糾結(jié)了說(shuō)一下腳本的運(yùn)行結(jié)果引用錯(cuò)誤中給出的錯(cuò)誤提示。 版權(quán)聲明:此文首發(fā)于我的簡(jiǎn)書(shū)賬號(hào)人生還有多少個(gè)二十年,轉(zhuǎn)載請(qǐng)注明出處。 此處有幾百字嘮叨: 當(dāng)天,我早早起床,跨越上百公里,高德導(dǎo)航,路人指點(diǎn),跌跌撞撞到達(dá)招聘會(huì)現(xiàn)場(chǎng),當(dāng)時(shí)已是中午十二點(diǎn)半,吃了午餐(半瓶白開(kāi)水),開(kāi)始準(zhǔn)備投遞...
摘要:首先,我先去上搜索了的定義運(yùn)算符創(chuàng)建一個(gè)用戶(hù)定義的對(duì)象類(lèi)型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對(duì)象的實(shí)例。 今天看到一道面試題,如下,問(wèn): 實(shí)例化 Person 過(guò)程中,Person返回什么(或者 p 等于什么)? function Person(name) { this.name = name return name; } let p = new Person(Tom); 說(shuō)實(shí)...
摘要:由虛擬機(jī)生成并拋出,,屬于系統(tǒng)內(nèi)部錯(cuò)誤或者資源耗盡等嚴(yán)重情況,屬于需要擔(dān)負(fù)的責(zé)任,這一類(lèi)異常事件是無(wú)法恢復(fù)或者不可能捕獲的,將導(dǎo)致應(yīng)用程序中斷,但是自定義是可以捕獲的。 題目 showImg(http://img-storage.qiniudn.com/15-9-22/50608386.jpg); 答案:D 分析 Java 異常的結(jié)構(gòu)體系 showImg(http://img-stor...
閱讀 766·2021-10-09 09:58
閱讀 634·2021-08-27 16:24
閱讀 1719·2019-08-30 14:15
閱讀 2376·2019-08-30 11:04
閱讀 2060·2019-08-29 18:43
閱讀 2166·2019-08-29 15:20
閱讀 2711·2019-08-26 12:20
閱讀 1611·2019-08-26 11:44