5.計算機發展個人理解-電路終究是電路 軟體如何控制硬體 程式碼如何操作硬體 硬體是怎麼執行程式碼 程式碼如何執行 軟體與硬體如何互動 計算機思維 抽象 封裝 規範 遮蔽 協議分層
計算機只是邏輯電路
除了電路還是電路
計算機就是一堆邏輯電路
他並不知道你到底想要幹什麼,他也不會理解什麼是檔案,什麼是程序
通電的瞬間,就好像你開啟開關,燈泡發光一樣
所有的一切都是通過通電來啟動的 start the world
計算機某些部件,具體到比如某個閘電路,有電流通過
這個電流就是0或者1 進而會觸發一系列內建的電路導致更大的模組進行電路的通斷
他不知道你到底要幹什麼
只要電源不斷開,那麼就會有心跳,有心跳就會持續的讀取指令
指令也不過就是一塊固定格式的電路連線(或者是讀取ROM)
將一堆輸入線路的電壓轉換成另一種形式的輸出
輸出有可能連線著其他的電路模組的輸入
所以他會永遠的執行下去
只是恰好有了二進位制數學,二進位制數學又與邏輯建立起來數理邏輯
數理邏輯又跟邏輯電路是相通的
那麼我們就可以理解為這堆邏輯電路可以代表著我們想要實現的二進位制計算
其實電路仍舊是電路
試想一個問題
軟體到底是如何控制硬體的?
你可能會想到,軟體是用高階語言編寫的,高階語言被翻譯成組合語言,組合語言會翻譯成機器可以是別的機器語言
這樣計算機就可以執行了
但是到底是如何控制的?
之所以說軟體控制硬體
是不是因為計算機程式作為計算機硬體的輸入,然後計算機硬體看似可以理解為經過計算之後,可以得到輸出?
看似是這樣子的
但是到底是怎麼控制的呢?
如果這麼想我感覺想不通,軟體怎麼能控制硬體呢?
如果換一種思維方式或許更好理解
其實跟上一個圖是一樣的,但是思維方式不一樣
此處把計算機硬體作為中心,不是說你把程式輸入,而是計算機硬體 讀取了計算機程式 然後經過處理,產生了輸出
看似一樣的不都是計算機程式作為輸入 經過計算機硬體產生輸出嗎
其實差別非常大
上面的圖,你可能會理解為軟體控制硬體,但是軟體如何控制硬體?根本就沒有辦法控制
下面的圖是硬體控制硬體,通過你告訴的方式(計算機程式) 我經過一系列的電路的通斷,我產生了指定的結果,因為我本身就是一直在操作電路,硬體自然會產生變化
想一下計算機的啟動過程,通電之後,是不是有了心跳之後,就不斷地在執行運算,讀取指令譯碼執行等等
最初啟動的還不是硬體麼
所以,個人理解
對於計算機來說,不存在軟體控制硬體
而是硬體 讀取了你給出來的指令 控制硬體
軟體不過是儲存起來的指令,整個計算機只是邏輯電路和等待執行的指令
電路上電之後,跟隨頻率不斷地執行指令,軟體就好像是一個無限的紙帶,紙帶上佈滿了指令
計算機就這麼一條條的不嫌累的執行著,軟體只不過是人機互動的方式而已,計算機永遠是那個計算機,你操作不了她
計算機重要的思維方式
這幾個思維方式看似簡單,但是卻融入到無數的編寫規範設計思維裡面了
抽象 封裝 介面 規範 解耦
抽象將複雜物體的一個或者幾個特性去掉,抽取他們共性的部分,這就是抽象
比如作業系統管理硬體資源,IO裝置抽象為檔案
比如下圖,他們都是形狀
抽象的形式是統一
抽象的目的是簡化
既然是去掉個性,保留抽取共性,所有的共性組合在一起也就是統一了形式
這種統一後的形式就是一種由各個共性的點組成的一類意識形態上的新事物
這個新事物就共性來說,與原有的事物放到一起進行抽象得到的抽象結果還是這個抽象後的事物本身,對吧
說起來繞口,其實就好像再說杯子和玻璃杯 瓷杯都是杯子一樣,雖然這麼說有點彆扭
所以抽象的形式是統一,得到一種意識形態上的新事物
這些共性的點,對於抽象後的新事物是他的特性
但是這些特性不是具體的
在計算機的世界裡面,抽象過後,還必要要實現,計算機不懂得自然語言也沒有任何思想
負責抽象的人必須要提供具體的實現
比如作業系統把IO裝置抽象為檔案,那他就把共性的讀寫訪問方法提供出來,假設是 read 和 write
不管到底是磁碟還是磁帶,read就是讀取內容,write就是寫出內容,到底是怎麼實現的,呼叫者不需要關注
所以抽象最終的目的就是簡化
簡化後你不用再關注IO裝置具體是什麼,哪個廠家生產的,使用了什麼技術(去掉的特性)
也可以說是遮蔽了底層的實現細節
遮蔽的近義詞可以說是封裝,把底層的實現細節封裝起來,提供統一的訪問形式
封裝後提供統一訪問形式,也就是提供統一的介面 就像上面提到的read write方法
介面可以理解為對接的埠 就好像電腦上預留給投影儀使用的十五針VGA插口一樣
既然形式上完成了統一
訪問形式上也完成了統一
那麼這就相當於一種規範化的形式
所以規範和介面 又有近似的意思
都可以理解為一種約定好的協議,約定好的形式,一種規矩,規矩就可以做到完全的解耦
介面提供訪問的具體形式,但是不提供細節
規範指導實現的最終目的與要求,但是不提供細節
有了封裝,規範,介面的概念,也就很大程度的完成了解耦
完成了解耦很多時候就可以把問題分層的處理對待
TCP/IP的分層概念就是如此,每一層封裝上一層的資訊
層與層之間按照約定的規範協議進行對接,各司其職,各層做各層的事情
這樣既可以不再一條道走到黑,就好像你回家可能走幾分鐘坐公交然後坐地鐵一樣
這些概念
抽象/封裝/介面/規範/協議/遮蔽/分層
貫穿了計算機整個的發展
抽象->統一形式->提供統一介面,進而隱藏底細節實現,從而簡化了訪問
抽象->統一形式->提供統一規範,進而可以解耦獨立發展,而且還能夠無縫對接
這兩種模式最為常見
其實提供統一介面一般是指個體
如果是一個生態鏈(技術鏈)上所有的個體,都設定好了指定形式的介面
這就是規範了,有了規範,就很容易出現技術體系
程式語言的發展是不斷地遮蔽底層,不斷地進行封裝
面向物件的程式設計語言中大多數時候你都在做抽象,事物抽象成類
面向介面的程式設計就是呼叫者與實現者進行解耦,通過介面進行對接
虛擬機器規範只提供要求設計思路,但是不提供具體的實現要求,廠家可以自行定製
虛擬機器規範提供了位元組碼規範,和虛擬機器規範,相當於規定了輸入和輸出
只要按照規範的位元組碼都可以執行在虛擬機器上正確執行,同樣的位元組碼也必然有一致性的結果
servlet規範讓servlet和servlet容器各自獨立發展,縱然它們相互依存