物件導向是對業務抽象成類、物件及其之間的關係來建模的軟體開發方法,一種程式設計正規化。具體通過物件導向的三大特徵來體現物件導向的思想。
1、繼承性:類與類之間的關係和復用性,對映具體業務中物件間的關係。
2、封裝性:類的獨立性,易於模組的維護和隔離,降低類之間耦合關係。
3、多型性:類方法的靈活性、抽象、行為和**的共享,提供變化。
在實際的開發中,我們都會想起六大設計原則和23種設計模式,通過這些總結的通用的設計模式解決具體業務場景的問題,其體現的也是物件導向的思想和物件導向的三大特徵。如果為了使用設計模式而硬套設計模式就與物件導向思想背道而馳,這樣編碼既沒有反映業務(物件導向是對現實世界理解和抽象),也沒有帶來**的易理解,所以就是在業務設計中不應該拘泥於使用什麼設計模式,需要的是圍繞使用物件導向對現實世界的「還原」。
關於物件導向,uml創始人grady booch在一次大會上提到乙個觀點,個人很贊同裡面提及的物件導向程式設計的目標:
我對物件導向程式設計的目標從來就不是復用。相反,對我來說,物件提供了一種處理複雜問題的方式。這個問題可以追溯到亞里斯多德:您把這個世界視為過程還是物件?在物件導向運動興起之前,程式設計以過程為中心,例如結構化設計方法,然而,系統已經達到了超越其處理能力的複雜性極點。有了物件,我們能夠通過提公升抽象級別來構建更大的,更複雜的系統-我認為,這才是物件導向程式設計運動的真正勝利。
初始設計:分析業務,對三種填報資料型別分別建立類與物件,封裝對應的方法,實現方法中的業務規則,通過類物件互相呼叫實現三種資料關係。該設計方式體現物件導向的抽象成類,物件及其之間的關係,但是仔細體會這個設計結果,可以發現只是單單建立類與物件,實現方法而沒有在設計中反應業務。
重構設計:在沒有使用系統填報之前,填報的方式是使用excel進行填報,都是靜態的填報文件,填報過程是由填報人進行操作,報表本身不會有行為。所以對靜態的文件抽象成類,類中包含的僅僅是報表內容資訊,不包含行為資訊(是靜態不具備行為內容),該類體現的就是建立物件,建立了一張報表。對於行為定義乙個介面行為(契約),通過介面中的方法實現報表的建立、填報、提交報表的過程。對於報表之間流程可以定義乙個流程介面來實現。
// 抽象的資料表using
system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
tqf.selfbussines
//////
分期id
/// public
string stageid
//////
建立人
/// public
string createby
//////
建立時間
/// public datetime createdate
//////
更新人
/// public
string updateby
//////
更新時間
/// public datetime updatedate
//////
報表狀態
/// public
int status
//////
報表維護狀態(0初始化,1編輯儲存、2刪除報表、3歷史記錄)使用策略模式,依據不同的狀態做不同的維護操作
/// public
int improvestatus
}}
// 操作類handlerusing
system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
tqf.selfbussines
//////
建立報表
/// ///
///resultbase createreport(t1 createreportdata);
//////
維護報表
/// ///
resultbase improvereport();
//////
提交報表
/// ///
resultbase submitreport();
}}
每天我們開發者們都會接收業務需求和任務,然後物件導向過程中建立類、物件、關係實現需求,在這個過程分析業務中建立那些類,那些介面,那些抽象類及其方法等資訊,也會使用已經學習的設計原則與設計模式設計類,組合類。這個業務的設計有很多種答案,沒有絕對的完美設計,只有更能體現業務的設計,所以物件導向帶來的思考就是如何更好的體現業務,這個才是我們應該去追求的。
物件導向程式設計感悟
多型 允許將子類型別的指標賦值給父類型別的指標。也就是同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果。在執行時,可以通過指向基類的指標,來呼叫實現派生類中的方法。例如,在自然界中,人都能吃飯,即 如果你是人,則必須能吃飯 那麼模擬到電腦程式中,就應該有乙個iperson 習慣上,介面...
物件導向系列一(繼承)
物件導向的三大特性 繼承 封裝 多型性。我們先來說說繼承。繼承,是子類對父類的沿用,父類的除私有 private 部分外,都可以歸子類所繼承。繼承的關係 子類 繼承類 派生類,父類 基類 對父類進行繼承的子類被稱為繼承類。又可描述為父類派生而產生的子類為派生類。被子類繼承的父類被稱為基類 繼承的兩個...
python物件導向 item系列
具體用法 class foo def getitem self,item print get return self.dict item def setitem self,key,value print set self.dict key value 等同於setattr self,key,valu...