物件導向程式設計是否是從根本上反模組化且反並行的?為什麼?

時間 2021-05-05 16:46:08

1樓:Shuang

這種問題還是直接上圖吧,一目了然

2樓:「已登出」

我不太確定,即使我們相信 oop 是基於狀態的,如果我們設計介面的時候限制改狀態的函式並且保證

1. 每個 process 改變的狀態是正交的2. 加校驗

我看不出來這能與所謂的 fp 有什麼不同

3樓:龍騰道默默地

乙個怪獸100點血,被砍一刀扣60點,問同時被兩人各砍一刀,血變成多少?

A. -20

B. 40

C. 0

你不解決這些問題,不物件導向也不行的。解決了這些問題,物件導向也不會出現你擔憂的情況。

劃分物件本身不也是一種模組劃分嗎?

4樓:

我猜他們是為了安利這個

Parallel and Sequential Data Structures and Algorithms

5樓:HAL90

物件導向程式設計是用計算機模擬客觀世界的努力, 是程式設計模型發展過程中的最重要的思想方式, 其他的技術全都是技術細節。

並行和是否物件導向是完全兩個方面的問題, 並行處理中的各種問題並不是因為物件導向的思考方式造成的, 而是因為計算機世界與客觀世界在實際上不一致造成的。解決並行問題的各種技術方案同樣可以在物件導向的系統中實現,而禁止物件導向並不能解決並行中的各種的問題。

最後,我不太相信原問題所說的大學取消物件程式設計課程的事,能確認是真的嗎。

還有,我看到上面有很多人說討厭設計模式, 其實設計模式是為了解決特定問題的一些合理的實現, 濫用設計模式才讓人討厭,

6樓:spock

流行的物件導向程式設計其實是對這一概念的誤解,更像是市場推廣。我覺得首先要正確理解這一概念才能談是否是反模組化和反並行的。

物件導向程式設計這一概念是由Smalltalk的發明人Alan Kay(不了解的人請Google)首先提出的。按Alan Kay的看法,物件導向最重要的一點是訊息傳遞

OOP to me means only messaging, local retention and protection and

hiding of state-process, and extreme late-binding of all things. It

can be done in Smalltalk and in LISP. There are possibly other

systems in which this is possible, but I'm not aware of them.見http://

userpage.fu-berlin.de/~

ram/pub/pub_jf47ht81Ht/doc_kay_oop_en

物件導向就是為了解決大規模程式設計的複雜性問題提出的,用訊息傳遞的方式降低模組之間的耦合。

目前最流行的併發程式語言就數Erlang和Go了。根據Erlang之父Joe Armstrong,Erlang其實也是物件導向程式設計語言,在小的方面來講又是函式式程式語言,所以物件導向和函式程式設計並不矛盾。(見oop - Is Erlang Object-Oriented?

)Erlang建立在Actor Model之上,而Go建立在Communicating Sequential Process之上,這兩個計算模型都跟Alan Kay的訊息傳遞模型有相通之處。所以說,訊息傳遞模型也能很好地解決併發程式設計的問題。

雖說純粹的函式式程式語言沒有狀態,也就不存在競爭問題,適合併發,可那只是美好的願望罷了,更像是書呆子的意淫,在現實世界中怎麼可能完全消除狀態,就連Haskell也要發明複雜的Monad來解決狀態問題,所以說函式程式設計並不是解決併發問題的靈丹妙藥。

程式語言的發展過程可以看作不斷遠離圖靈機模型而接近人腦思維模型的乙個過程,最開始是組合語言,直接操作圖靈機的狀態;然後是過程化程式設計正規化,用各種更有侷限的控制語句替代過於靈活的go to,現在則是物件導向和函式式程式語言的天下。簡單地講,就是要解決如何擺脫賦值語句的問題。面向過程和物件導向都沒完全擺脫賦值語句,但是施加了更多的限制,防止賦值語句濫用。

函式式程式設計企圖使用數學意義上的函式概念完全消除賦值語句,但是沒有成功,只得用更隱晦的方式加以保留。

PS. 另外吐槽一下,在知乎上編輯文字真麻煩,排版又難看,既然要抄襲stackoverflow,為啥不全抄過來!

7樓:胡大狗

我們知道,命令式程式設計相當於在管理狀態機。而其中的物件導向程式設計則相當於同時管理多個狀態機,還要讓它們之間互動,顯然很難啊,也體現不出良好的劃分啊。這就可以解釋物件導向程式設計為什麼是反模組化和反並行的。

但是經過長期的發展,在各種設計思想和模式的幫助下,我們通過在一些經過充分研究的場景採用特定的程式設計模式,能相當程度地hold住多個狀態機,從而在開發效率、執行效率、正確性、可靠性等方面取得乙個較好的折中。

我對函式式程式設計了解不深,但是對Closure, CPS, Functional Data Structure這些東西看著挺喜歡的。如果函式式程式設計的生態環境能發展到接近物件導向程式設計的程度,那也挺好啊。

話說回來,我最喜歡的是型別系統,至於我擅長的OOP,還是我不擅長的FP,都不重要了。它們的大部分東西在我眼中沒有區別。

8樓:

物件導向基本結構是繼承,繼承是一種強耦合,反模組化的做法。

並行要求盡量 stateless,物件模型就意味著自己擁有狀態。

9樓:蔡嘯

這個問題我在stackexchange上問過,有很多很好的回答,可供參考。

物件導向程式設計的本意是什麼?

藍彼得 物件導向是抽象問題 分解問題 組織程式的一種方式。面向過程把問題抽象分解為乙個乙個的函式或者過程,然後通過呼叫這些函式來改變程式的狀態。物件導向把問題抽象分解為乙個乙個物件,然後物件之間發生關係 方法呼叫 改變物件的狀態,從而改變整個程式的狀態。本質上沒啥大的區別,物件導向又封裝了乙個層次而...

如何用Haskell實現物件導向程式設計?

圓角騎士魔理沙 剛剛讀完了Haskell s overlooked object system,給出了幾個proposal,最後深入研究用HList encode recursive record。很有意思,比如說,class,label是first class的,所以多重繼承玩得很溜,比如說可以自...

物件導向與面向過程最根本的不同是什麼?

TED 最根本不同就是考慮問題的思路或者說方式不同。物件導向是通過物件構建 虛擬世界 解決問題是順帶的事情 面向過程則是尋求解決問題的方法,問題解決,別的可以忽略。TED 我用 Python 物件導向做演算法題,她說要先給兔子找上物件 丁長老 只提一點,有時候,用了物件,不代表就是用了OOP。看上去...