動靜結合話程式設計

2021-09-05 15:33:36 字數 1403 閱讀 6122

在《物件導向是什麼》中,說得過於抽象。看來要把問題說清楚,還得畫圖才行。

前面說過,由於計算機體系結構的原因,所有的程式設計最終都會歸結為資料結構和演算法,二者一陰一陽,一靜一動,陰中有陽,陽中有陰,恰如太極圖,映**現實世界。

如果用形式化的方式來表示,用圓圈表示資料,用方框表示過程,則計算的過程可以如下表示:

對於過程,輸入資料,處理後輸出資料;

對於資料,由過程產生,又輸入新的過程。

歷史上曾經有過資料為主還是過程為主之爭,似乎到現在也沒有定論。在我看來,二者地位相等,不能厚此薄彼。

隨著問題的複雜化,上述的計算過程會變得相當複雜。於是人們研究出了「結構化方法」。「結構化方法」來自屢試不爽的「模組思想」:對於複雜問題,先劃分成乙個個模組,再逐步細化各個模組,直到問題能夠解決。結構化的思想直接產生了面向過程的程式設計思想。如下圖:

其中,屬於整個程式的資料稱為「全域性變數」,可以被任何函式/過程使用;

屬於函式/過程內部的資料稱為「區域性變數」,只能在函式內使用。

面向過程的思想在最初的混亂情形下增加了一層結構,使得全域性變數極大地減少;似乎這種結構根據需要迭代下去,可以解決任何問題了;而且面向過程的研究還有一項重要的成果,就是把過程抽象為順序、迴圈和分支三種結構的有限次組合。

如果人的慾望是有止境的,世界將是多麼美好啊!可惜不是!隨著問題的進一步複雜化,面向過程的方式又不能解決問題了。這是物件導向的方法出現 了。物件導向的乙個關鍵的概念是類。所有物件導向的方法都是在類上做文章。那麼類到底是什麼呢?其實從上圖的結構中可以看出,如果進一步把一些資料結構 (不是資料)和一些函式組合起來,賦予其明確的意義,就構成了類。類體現了一種抽象,這種抽象有助於人思考問題,但是並不會有助於計算機思考問題,在計算 機看來,程式還是由資料和過程組成的。所以,雖然我們按照類來思考,卻要按照物件來執行程式。物件是類的例項,是實際程式中資料和函式的組合。我想這也是 稱之為「物件導向」而不是「面向過程」的原因吧。

物件導向的方法是把人的抽象思維中的類對映到計算機思維中的物件的一種程式設計方法。這種方法是向計算機解釋現實世界的諸多方式中的一種。其進步意義在於:人們可以按照自己的方式來思考問題,而不必按照計算機的方式進行思考。

既然是安裝人的思維方式來思考問題,就可以搞很多名堂,比如繼承,組合,多型,虛函式/介面等等。這都是人們為了助於提高程式的質量,特別是提高「可復用性」與「可擴充性」想出來的辦法。關於這些最基本的概念,且聽下回分解。

邏輯學中概念內涵和外延的定義

,類是概念,屬性和方法都是概念的內涵;物件是概念的外延。

附2:最近好像「function programming(函式程式設計)」被提得比較多,我認為函式式程式設計是建立了這樣一種結構:

higherfunction可以把lowerfunction作為輸入和輸出(甚至可以把另乙個hf作為輸入?)。

這種方法對過程本身進行了「運算」,可以處理複雜的問題。究竟這種方式適合處理哪些問題,呵呵,我沒有研究過。

C 結合EmguCv程式設計

以前在c 中做過影象灰度化,然後二值化的 是自己寫了乙個類,呼叫處理的,現在我們有現成的emgucv,因此今天我嘗試做一下用c 只處理載入顯示等任務,而用emgucv處理灰度化和二值化。現在已經用c 設計好基本的功能了,即載入顯示,儲存,還可以關閉。如下圖。接下來我們呼叫emgucv處理這些。首先是...

話裡話外 勞逸結合 身體 家庭和工作的平衡

今天是星期天,不用出差,放下要做的事情,難得的放鬆。下午帶孩子去了圖書館。人很多,各自看喜愛的雜誌,到了吃飯的時侯才回。聯想到昨晚的 財富人生 很有感慨。財富人生 葉蓉採訪了春秋航空的王正華董事長,我很佩服他的務實和堅持,感謝他為中國民營 廉價航空事業所做的貢獻。面對天天的壓力,本以為他是個工作狂。...

linux無鎖話程式設計,原子

linux支援的哪些操作是具有原子特性的?知道這些東西是理解和設計無鎖化程式設計演算法的基礎。下面的東西整理自網路。先感謝大家的分享!sync fetch and add系列的命令,發現這個系列命令講的最好的一篇文章,英文好的同學可以直接去看原文。multithreaded data type ac...