編寫程序爲了完成現實的功能,爲了可以編寫出更好的代碼,開發人員不斷地進行抽象,提取,複用,而且在此基礎上設計個優良的軟件架構。編程
通常的軟件設計認爲系統是總體的,耦合的,因此設計的思路是在現實需求的基礎上進行一些提取,將功能點進行抽象,從而達到解耦和模塊化的目的。架構
現實編程偏偏相反,認爲系統是自己就是模塊的,解耦的,所以設計的思路也不一樣,並不刻意要求去進行抽象,而是儘量的用軟件去描述系統自己,不少時候不是進行向上的抽像,而是向下的分解。框架
現實編程的好處是可以將需求快速轉化爲可用的軟件,同時可以得到一個不錯的軟件架構——高內聚低耦合的系統,具備較好的可拓展性和可維護性。模塊化
現實編程之因此速度快是由於不須要花多大的時間進行設計,甚至不須要進行設計。在時候有你甚至能夠直接進行編程,而不須要先設計出一個基本的框架, 這在那些需求不明確,頻繁變化的系統開發中頗有價值。優化
系統的需求越貼近現實世界,這種方法的效果越好,反之效果越差。spa
通常經常使用的軟件設計思路是這樣的:設計
請注意,上圖中的需求,功能和模塊之間的連線使用的虛線,這說明它們並非一一對應的,它們的關係是多對多的關係。blog
舉個例子來講,咱們須要製做一個貪吃蛇遊戲。遊戲
通常的思路能夠畫出以下的圖:開發
根據這張圖你會設計出對應的類,設計好每一個類的交互方式,最後設計出一個完整的系統。
它是能夠工做的,若是後續的需求可以按照你設計的方向來變化的話,它應該具有不錯的拓展性。不過不幸的是,需求的變化每每超出咱們預想的範圍。系統第一個版本出來之後,原有的架構會在各類各樣的需求的變化過程當中不斷地腐化。
現實編程的思路與之不一樣,現實編程使用代碼儘量地描述真實的事物,並以此爲依據完成軟件的設計。
注意上面圖中的模塊不是咱們隨意想象出來的,而是現實中實際存在的劃分。
對於貪食蛇來講,系統的圖劃分以下
咱們能夠看到,全部的模塊都不是咱們本身杜撰出來的,而是對真實的事物進行的分解。這樣功能天然而然的被分配到每一個模塊中。
現實編程的好處: