面系那個對象開發原則.高內聚.低耦合
軟件設計中通常用耦合度和內聚度作為衡量模塊獨立程度的標準。劃分摸塊的一個準則就是高內聚低耦合。
這是軟件工程中的概念,是判斷設計好壞的標準,主要是面向OO的設計,主要是看類的內聚性是否高,偶合度是否低.
每一個類完成特定的獨立的功能,這個就是高內聚。耦合就是類之間的互相調用關系,如果耦合很強,互相牽扯調用很多,那么會牽一發而動全身,不利于維護和擴展。
類之間的設置應該要低耦合,但是每個類應該要高內聚.耦合是類之間相互依賴的尺度.如果每個對象都有引用其它所有的對象,那么就有高耦合,這是不合乎要求的,因為在兩個對象之間,潛在性地流動了太多信息.低耦合是合乎要求的:它意味著對象彼此之間更獨立的工作.低耦合最小化了修改一個類而導致也要修改其它類的”連鎖反應”. 內聚是一個類中變量與方法連接強度的尺度.高內聚是值得要的,因為它意味著類可以更好地執行一項工作.低內聚是不好的,因為它表明類中的元素之間很少相關.成分之間相互有關聯的模塊是合乎要求的.每個方法也應該高內聚.大多數的方法只執行一個功能.不要在方法中添加’額外’的指令,這樣會導致方法執行更多的函數.
推廣開來說,這個思想并不限于類與類之間的關系。模塊和模塊,子系統之間也都要遵守這個原則,才可以設計出延展性比較強的系統。
什么是耦合
定義
耦合性也稱塊間聯系。指軟件系統結構中各模塊間相互聯系緊密程度的一種度量。模塊之間聯系越緊密,其耦合性就越強,模塊的獨立性則越差。模塊間耦合高低取決于模塊間接口的復雜性、調用的方式及傳遞的信息。
耦合度就是某模塊(類)與其它模塊(類)之間的關聯、感知和依賴的程度,是衡量代碼獨立性的一個指標,也是軟件工程設計
及編碼質量評價的一個標準。耦合的強度依賴于以下幾個因素:
(1)一個模塊對另一個模塊的調用;
(2)一個模塊向另一個模塊傳遞的數據量;
(3)一個模塊施加到另一個模塊的控制的多少;
(4)模塊之間接口的復雜程度。
耦合分類
耦合按從強到弱的順序可分為以下幾種類型:
a)非直接耦合:兩模塊間沒有直接關系,之間的聯系完全是通過主模塊的控制和調用來實現的
b)數據耦合:指兩個模塊之間有調用關系,傳遞的是簡單的數據值,相當于高級語言的值傳遞;
c)標記耦合:指兩個模塊之間傳遞的是數據結構,如高級語言中的數組名、記錄名、文件名等這些名字即標記,其實傳遞的是這個數據結構的地址;
d)控制耦合:一指一個模塊調用另一個模塊時,傳遞的是控制變量(如開關、標志等),被調模塊通過該控制變量的值有選擇地執行塊內某一功能;
e)外部耦合:一組模塊都訪問同一全局簡單變量而不是同一全局數據結構,而且不是通過參數傳遞該全局變量的信息
f)公共耦合:一組模塊都訪問同一個公共數
據環境。該公共數據環境可以是全局數據結構、共享的通信區、內存的公共覆蓋區等。
g)內容耦合:這是最高程度的耦合,也是最差的耦合。當一個模塊直接使用另一個模塊的內部數據,或通過非正常入口而轉入另一個模塊內部。
為什么要低耦合(解耦合)
??在面向對象編程中,對象自身是內聚的,是保管好自己的數據,完成好自己的操作的,而對外界呈現出自己的狀態和行為。但是,沒有絕對的自力更生,對外開放也是必要的!一個對象,往往需要跟其他對象打交道,既包括獲知其他對象的狀態,也包括仰賴其他對象的行為,而一旦這樣的事情發生時,我們便稱該對象依賴于另一對象。只要兩個對象之間存在一方依賴一方的關系,那么我們就稱這兩個對象之間存在耦合。 比如媽媽和baby,媽媽要隨時關注baby的睡、醒、困、哭、尿等等狀態,baby則要仰賴媽媽的喂奶、哄睡、換紙尿褲等行為,從程序的意義上說,二者互相依賴,因此也存在耦合。首先要說,耦合是必要的。
??耦合的程度就是耦合度,也就是雙方依賴的程度。上文所說的媽媽和baby就是強耦合。而你跟快遞小哥之間則是弱耦合。一般來說耦合度過高并不是一件好事。就拿作為IT精英的你來說吧,上級隨時敦促你的工作進度,新手頻繁地需要你指導問題,隔三差五還需要參加酒局飯局,然后還要天天看領導的臉色、關注老婆的心情,然后你還要關注代碼中的bug 、bug、bug,和需求的變化、變化、變化,都夠焦頭爛額了,還猝不及防的要關注眼睛、頸椎、前列腺和頭發的狀態,然后你再炒個股,這些加起來大概就是個強耦合了。從某種意義上來說,耦合天生就與自由為敵,無論是其他對象依賴于你,還是你依賴其他對象。比如有人嗜煙、酗酒,你有多依賴它們就有多不自由;比如有人家里生了七八個娃,還有年邁的父母、岳父母,他們有多依賴你,你就有多不自由。所以老子這樣講:“五音令人耳聾,五色令人目盲,馳騁狩獵令人心發狂,難得之貨令人行妨。”盧梭也是不無悲涼的說“人生而自由,卻又無往而不在枷鎖中”。因此,要想自由,就必須要降低耦合,而這個過程就叫做解耦和。
??耦合度很高的情況下,維護代碼時修改一個地方會牽連到很多地方,如果修改時沒有理清這些耦合關系,那么帶來的后果
可能會是災難性的,特別是對于需求變化較多以及多人協作開發維護的項目,修改一個地方會引起本來已經運行穩定的模塊錯誤,嚴重時會導致惡性循環,問題永遠改不完,開發和測試都在各種問題之間奔波勞累,最后導致項目延期,用戶滿意度降低,成本也增加了,這對用戶和開發商影響都是很惡劣的,各種風險也就不言而喻了。
如何降低耦合(解耦合)
- 少使用類的繼承,多用接口隱藏實現的細節。 Java面向對象編程引入接口除了支持多態外, 隱藏實現細節也是其中一個目的。
- 模塊的功能化分盡可能的單一,道理也很簡單,功能單一的模塊供其它模塊調用的機會就少。(其實這是高內聚的一種說法,高內聚低耦合一般同時出現,為了限制篇幅,我們將在以后的版期中討論)。
- 遵循一個定義只在一個地方出現。
- 少使用全局變量。
- 類屬性和方法的聲明少用public,多用private關鍵字,
- 多用設計模式,比如采用MVC的設計模式就可以降低界面與業務邏輯的耦合度。
- 盡量不用“硬編碼”的方式寫程序,同時也盡量避免直接用SQL語句操作數據庫。
-
最后當然就是避免直接操作或調用其它模塊或類(內容耦合);如果模塊間必須存在耦合,原則上盡量使用數據耦合,少用控制耦合,
限制公共耦合的范圍,避免使用內容耦合。
什么是內聚
??內聚,通俗的來講,就是自己的東西自己保管,自己的事情自己做。每個模塊盡可能獨立完成自己的功能,不依賴于模塊外部的代碼。
??對象是什么?對象就是保管好自己的東西,做好自己的事情的程序模塊——這就是內聚!當然,對象的內聚只是內聚的一個層次,在不同的尺度下其實都有內聚的要求,比如方法也要講內聚,架構也要講內聚。
內聚: 內聚性又稱塊內聯系。指模塊的功能強度的度量,即一個模塊內部各個元素彼此結合的緊密程度的度量。若一個模塊內各元素(語名之間、程序段之間)聯系的越緊密,則它的內聚性就越高。
高內聚:類與類之間的關系而定,高,意思是他們之間的關系要簡單,明了,不要有很強的關系,不然,運行起來就會出問題。一個類的運行影響到其他的類。由于高內聚具備魯棒性,可靠性,可重用性,可讀性等優點,模塊設計推薦采用高內聚。
內聚度是指內部各元素之間聯系的緊密程度,模塊的內聚種類通常可分為7種,按其內聚度從低
到高的次序依此為:偶然內聚、邏輯內聚、瞬時內聚、過程內聚、通信內聚、順序內聚、功能內聚。
1 偶然內聚: 指一個模塊內的各處理元素之間沒有任何聯系。
2 邏輯內聚: 指模塊內執行幾個邏輯上相似的功能,通過參數確定該模塊完成哪一個功能。
3 時間內聚: 把需要同時執行的動作組合在一起形成的模塊為時間內聚模塊。
4 通信內聚: 指模塊內所有處理元素都在同一個數據結構上操作(有時稱之為信息內聚),或者指各處理使用相同的輸入數據或者產生相同的輸出數據。
5 順序內聚: 指一個模塊中各個處理元素都密切相關于同一功能且必須順序執行,前一功能元素輸出就是下一功能元素的輸入。
6 功能內聚: 這是最強的內聚,指模塊內所有元素共同完成一個功能,缺一不可。與其他模塊的耦合是最弱的。
例子:
有個例子很容易明白:一個程序有50個函數,這個程序執行得非常好;然而一旦你修改其中一個函數,其他49個函數都需要做修改,這就是高耦合的后果。
一旦你理解了它,你編寫概要設計的時候設計類或者模塊自然會考慮到“高內聚,低耦合”。
可能也可以這樣理解:
高內聚相對的是方法的獨立性,減少外部(全局參數)的影響。低耦合相對的是方法的依賴性低,可用搭積木的方式構建程序。內聚類似積木,耦合類似蓋房子,而高內聚低耦合的方式是比較效率并個性化構建房屋的方式。
Python安裝詳細教程
以windows版本舉例:
1、首先去Pycharm官網,或者直接輸入網址:http://www.jetbrains.com/pycharm/download/#section=windows,下載PyCharm安裝包,根據自己電腦的操作系統進行選擇,對于windows系統選擇下圖的框框所包含的安裝包。
2,雙擊下載的安裝包,進行安裝,然后會彈出界面:
3,選擇安裝目錄,Pycharm需要的內存較多,建議將其安裝在D盤或者E盤,不建議放在系統盤C盤:
4,點擊Next,進入下圖的界面:
Create Desktop Shortcut創建桌面快捷方式,一個32位,一個64位,小編的電腦是64位系統,所以選擇64位。
勾選Create Associations是否關聯文件,選擇以后打開.py文件就會用PyCharm打開。
5,點擊Next,進入下圖(默認安裝即可):
6,耐心的等待兩分鐘左右,如下圖:
7,之后就會得到下面的安裝完成的界面:
8,選擇Accept,進入下一步:
9,進入激活界面,選擇第二個License server,如下圖所示:
之后在License server address中隨意輸入下面兩個注冊碼中的任意一個即可,Pycharm新注冊碼1:http://idea.liyang.io或pycharm新注冊碼2:http://xidea.online,之后點擊OK,便可以激活Pycharm了。
View Code
10,Pycharm激活后:
激活之后會自動跳轉到下圖界面,選擇IDE主題與編輯區主題:
11,可以選擇主題風格:
12,之后進入界面:
13,創建py文件:
14,最終書寫代碼并運行:
print輸出帶顏色的方法
書寫格式: 開頭部分 :\033[顯示方式;前景色;背景色m + 結尾部分: \033[0m
? 注意:開頭部分的三個參數:顯示方式,前景色,背景色是可選參數,可以只寫其中的某一個;另外由于表示三個參數不同含義的數值都是唯一的沒有重復的,所以三個參數的書寫先后順序沒有固定要求,系統都能識別;但是,建議按照默認的格式規范書寫。
? 對于結尾部分,其實也可以省略,但是為了書寫規范,建議\033[***開頭,\033[0m結尾。
-------------------------------------------
-------------------------------------------
字體色 | 背景色 | 顏色描述
-------------------------------------------
30 | 40 | 黑色
31 | 41 | 紅色
32 | 42 | 綠色
33 | 43 | 黃色
34 | 44 | 藍色
35 | 45 | 紫紅色
36 | 46 | 青藍色
37 | 47 | 白色
-------------------------------------------
-------------------------------
顯示方式 | 效果
-------------------------------
0 | 終端默認設置
1 | 高亮顯示
4 | 使用下劃線
5 | 閃爍
7 | 反白顯示
8 | 不可見
-------------------------------
數值表示的參數含義:
顯示方式:
0(默認值)、1(高亮)、22(非粗體)、4(下劃線)、24(非下劃線)、 5(閃爍)、25(非閃爍)、7(反顯)、27(非反顯)
前景色:
30(黑色)、31(紅色)、32(綠色)、 33(黃色)、34(藍色)、35(洋 紅)、36(青色)、37(白色)
背景色:
40(黑色)、41(紅色)、42(綠色)、 43(黃色)、44(藍色)、45(洋 紅)、46(青色)、47(白色)
常見開頭格式
:
\033[0m 默認字體正常顯示,不高亮
\033[32;0m 紅色字體正常顯示
\033[1;32;40m 顯示方式: 高亮 字體前景色:綠色 背景色:黑色
\033[0;31;46m 顯示方式: 正常 字體前景色:紅色 背景色:青色
舉例說明:
1,
print('\033[1;35;0m字體變色,但無背景色 \033[0m') # 有高亮 或者 print('\033[1;35m字體有色,但無背景色 \033[0m')
print('\033[1;45m 字體不變色,有背景色 \033[0m') # 有高亮
print('\033[1;35;46m 字體有色,且有背景色 \033[0m') # 有高亮
print('\033[0;35;46m 字體有色,且有背景色 \033[0m') # 無高亮
結果:
2,
print('\033[0;36m床前明月光,')
print('疑是地上霜。')
print('舉頭望明月,')
print('低頭思故鄉。\033[0m')
結果:
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
