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