.NET簡談接口

自從面向對象開發方式的出現,抽象的概念就開始突飛猛進的發展,面向對象編程、面向接口編程、面向組件編程等等;這一系列的概念都是軟件工程所追求的思想範疇,高類聚低耦合。程序員

今天我要簡談的是面向對象裏面很是重要的也是很是抽象的概念,接口。談起接口多少人曾經爲之痛苦過,尤爲是一些剛入門的開發人員(包括小弟),百思不得其解,啥叫接口,接口能幹嗎用,用不用有什麼區別;等等問題困擾着,這些問題不解決不弄明白,很難在面向對象領域混,更別談面向對象開發了,可能有人認爲面向對象開發就是麻煩我不用同樣也能開發,開發一個項目又是分這個層,又是分那個層的,繁瑣。這中狀況我就沒有權利去發表任何意見了。仁者見仁智者見智吧;編程

接口是面向對象裏面很是重要的概念,咱們暫且不談面向對象裏面的接口;其實接口在咱們平常生活中處處可見,好比自來水的水管、燃氣閥門、電視機的插頭等等;在面向對象裏面的接口概念其實跟這些都是大同小異的。爲何要提倡進行面向對象軟件開發呢,我想就是將咱們開發的方式徹底能模仿天然界的生存規律,在沒有完全理解面向對象裏面的接口時,請注意千萬不要本身欺騙本身,簡單的自已打個比方就OK了(別人這麼說,我也這麼想一下),這些問題必定要搞清楚,本人有過成功理解面向接口的經驗,但願經過本文章能幫助您小理解一下;後面的昇華(面向對象設計、面向接口設計等等),還得靠本身去摸索。咱們再來看一下,在咱們計算機裏面存在哪些接口,好比咱們的硬件與OS的接口,硬件存在的數量數不勝數,各類各樣,要想徹底能與OS對接,能讓咱們的軟件使用,必須遵循必定的接口,在咱們的OS與硬件之間存在着一層,硬件抽象層;編程語言

請看圖:ide

什麼叫硬件抽象層:硬件抽象層是位於操做系統內核與硬件電路之間的接口層,其目的在於將硬件抽象化;目的就是使用這一層來抽象化全部的硬件接口,對上層使用統一的接口調用;根本不須要關注有哪些硬件,只要你們都遵循一致的接口就能互相通信,互相調用;有一位大師曾經說過:在計算機科學領域裏任何一個問題都能經過添加一個間接層來解決;這裏的接口是一個比較大的開發思想,可是它與代碼中的接口概念是徹底同樣的,都是提升抽象性,提升獨立性;spa

咱們回到開發代碼中來,我就拿.NET來示範了(本人只會C#),在某一個編程語言裏面的接口其實就和上面的硬件接口層是一個意思,咱們拿一個例子來講吧,我就奉獻我認爲最能說明接口問題的例子,這個例子一直伴隨着本人理解到如今,每當我有問題時,我就利用這個例子來打比方,其實很簡單的一個例子,就是徹底模仿現實生活中的場景,也是面向對象所最求的精髓;都說演員要感覺生活才能演好戲,咱們程序員也要感覺生活才能寫出好的程序;(開個玩笑)操作系統

例子:假如我是一家生產水管公司的老闆,我要生產全部能被家庭、工廠、企業使用的水管;要想生產這些水管,就必需要知道這些水管能與家庭、工廠、企業進行對接的條件,家庭、工廠、企業都使用些什麼規格、型號的水管;這些東西那裏來,找啊;注意這裏就造成了第一個接口,各廠家的水管規格、型號說明書,這個說明書就是咱們這裏的接口;知道了各個生產廠商的水管的規格、型號說明書,我就知道怎麼與之對接了;設計

請看圖:3d

各個廠商都公佈了本身公司生產的商品的一系列說明性信息,只要咱們找到了這些信息就能夠生產了;咱們把圖轉換成C#代碼,請看圖:orm

在咱們解決方案中有三家廠商公佈了說明書,內容是,請看圖:對象

 

我這裏就給出一個屬性,水管的半徑;在接口裏面不得有任何的實現代碼,只能是申明要實現的代碼;讓要實現的對象去完成;這個接口的做用就是當我生產的水管與廠商的水管進行對接時,要去讀取的屬性標識;記住,接口是實現的定義,是一種規則,一種描述,不不包括實現代碼;

有了說明書我要回去生產了,請看圖:

 

代碼圖請看:

 

在項目裏面多了一個本公司的項目,咱們引用生產商1,而後實現規格說明書接口,請看圖:

實現了接口,就能夠與生產商1的產品進行對接了;記住,任何一個公開的接口,接口裏面的東西都是公開方必需要使用到的東西,必須實現;仔細想一想咱們生活中,當一個水閥門沒有開關時,那是多可怕的;下面實現對接,請看圖:

 

任何接口的實如今最後都會被調用,因此這是接口的本質,它將實現的規格對外公開,讓你們去實現,只要遵循接口就等於它本身的實現;面向對象編程的最高境界就是面向接口編程,接口就比如一個工程的工程圖紙,只要將圖紙給包工頭,讓他去實施就OK了;請看代碼圖:

接口就講完了,簡簡單單的代碼但願您能看的懂;最後咱們總結一句:

接口就比如咱們天然界中的說明文檔,而實現就是咱們依照說明文當生產出來的能使用的實體,接口是一切事物的抽象定義,一切事物的抽象描述;

本文出自 「pattern driven the world」 博客,請務必保留此出處http://wangqingpei557.blog.51cto.com/1009349/558379

相關文章
相關標籤/搜索