亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

java 接口(基礎思想一)

2019-11-14 23:31:21
字體:
來源:轉載
供稿:網友
java 接口(基礎思想一)

我想,對于各位使用面向對象編程語言的程序員來說,“接口”這個名詞一定不陌生,但是不知各位有沒有這樣的疑惑:接口有什么用途?它和抽象類有什么區別?能不能用抽象類代替接口呢?而且,作為程序員,一定經常聽到“面向接口編程”這個短語,那么它是什么意思?有什么思想內涵?和面向對象編程是什么關系?本文將一一解答這些疑問。

1.面向接口編程和面向對象編程是什么關系

首先,面向接口編程和面向對象編程并不是平級的,它并不是比面向對象編程更先進的一種獨立的編程思想,而是附屬于面向對象思想體系,屬于其一部分?;蛘哒f,它是面向對象編程體系中的思想精髓之一。2.接口的本質

接口,在表面上是由幾個沒有主體代碼的方法定義組成的集合體,有唯一的名稱,可以被類或其他接口所實現(或者也可以說繼承)。它在形式上可能是如下的樣子:

interfaceInterfaceName { voidMethod1();  voidMethod2(intpara1); voidMethod3(stringpara2,stringpara3); }

那么,接口的本質是什么呢?或者說接口存在的意義是什么。我認為可以從以下兩個視角考慮:

1)接口是一組規則的集合,它規定了實現本接口的類或接口必須擁有的一組規則。體現了自然界“如果你是……則必須能……”的理念。 例如,在自然界中,人都能吃飯,即“如果你是人,則必須能吃飯”。那么模擬到計算機程序中,就應該有一個IPerson(習慣上,接口名由“I”開頭)接口,并有一個方法叫Eat(),然后我們規定,每一個表示“人”的類,必須實現IPerson接口,這就模擬了自然界“如果你是人,則必須能吃飯”這條規則。 從這里,我想各位也能看到些許面向對象思想的東西。面向對象思想的核心之一,就是模擬真實世界,把真實世界中的事物抽象成類,整個程序靠各個類的實例互相通信、互相協作完成系統功能,這非常符合真實世界的運行狀況,也是面向對象思想的精髓。

2)接口是在一定粒度視圖上同類事物的抽象表示。注意這里我強調了在一定粒度視圖上,因為“同類事物”這個概念是相對的,它因為粒度視圖不同而不同。

例如,在我的眼里,我是一個人,和一頭豬有本質區別,我可以接受我和我同學是同類這個說法,但絕不能接受我和一頭豬是同類。但是,如果在一個動物學家眼里,我和豬應該是同類,因為我們都是動物,他可以認為“人”和“豬”都實現了IAnimal這個接口,而他在研究動物行為時,不會把我和豬分開對待,而會從“動物”這個較大的粒度上研究,但他會認為我和一棵樹有本質區別。 現在換了一個遺傳學家,情況又不同了,因為生物都能遺傳,所以在他眼里,我不僅和豬沒區別,和一只蚊子、一個細菌、一顆樹、一個蘑菇乃至一個SARS病毒都沒什么區別,因為他會認為我們都實現了IDescendable這個接口(注:descendvi. 遺傳),即我們都是可遺傳的東西,他不會分別研究我們,而會將所有生物作為同類進行研究,在他眼里沒有人和病毒之分,只有可遺傳的物質和不可遺傳的物質。但至少,我和一塊石頭還是有區別的。

可不幸的事情發生了,某日,地球上出現了一位偉大的人,他叫列寧,他在熟讀馬克思、恩格斯的辯證唯物主義思想巨著后,頗有心得,于是他下了一個著名的定義:所謂物質,就是能被意識所反映的客觀實在。至此,我和一塊石頭、一絲空氣、一條成語和傳輸手機信號的電磁場已經沒什么區別了,因為在列寧的眼里,我們都是可以被意識所反映的客觀實在。如果列寧是一名程序員,他會這么說:所謂物質,就是所有同時實現了“IReflectabe”和“IEsse”兩個接口的類所生成的實例。(注:reflect v. 反映 esse n. 客觀實在)

也許你會覺得我上面的例子像在瞎掰,但是,這正是接口得以存在的意義。面向對象思想和核心之一叫做多態性,什么叫多態性?說白了就是在某個粒度視圖層面上對同類事物不加區別的對待而統一處理。而之所以敢這樣做,就是因為有接口的存在。像那個遺傳學家,他明白所有生物都實現了IDescendable接口,那只要是生物,一定有Descend()這個方法,于是他就可以統一研究,而不至于分別研究每一種生物而最終累死。 可能這里還不能給你一個關于接口本質和作用的直觀印象。那么在后文的例子和對幾個設計模式的解析中,你將會更直觀體驗到接口的內涵。

3.面向接口編程綜述

通過上文,我想大家對接口和接口的思想內涵有了一個了解,那么什么是面向接口編程呢?我個人的定義是:在系統分析和架構中,分清層次和依賴關系,每個層次不是直接向其上層提供服務(即不是直接實例化在上層中),而是通過定義一組接口,僅向上層暴露其接口功能,上層對于下層僅僅是接口依賴,而不依賴具體類。 這樣做的好處是顯而易見的,首先對系統靈活性大有好處。當下層需要改變時,只要接口及接口功能不變,則上層不用做任何修改。甚至可以在不改動上層代碼時將下層整個替換掉,就像我們將一個WD的60G硬盤換成一個希捷的160G的硬盤,計算機其他地方不用做任何改動,而是把原硬盤拔下來、新硬盤插上就行了,因為計算機其他部分不依賴具體硬盤,而只依賴一個IDE接口,只要硬盤實現了這個接口,就可以替換上去。從這里看,程序中的接口和現實中的接口極為相似,所以我一直認為,接口(interface)這個詞用的真是神似! 使用接口的另一個好處就是不同部件或層次的開發人員可以并行開工,就像造硬盤的不用等造CPU的,也不用等造顯示器的,只要接口一致,設計合理,完全可以并行進行開發,從而提高效率。 本篇文章先到這里。最后我想再啰嗦一句:面向對象的精髓是模擬現實,這也可以說是我這篇文章的靈魂。所以,多從現實中思考面向對象的東西,對提高系統分析設計能力大有脾益。

下篇文章,我將用一個實例來展示接口編程的基本方法 而第三篇,我將解析經典設計模式中的一些面向接口編程思想,并解析一下.NET分層架構中的面向接口思想。對本文的補充:

仔細看了各位的回復,非常高興能和大家一起討論技術問題。感謝給出肯定的朋友,也要感謝提出意見和質疑的朋友,這促使我更深入思考一些東西,希望能借此進步。在這里我想補充一些東西,以討論一些回復中比較集中的問題。 1.關于“面向接口編程”中的“接口”與具體面向對象語言中“接口”兩個詞 看到有朋友提出“面向接口編程”中的“接口”二字應該比單純編程語言中的interface范圍更大。我經過思考,覺得很有道理。這里我寫的確實不太合理。我想,面向對象語言中的“接口”是指具體的一種代碼結構,例如C#中用interface關鍵字定義的接口。而“面向接口編程”中的“接口”可以說是一種從軟件架構的角度、從一個更抽象的層面上指那種用于隱藏具體底層類和實現多態性的結構部件。從這個意義上說,如果定義一個抽象類,并且目的是為了實現多態,那么我認為把這個抽象類也稱為“接口”是合理的。但是用抽象類實現多態合理不合理?在下面第二條討論。

概括來說,我覺得兩個“接口”的概念既相互區別又相互聯系。“面向接口編程”中的接口是一種思想層面的用于實現多態性、提高軟件靈活性和可維護性的架構部件,而具體語言中的“接口”是將這種思想中的部件具體實施到代碼里的手段。2.關于抽象類與接口

看到回復中這是討論的比較激烈的一個問題。很抱歉我考慮不周沒有在文章中討論這個問題。我個人對這個問題的理解如下: 如果單從具體代碼來看,對這兩個概念很容易模糊,甚至覺得接口就是多余的,因為單從具體功能來看,除多重繼承外(C#,Java中),抽象類似乎完全能取代接口。但是,難道接口的存在是為了實現多重繼承?當然不是。我認為,抽象類和接口的區別在于使用動機。使用抽象類是為了代碼的復用,而使用接口的動機是為了實現多態性。所以,如果你在為某個地方該使用接口還是抽象類而猶豫不決時,那么可以想想你的動機是什么。

看到有朋友對IPerson這個接口的質疑,我個人的理解是,IPerson這個接口該不該定義,關鍵看具體應用中是怎么個情況。如果我們的項目中有Women和Man,都繼承Person,而且Women和Man絕大多數方法都相同,只有一個方法DoSomethingInWC()不同(例子比較粗俗,各位見諒),那么當然定義一個AbstractPerson抽象類比較合理,因為它可以把其他所有方法都包含進去,子類只定義DoSomethingInWC(),大大減少了重復代碼量。 但是,如果我們程序中的Women和Man兩個類基本沒有共同代碼,而且有一個PersonHandle類需要實例化他們,并且不希望知道他們是男是女,而只需把他們當作人看待,并實現多態,那么定義成接口就有必要了。

總而言之,接口與抽象類的區別主要在于使用的動機,而不在于其本身。而一個東西該定義成抽象類還是接口,要根據具體環境的上下文決定。 再者,我認為接口和抽象類的另一個區別在于,抽象類和它的子類之間應該是一般和特殊的關系,而接口僅僅是它的子類應該實現的一組規則。(當然,有時也可能存在一般與特殊的關系,但我們使用接口的目的不在這里)如,交通工具定義成抽象類,汽車、飛機、輪船定義成子類,是可以接受的,因為汽車、飛機、輪船都是一種特殊的交通工具。再譬如Icomparable接口,它只是說,實現這個接口的類必須要可以進行比較,這是一條規則。如果Car這個類實現了Icomparable,只是說,我們的Car中有一個方法可以對兩個Car的實例進行比較,可能是比哪輛車更貴,也可能比哪輛車更大,這都無所謂,但我們不能說“汽車是一種特殊的可以比較”,這在文法上都不通。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品va在线播放| 国产精品久久久久aaaa九色| 81精品国产乱码久久久久久| 亚洲最大av在线| 亚洲激情视频在线播放| 久久久久免费视频| 97视频在线观看亚洲| 日韩中文字幕免费看| 91黑丝在线观看| 久久久免费观看| 精品中文字幕在线2019| 欧美激情精品久久久久久大尺度| 久久久免费高清电视剧观看| 日韩中文字幕在线播放| 精品久久国产精品| 欧美日韩国产专区| 国产成人在线亚洲欧美| 亚洲第一男人天堂| 中文字幕日韩在线视频| 欧美日韩黄色大片| 欧美日韩国产色视频| 亚洲精品视频中文字幕| 性欧美xxxx视频在线观看| 久久99久国产精品黄毛片入口| 色小说视频一区| 国产精品视频免费在线观看| 国内精品国产三级国产在线专| 久久精品在线播放| 国产欧美日韩精品在线观看| 亚洲嫩模很污视频| 久久成年人免费电影| 国产成人精品免费久久久久| 国产福利视频一区二区| 伊人伊成久久人综合网小说| 高清一区二区三区日本久| 国产+人+亚洲| 日韩在线中文字幕| 欧美一级视频一区二区| 色播久久人人爽人人爽人人片视av| 成人免费看片视频| 91天堂在线观看| www.欧美三级电影.com| 欧美日韩亚洲国产一区| 7777免费精品视频| 2019最新中文字幕| 国产精品美乳一区二区免费| 久久久久久97| 91在线网站视频| 亚洲自拍偷拍网址| 日韩av免费观影| 精品美女久久久久久免费| 欧美一级片在线播放| 欧美疯狂xxxx大交乱88av| 国产成人精品久久亚洲高清不卡| 国内精品久久久久| 日韩久久免费电影| 欧美激情性做爰免费视频| 亚洲国产欧美一区二区丝袜黑人| 欧洲日韩成人av| 亚洲第一中文字幕在线观看| 欧洲日本亚洲国产区| 成人精品久久av网站| 91美女福利视频高清| 国产精品日韩久久久久| 97人人爽人人喊人人模波多| 97成人精品视频在线观看| 亚洲欧洲成视频免费观看| 欧洲永久精品大片ww免费漫画| 91精品国产91久久久久久久久| 欧美成人精品在线播放| 91av视频在线观看| 97色在线视频| 久久久成人精品| 欧美极品少妇与黑人| 亚洲影视中文字幕| 91深夜福利视频| 色小说视频一区| 伊人久久精品视频| 日韩中文字幕在线| 亚洲视频专区在线| 亚洲电影免费观看高清完整版在线观看| 欧美午夜激情视频| 亚洲第一精品夜夜躁人人爽| 日韩乱码在线视频| 欧美丰满老妇厨房牲生活| 中文字幕综合在线| 在线精品国产欧美| 尤物yw午夜国产精品视频| 亚洲国产成人精品女人久久久| 亚洲国产欧美日韩精品| 国产免费一区二区三区在线能观看| 国产精品久久久久77777| 夜色77av精品影院| 亚洲国产美女久久久久| 97超级碰碰人国产在线观看| 2023亚洲男人天堂| 欧美一级视频一区二区| 日韩精品在线观看一区| 国内精品久久久久伊人av| 国产97色在线| 91成人性视频| 欧美专区福利在线| 日韩成人激情视频| 欧美巨大黑人极品精男| 欧美日韩美女在线| 992tv在线成人免费观看| 亚洲精品免费一区二区三区| 成人免费看吃奶视频网站| 亚洲人成网站999久久久综合| 日韩一区在线视频| 2020久久国产精品| 精品国产精品三级精品av网址| 波霸ol色综合久久| 亚洲欧美在线一区二区| 欧美精品电影在线| 亚洲电影免费观看高清完整版在线观看| 夜夜躁日日躁狠狠久久88av| 国产精品亚洲视频在线观看| 色悠悠久久88| 国产精品一区二区久久| 久久久久国产精品免费网站| 亚洲人成在线观看网站高清| 欧美中文字幕第一页| 97在线看福利| 日产日韩在线亚洲欧美| 欧洲美女7788成人免费视频| 成人在线视频福利| 91亚洲精品久久久久久久久久久久| 欧美电影免费观看电视剧大全| 91久久久久久久久久久久久| 精品夜色国产国偷在线| 中文字幕一区二区三区电影| 亚洲字幕一区二区| 91中文精品字幕在线视频| 日韩免费观看在线观看| 国产精品中文字幕在线观看| 国产在线拍偷自揄拍精品| 人妖精品videosex性欧美| 亚洲级视频在线观看免费1级| 在线播放日韩av| 中文字幕在线成人| 日本精品免费观看| 国产欧美va欧美va香蕉在线| 成人免费淫片视频软件| 日韩中文字幕在线视频播放| 国产精品成人aaaaa网站| 久久国产一区二区三区| 久久97精品久久久久久久不卡| 97碰碰碰免费色视频| 国产精品一区av| 亚洲欧美日韩精品久久奇米色影视| 成人免费xxxxx在线观看| 色妞色视频一区二区三区四区| 中文字幕亚洲欧美| 97人人爽人人喊人人模波多| 国产999精品久久久影片官网| 成人性生交大片免费观看嘿嘿视频| 亚洲国产中文字幕在线观看| 中文字幕欧美日韩精品| xxxxx成人.com| 亚洲欧美激情四射在线日| 欧美一区二区.| 欧美激情伊人电影| 亚洲午夜精品久久久久久久久久久久|