日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程

系統(tǒng) 1939 0

面系那個(gè)對象開發(fā)原則.高內(nèi)聚.低耦合

軟件設(shè)計(jì)中通常用耦合度和內(nèi)聚度作為衡量模塊獨(dú)立程度的標(biāo)準(zhǔn)。劃分摸塊的一個(gè)準(zhǔn)則就是高內(nèi)聚低耦合。

這是軟件工程中的概念,是判斷設(shè)計(jì)好壞的標(biāo)準(zhǔn),主要是面向OO的設(shè)計(jì),主要是看類的內(nèi)聚性是否高,偶合度是否低.

每一個(gè)類完成特定的獨(dú)立的功能,這個(gè)就是高內(nèi)聚。耦合就是類之間的互相調(diào)用關(guān)系,如果耦合很強(qiáng),互相牽扯調(diào)用很多,那么會牽一發(fā)而動全身,不利于維護(hù)和擴(kuò)展。

類之間的設(shè)置應(yīng)該要低耦合,但是每個(gè)類應(yīng)該要高內(nèi)聚.耦合是類之間相互依賴的尺度.如果每個(gè)對象都有引用其它所有的對象,那么就有高耦合,這是不合乎要求的,因?yàn)樵趦蓚€(gè)對象之間,潛在性地流動了太多信息.低耦合是合乎要求的:它意味著對象彼此之間更獨(dú)立的工作.低耦合最小化了修改一個(gè)類而導(dǎo)致也要修改其它類的”連鎖反應(yīng)”. 內(nèi)聚是一個(gè)類中變量與方法連接強(qiáng)度的尺度.高內(nèi)聚是值得要的,因?yàn)樗馕吨惪梢愿玫貓?zhí)行一項(xiàng)工作.低內(nèi)聚是不好的,因?yàn)樗砻黝愔械脑刂g很少相關(guān).成分之間相互有關(guān)聯(lián)的模塊是合乎要求的.每個(gè)方法也應(yīng)該高內(nèi)聚.大多數(shù)的方法只執(zhí)行一個(gè)功能.不要在方法中添加’額外’的指令,這樣會導(dǎo)致方法執(zhí)行更多的函數(shù).

推廣開來說,這個(gè)思想并不限于類與類之間的關(guān)系。模塊和模塊,子系統(tǒng)之間也都要遵守這個(gè)原則,才可以設(shè)計(jì)出延展性比較強(qiáng)的系統(tǒng)。

什么是耦合

定義

耦合性也稱塊間聯(lián)系。指軟件系統(tǒng)結(jié)構(gòu)中各模塊間相互聯(lián)系緊密程度的一種度量。模塊之間聯(lián)系越緊密,其耦合性就越強(qiáng),模塊的獨(dú)立性則越差。模塊間耦合高低取決于模塊間接口的復(fù)雜性、調(diào)用的方式及傳遞的信息。

耦合度就是某模塊(類)與其它模塊(類)之間的關(guān)聯(lián)、感知和依賴的程度,是衡量代碼獨(dú)立性的一個(gè)指標(biāo),也是軟件工程設(shè)計(jì)
及編碼質(zhì)量評價(jià)的一個(gè)標(biāo)準(zhǔn)。耦合的強(qiáng)度依賴于以下幾個(gè)因素:
(1)一個(gè)模塊對另一個(gè)模塊的調(diào)用;
(2)一個(gè)模塊向另一個(gè)模塊傳遞的數(shù)據(jù)量;
(3)一個(gè)模塊施加到另一個(gè)模塊的控制的多少;
(4)模塊之間接口的復(fù)雜程度。

耦合分類

耦合按從強(qiáng)到弱的順序可分為以下幾種類型:
a)非直接耦合:兩模塊間沒有直接關(guān)系,之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實(shí)現(xiàn)的   
b)數(shù)據(jù)耦合:指兩個(gè)模塊之間有調(diào)用關(guān)系,傳遞的是簡單的數(shù)據(jù)值,相當(dāng)于高級語言的值傳遞; 
c)標(biāo)記耦合:指兩個(gè)模塊之間傳遞的是數(shù)據(jù)結(jié)構(gòu),如高級語言中的數(shù)組名、記錄名、文件名等這些名字即標(biāo)記,其實(shí)傳遞的是這個(gè)數(shù)據(jù)結(jié)構(gòu)的地址;  
d)控制耦合:一指一個(gè)模塊調(diào)用另一個(gè)模塊時(shí),傳遞的是控制變量(如開關(guān)、標(biāo)志等),被調(diào)模塊通過該控制變量的值有選擇地執(zhí)行塊內(nèi)某一功能; 
e)外部耦合:一組模塊都訪問同一全局簡單變量而不是同一全局?jǐn)?shù)據(jù)結(jié)構(gòu),而且不是通過參數(shù)傳遞該全局變量的信息   
f)公共耦合:一組模塊都訪問同一個(gè)公共數(shù)
據(jù)環(huán)境。該公共數(shù)據(jù)環(huán)境可以是全局?jǐn)?shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)等。   
g)內(nèi)容耦合:這是最高程度的耦合,也是最差的耦合。當(dāng)一個(gè)模塊直接使用另一個(gè)模塊的內(nèi)部數(shù)據(jù),或通過非正常入口而轉(zhuǎn)入另一個(gè)模塊內(nèi)部。

為什么要低耦合(解耦合)

??在面向?qū)ο缶幊讨校瑢ο笞陨硎莾?nèi)聚的,是保管好自己的數(shù)據(jù),完成好自己的操作的,而對外界呈現(xiàn)出自己的狀態(tài)和行為。但是,沒有絕對的自力更生,對外開放也是必要的!一個(gè)對象,往往需要跟其他對象打交道,既包括獲知其他對象的狀態(tài),也包括仰賴其他對象的行為,而一旦這樣的事情發(fā)生時(shí),我們便稱該對象依賴于另一對象。只要兩個(gè)對象之間存在一方依賴一方的關(guān)系,那么我們就稱這兩個(gè)對象之間存在耦合。 比如媽媽和baby,媽媽要隨時(shí)關(guān)注baby的睡、醒、困、哭、尿等等狀態(tài),baby則要仰賴媽媽的喂奶、哄睡、換紙尿褲等行為,從程序的意義上說,二者互相依賴,因此也存在耦合。首先要說,耦合是必要的。

??耦合的程度就是耦合度,也就是雙方依賴的程度。上文所說的媽媽和baby就是強(qiáng)耦合。而你跟快遞小哥之間則是弱耦合。一般來說耦合度過高并不是一件好事。就拿作為IT精英的你來說吧,上級隨時(shí)敦促你的工作進(jìn)度,新手頻繁地需要你指導(dǎo)問題,隔三差五還需要參加酒局飯局,然后還要天天看領(lǐng)導(dǎo)的臉色、關(guān)注老婆的心情,然后你還要關(guān)注代碼中的bug 、bug、bug,和需求的變化、變化、變化,都夠焦頭爛額了,還猝不及防的要關(guān)注眼睛、頸椎、前列腺和頭發(fā)的狀態(tài),然后你再炒個(gè)股,這些加起來大概就是個(gè)強(qiáng)耦合了。從某種意義上來說,耦合天生就與自由為敵,無論是其他對象依賴于你,還是你依賴其他對象。比如有人嗜煙、酗酒,你有多依賴它們就有多不自由;比如有人家里生了七八個(gè)娃,還有年邁的父母、岳父母,他們有多依賴你,你就有多不自由。所以老子這樣講:“五音令人耳聾,五色令人目盲,馳騁狩獵令人心發(fā)狂,難得之貨令人行妨?!北R梭也是不無悲涼的說“人生而自由,卻又無往而不在枷鎖中”。因此,要想自由,就必須要降低耦合,而這個(gè)過程就叫做解耦和。

??耦合度很高的情況下,維護(hù)代碼時(shí)修改一個(gè)地方會牽連到很多地方,如果修改時(shí)沒有理清這些耦合關(guān)系,那么帶來的后果
可能會是災(zāi)難性的,特別是對于需求變化較多以及多人協(xié)作開發(fā)維護(hù)的項(xiàng)目,修改一個(gè)地方會引起本來已經(jīng)運(yùn)行穩(wěn)定的模塊錯誤,嚴(yán)重時(shí)會導(dǎo)致惡性循環(huán),問題永遠(yuǎn)改不完,開發(fā)和測試都在各種問題之間奔波勞累,最后導(dǎo)致項(xiàng)目延期,用戶滿意度降低,成本也增加了,這對用戶和開發(fā)商影響都是很惡劣的,各種風(fēng)險(xiǎn)也就不言而喻了。

如何降低耦合(解耦合)

  1. 少使用類的繼承,多用接口隱藏實(shí)現(xiàn)的細(xì)節(jié)。 Java面向?qū)ο缶幊桃虢涌诔酥С侄鄳B(tài)外, 隱藏實(shí)現(xiàn)細(xì)節(jié)也是其中一個(gè)目的。
  2. 模塊的功能化分盡可能的單一,道理也很簡單,功能單一的模塊供其它模塊調(diào)用的機(jī)會就少。(其實(shí)這是高內(nèi)聚的一種說法,高內(nèi)聚低耦合一般同時(shí)出現(xiàn),為了限制篇幅,我們將在以后的版期中討論)。
  3. 遵循一個(gè)定義只在一個(gè)地方出現(xiàn)。
  4. 少使用全局變量。
  5. 類屬性和方法的聲明少用public,多用private關(guān)鍵字,
  6. 多用設(shè)計(jì)模式,比如采用MVC的設(shè)計(jì)模式就可以降低界面與業(yè)務(wù)邏輯的耦合度。
  7. 盡量不用“硬編碼”的方式寫程序,同時(shí)也盡量避免直接用SQL語句操作數(shù)據(jù)庫。
  8. 最后當(dāng)然就是避免直接操作或調(diào)用其它模塊或類(內(nèi)容耦合);如果模塊間必須存在耦合,原則上盡量使用數(shù)據(jù)耦合,少用控制耦合,
    限制公共耦合的范圍,避免使用內(nèi)容耦合。

什么是內(nèi)聚

??內(nèi)聚,通俗的來講,就是自己的東西自己保管,自己的事情自己做。每個(gè)模塊盡可能獨(dú)立完成自己的功能,不依賴于模塊外部的代碼。

??對象是什么?對象就是保管好自己的東西,做好自己的事情的程序模塊——這就是內(nèi)聚!當(dāng)然,對象的內(nèi)聚只是內(nèi)聚的一個(gè)層次,在不同的尺度下其實(shí)都有內(nèi)聚的要求,比如方法也要講內(nèi)聚,架構(gòu)也要講內(nèi)聚。

內(nèi)聚: 內(nèi)聚性又稱塊內(nèi)聯(lián)系。指模塊的功能強(qiáng)度的度量,即一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度的度量。若一個(gè)模塊內(nèi)各元素(語名之間、程序段之間)聯(lián)系的越緊密,則它的內(nèi)聚性就越高。

高內(nèi)聚:類與類之間的關(guān)系而定,高,意思是他們之間的關(guān)系要簡單,明了,不要有很強(qiáng)的關(guān)系,不然,運(yùn)行起來就會出問題。一個(gè)類的運(yùn)行影響到其他的類。由于高內(nèi)聚具備魯棒性,可靠性,可重用性,可讀性等優(yōu)點(diǎn),模塊設(shè)計(jì)推薦采用高內(nèi)聚。

內(nèi)聚度是指內(nèi)部各元素之間聯(lián)系的緊密程度,模塊的內(nèi)聚種類通??煞譃?種,按其內(nèi)聚度從低
到高的次序依此為:偶然內(nèi)聚、邏輯內(nèi)聚、瞬時(shí)內(nèi)聚、過程內(nèi)聚、通信內(nèi)聚、順序內(nèi)聚、功能內(nèi)聚。

1 偶然內(nèi)聚: 指一個(gè)模塊內(nèi)的各處理元素之間沒有任何聯(lián)系。
2 邏輯內(nèi)聚: 指模塊內(nèi)執(zhí)行幾個(gè)邏輯上相似的功能,通過參數(shù)確定該模塊完成哪一個(gè)功能。
3 時(shí)間內(nèi)聚: 把需要同時(shí)執(zhí)行的動作組合在一起形成的模塊為時(shí)間內(nèi)聚模塊。
4 通信內(nèi)聚: 指模塊內(nèi)所有處理元素都在同一個(gè)數(shù)據(jù)結(jié)構(gòu)上操作(有時(shí)稱之為信息內(nèi)聚),或者指各處理使用相同的輸入數(shù)據(jù)或者產(chǎn)生相同的輸出數(shù)據(jù)。
5 順序內(nèi)聚: 指一個(gè)模塊中各個(gè)處理元素都密切相關(guān)于同一功能且必須順序執(zhí)行,前一功能元素輸出就是下一功能元素的輸入。
6 功能內(nèi)聚: 這是最強(qiáng)的內(nèi)聚,指模塊內(nèi)所有元素共同完成一個(gè)功能,缺一不可。與其他模塊的耦合是最弱的。

例子:

有個(gè)例子很容易明白:一個(gè)程序有50個(gè)函數(shù),這個(gè)程序執(zhí)行得非常好;然而一旦你修改其中一個(gè)函數(shù),其他49個(gè)函數(shù)都需要做修改,這就是高耦合的后果。
一旦你理解了它,你編寫概要設(shè)計(jì)的時(shí)候設(shè)計(jì)類或者模塊自然會考慮到“高內(nèi)聚,低耦合”。

可能也可以這樣理解:
高內(nèi)聚相對的是方法的獨(dú)立性,減少外部(全局參數(shù))的影響。低耦合相對的是方法的依賴性低,可用搭積木的方式構(gòu)建程序。內(nèi)聚類似積木,耦合類似蓋房子,而高內(nèi)聚低耦合的方式是比較效率并個(gè)性化構(gòu)建房屋的方式。

Python安裝詳細(xì)教程

以windows版本舉例:

1、首先去Pycharm官網(wǎng),或者直接輸入網(wǎng)址:http://www.jetbrains.com/pycharm/download/#section=windows,下載PyCharm安裝包,根據(jù)自己電腦的操作系統(tǒng)進(jìn)行選擇,對于windows系統(tǒng)選擇下圖的框框所包含的安裝包。

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第1張圖片

2,雙擊下載的安裝包,進(jìn)行安裝,然后會彈出界面:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第2張圖片

3,選擇安裝目錄,Pycharm需要的內(nèi)存較多,建議將其安裝在D盤或者E盤,不建議放在系統(tǒng)盤C盤:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第3張圖片

4,點(diǎn)擊Next,進(jìn)入下圖的界面:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第4張圖片

Create Desktop Shortcut創(chuàng)建桌面快捷方式,一個(gè)32位,一個(gè)64位,小編的電腦是64位系統(tǒng),所以選擇64位。

勾選Create Associations是否關(guān)聯(lián)文件,選擇以后打開.py文件就會用PyCharm打開。

5,點(diǎn)擊Next,進(jìn)入下圖(默認(rèn)安裝即可):

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第5張圖片

6,耐心的等待兩分鐘左右,如下圖:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第6張圖片

7,之后就會得到下面的安裝完成的界面:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第7張圖片

8,選擇Accept,進(jìn)入下一步:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第8張圖片

9,進(jìn)入激活界面,選擇第二個(gè)License server,如下圖所示:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第9張圖片

之后在License server address中隨意輸入下面兩個(gè)注冊碼中的任意一個(gè)即可,Pycharm新注冊碼1:http://idea.liyang.io或pycharm新注冊碼2:http://xidea.online,之后點(diǎn)擊OK,便可以激活Pycharm了。

如果還不行,那么點(diǎn)擊圖片中的 img ,復(fù)制粘貼以下驗(yàn)證碼:

img View Code

10,Pycharm激活后:

激活之后會自動跳轉(zhuǎn)到下圖界面,選擇IDE主題與編輯區(qū)主題:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第10張圖片

11,可以選擇主題風(fēng)格:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第11張圖片

12,之后進(jìn)入界面:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第12張圖片

13,創(chuàng)建py文件:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第13張圖片

14,最終書寫代碼并運(yùn)行:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第14張圖片

print輸出帶顏色的方法

書寫格式: 開頭部分 :\033[顯示方式;前景色;背景色m + 結(jié)尾部分: \033[0m

? 注意:開頭部分的三個(gè)參數(shù):顯示方式,前景色,背景色是可選參數(shù),可以只寫其中的某一個(gè);另外由于表示三個(gè)參數(shù)不同含義的數(shù)值都是唯一的沒有重復(fù)的,所以三個(gè)參數(shù)的書寫先后順序沒有固定要求,系統(tǒng)都能識別;但是,建議按照默認(rèn)的格式規(guī)范書寫。

? 對于結(jié)尾部分,其實(shí)也可以省略,但是為了書寫規(guī)范,建議\033[***開頭,\033[0m結(jié)尾。

          
            -------------------------------------------
-------------------------------------------
字體色     |       背景色     |      顏色描述
-------------------------------------------
30        |        40       |       黑色
31        |        41       |       紅色
32        |        42       |       綠色
33        |        43       |       黃色
34        |        44       |       藍(lán)色
35        |        45       |       紫紅色
36        |        46       |       青藍(lán)色
37        |        47       |       白色
-------------------------------------------
-------------------------------
顯示方式     |      效果
-------------------------------
0           |     終端默認(rèn)設(shè)置
1           |     高亮顯示
4           |     使用下劃線
5           |     閃爍
7           |     反白顯示
8           |     不可見
-------------------------------
          
        

數(shù)值表示的參數(shù)含義:

顯示方式: 0(默認(rèn)值)、1(高亮)、22(非粗體)、4(下劃線)、24(非下劃線)、 5(閃爍)、25(非閃爍)、7(反顯)、27(非反顯)
前景色: 30(黑色)、31(紅色)、32(綠色)、 33(黃色)、34(藍(lán)色)、35(洋 紅)、36(青色)、37(白色)
背景色: 40(黑色)、41(紅色)、42(綠色)、 43(黃色)、44(藍(lán)色)、45(洋 紅)、46(青色)、47(白色)

常見開頭格式
\033[0m 默認(rèn)字體正常顯示,不高亮
\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')  # 無高亮
          
        

結(jié)果:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第15張圖片

2,

          
            print('\033[0;36m床前明月光,')
print('疑是地上霜。')
print('舉頭望明月,')
print('低頭思故鄉(xiāng)。\033[0m')
          
        

結(jié)果:

知識篇: 面向?qū)ο箝_發(fā)原則.高內(nèi)聚.低耦合+Python安裝詳細(xì)教程+print輸出帶顏色的方法_第16張圖片


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 丹东市| 保康县| 通辽市| 肃宁县| 石家庄市| 余江县| 章丘市| 治多县| 陆良县| 庆云县| 鄂托克旗| 综艺| 潼南县| 嘉兴市| 吐鲁番市| 堆龙德庆县| 永嘉县| 合水县| 内乡县| 裕民县| 上饶市| 平乡县| 盱眙县| 壤塘县| 河池市| 科尔| 锡林郭勒盟| 辽中县| 霍山县| 雷州市| 周至县| 巧家县| 阿克陶县| 江孜县| 固始县| 门头沟区| 资源县| 临猗县| 元谋县| 万载县| 汾阳市|