導(dǎo)讀
為什么都說從一個(gè)人的代碼,就可以看出他的開發(fā)經(jīng)驗(yàn)和編程功底.
一份優(yōu)雅的代碼,和一份架構(gòu)混亂,層次雜亂的分別擺在你面前,
當(dāng)你閱讀的時(shí)候,你會(huì)有兩種完全不同的感受.優(yōu)雅的代碼閱讀起來是那樣的舒適.
真正的程序員都領(lǐng)略過程序之美,那些簡潔有力的代碼,精巧嚴(yán)密的構(gòu)思,高效直接的解決方案,美得令人窒息??上В谌找婀I(yè)化,商業(yè)化和利益驅(qū)動(dòng)的IT行業(yè)中,這種美已經(jīng)是越來越少見的東西。但我想每一個(gè)真正熱愛編程的人,都渴望欣賞這種美,渴望在思考過程中一次次“Aha!”式的愉悅。感受其中的妙趣所在.
iOS網(wǎng)易公開課,斯坦福大學(xué)的白胡子老爺爺一直說object-c是一門優(yōu)雅的編程語言,我們應(yīng)該盡量把代碼寫得優(yōu)雅一些.大家有時(shí)間的話可以看看斯坦福大學(xué)公開課上白胡子老爺爺?shù)挠?jì)算器demo.雖然是一個(gè)很簡單的程序,但是里面的思想十分值得我們學(xué)習(xí).在看之前,你可以先思考思考,要是換做是你來寫這個(gè)程序,你會(huì)怎么設(shè)計(jì)這個(gè)程序
我們不要寫完代碼就束之高閣,適當(dāng)?shù)貎?yōu)化代碼結(jié)構(gòu),能夠?yàn)橐院蟮拈_發(fā)帶來許多方便.做過大型項(xiàng)目開發(fā)的朋友們肯定深有體會(huì)
//當(dāng)程序書寫到一定量的時(shí)候,畢竟要進(jìn)行封裝,重構(gòu)。好處多多啊。
1.代碼邏輯結(jié)構(gòu)更加清晰。
2.冗余代碼量減少,更加清爽。
3.維護(hù)量也較低,符合"對擴(kuò)展開放,對修改關(guān)閉"的軟件架構(gòu)思想等等。
可以看到通過封裝使一部分成員充當(dāng)類與外部的接口,而將其他的成員隱蔽起來,這樣就達(dá)到了對成員訪問權(quán)限的合理控制,使不同類之間的相互影響減少到最低限度,進(jìn)而增強(qiáng)數(shù)據(jù)的安全性和簡化程序的編寫工作。
前面兩點(diǎn)很好理解,那什么是"對擴(kuò)展開放,對修改關(guān)閉"原則呢?這里簡單介紹一下
開閉原則(OCP:Open-Closed Principle)是指在進(jìn)行面向?qū)ο笤O(shè)計(jì)(OOD:Object Oriented Design)中,設(shè)計(jì)類或其他程序單位時(shí),應(yīng)該遵循:
- 對擴(kuò)展開放(open)
- 對修改關(guān)閉(closed)
的設(shè)計(jì)原則。
開閉原則是判斷面向?qū)ο笤O(shè)計(jì)是否正確的最基本的原理之一。
根據(jù)開閉原則,在設(shè)計(jì)一個(gè)軟件系統(tǒng)模塊(類,方法)的時(shí)候,應(yīng)該可以在不修改原有的模塊(修改關(guān)閉)的基礎(chǔ)上,能擴(kuò)展其功能(擴(kuò)展開放)。
- 擴(kuò)展開放:某模塊的功能是可擴(kuò)展的,則該模塊是擴(kuò)展開放的。軟件系統(tǒng)的功能上的可擴(kuò)展性要求模塊是擴(kuò)展開放的。
- 修改關(guān)閉:某模塊被其他模塊調(diào)用,如果該模塊的源代碼不允許修改,則該模塊修改關(guān)閉的。軟件系統(tǒng)的功能上的穩(wěn)定性,持續(xù)性要求是修改關(guān)閉的。
** 這也是系統(tǒng)設(shè)計(jì)需要遵循開閉原則的原因:**
1)穩(wěn)定性。開閉原則要求擴(kuò)展功能不修改原來的代碼,這可以讓軟件系統(tǒng)在變化中保持穩(wěn)定。
2)擴(kuò)展性。開閉原則要求對擴(kuò)展開放,通過擴(kuò)展提供新的或改變原有的功能,讓軟件系統(tǒng)具有靈活的可擴(kuò)展性。