OO和PO的最大區別是什麼?

2021-05-24 10:14:40 字數 900 閱讀 4060

這篇文章提到了幾個比較有用的概念,object oriented, design pattern, aspect oriented program;原文從職責分離角度來理解他們並把他們串起來.

不過話說回來,物件導向模型和面向過程模型的本質區別並不是職責分離!!!沒有oo,po(

面向過程

)也有職責分離。

個人認為,oo和po的區別更多是tell(what should do)和ask(how to do)的區別,tell don't ask原則能比較好的體現這兩者的區別。

to ask is a query, to tellis a command.

引用一句牛人說的話,那就是

procedural code gets information then makes decisions. object-oriented code tells objects to do things.

— alec sharp

(參見http://www.pragprog.com/articles/tell-dont-ask)

舉乙個例子。

如果用po的話,可能根據不同的type或者inte***ce來選擇合適的邏輯,會有一堆的if else語句或者switch語句;dynamic_cast也常常在這個時候被起用。而用oo的話,每個sub type都實現了這個這個介面,直接call就可以了,自然有runtime幫我們分派到合適虛函式。

白話一點,po會說「你是a嗎?是的話,那去做xx;你是b嗎?是的話,那你去做yy;如果都不是,我要發飆(拋異常)!」。oo說起來就簡單了,直接一句「你去做吧!」,至於怎麼做每個人自己都很清楚,因為它有自己的角色(type)。

和 的區別是什麼?

符號一般用來當作佔位符,常使用linux指令碼的同學應該對此有更深的體會吧。既然是佔位符,當然就是被用來替換的。知道了這點就能很容易區分 和 從而不容易記錯了。比如說用 和 傳參的區別,使用 傳入引數是,sql語句解析是會加上 比如 select from table where name 傳入的n...

和 equals 的區別是什麼?

string x string string y string string z newstring string system.out.println x y true system.out.println x z false system.out.println x.equals y true ...

和equals的區別是什麼

1 是關係運算子,equals是方法,結果都返回布林值 2 object類的和equals都是比較位址,作用相同 作用 jdk中的類一般已經重寫了equals 方法,比較的是內容 自定義的類如果沒有重寫equals方法,將呼叫父類的equals方法 可以根據自己的需求重寫equals方法,重寫equ...