欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

利用Java怎么實現(xiàn)面向接口編程

利用Java怎么實現(xiàn)面向接口編程?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)建站是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計公司的優(yōu)秀設(shè)計人員和策劃人員組成的一個具有豐富經(jīng)驗的團(tuán)隊,其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計師、平面廣告設(shè)計師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)站改版、網(wǎng)頁設(shè)計制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務(wù)。

1.面向接口編程和面向?qū)ο缶幊淌鞘裁搓P(guān)系

首先,面向接口編程和面向?qū)ο缶幊滩⒉皇瞧郊壍?,它并不是比面向?qū)ο缶幊谈冗M(jìn)的一種獨立的編程思想,而是附屬于面向?qū)ο笏枷塍w系,屬于其一部分?;蛘哒f,它是面向?qū)ο缶幊腆w系中的思想精髓之一。

2.接口的本質(zhì)

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

interface InterfaceName
{
void Method1();
void Method2(int para1);
void Method3(string para2,string para3);
}

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

1)接口是一組規(guī)則的集合,它規(guī)定了實現(xiàn)本接口的類或接口必須擁有的一組規(guī)則。體現(xiàn)了自然界“如果你是……則必須能……”的理念。

例如,在自然界中,人都能吃飯,即“如果你是人,則必須能吃飯”。那么模擬到計算機(jī)程序中,就應(yīng)該有一個IPerson(習(xí)慣上,接口名由“I”開頭)接口,并有一個方法叫Eat(),然后我們規(guī)定,每一個表示“人”的類,必須實現(xiàn)IPerson接口,這就模擬了自然界“如果你是人,則必須能吃飯”這條規(guī)則。

從這里,我想各位也能看到些許面向?qū)ο笏枷氲臇|西。面向?qū)ο笏枷氲暮诵闹?,就是模擬真實世界,把真實世界中的事物抽象成類,整個程序靠各個類的實例互相通信、互相協(xié)作完成系統(tǒng)功能,這非常符合真實世界的運(yùn)行狀況,也是面向?qū)ο笏枷氲木琛?/p>

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

例如,在我的眼里,我是一個人,和一頭豬有本質(zhì)區(qū)別,我可以接受我和我同學(xué)是同類這個說法,但絕不能接受我和一頭豬是同類。但是,如果在一個動物學(xué)家眼里,我和豬應(yīng)該是同類,因為我們都是動物,他可以認(rèn)為“人”和“豬”都實現(xiàn)了IAnimal這個接口,而他在研究動物行為時,不會把我和豬分開對待,而會從“動物”這個較大的粒度上研究,但他會認(rèn)為我和一棵樹有本質(zhì)區(qū)別。

現(xiàn)在換了一個遺傳學(xué)家,情況又不同了,因為生物都能遺傳,所以在他眼里,我不僅和豬沒區(qū)別,和一只蚊子、一個細(xì)菌、一顆樹、一個蘑菇乃至一個SARS病毒都沒什么區(qū)別,因為他會認(rèn)為我們都實現(xiàn)了IDescendable這個接口(注:descend vi. 遺傳),即我們都是可遺傳的東西,他不會分別研究我們,而會將所有生物作為同類進(jìn)行研究,在他眼里沒有人和病毒之分,只有可遺傳的物質(zhì)和不可遺傳的物質(zhì)。但至少,我和一塊石頭還是有區(qū)別的。

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

也許你會覺得我上面的例子像在瞎掰,但是,這正是接口得以存在的意義。面向?qū)ο笏枷牒秃诵闹唤凶龆鄳B(tài)性,什么叫多態(tài)性?說白了就是在某個粒度視圖層面上對同類事物不加區(qū)別的對待而統(tǒng)一處理。而之所以敢這樣做,就是因為有接口的存在。像那個遺傳學(xué)家,他明白所有生物都實現(xiàn)了IDescendable接口,那只要是生物,一定有Descend()這個方法,于是他就可以統(tǒng)一研究,而不至于分別研究每一種生物而最終累死。

可能這里還不能給你一個關(guān)于接口本質(zhì)和作用的直觀印象。那么在后文的例子和對幾個設(shè)計模式的解析中,你將會更直觀體驗到接口的內(nèi)涵。

3.面向接口編程綜述

通過上文,我想大家對接口和接口的思想內(nèi)涵有了一個了解,那么什么是面向接口編程呢?我個人的定義是:在系統(tǒng)分析和架構(gòu)中,分清層次和依賴關(guān)系,每個層次不是直接向其上層提供服務(wù)(即不是直接實例化在上層中),而是通過定義一組接口,僅向上層暴露其接口功能,上層對于下層僅僅是接口依賴,而不依賴具體類。

這樣做的好處是顯而易見的,首先對系統(tǒng)靈活性大有好處。當(dāng)下層需要改變時,只要接口及接口功能不變,則上層不用做任何修改。甚至可以在不改動上層代碼時將下層整個替換掉,就像我們將一個WD的60G硬盤換成一個希捷的160G的硬盤,計算機(jī)其他地方不用做任何改動,而是把原硬盤拔下來、新硬盤插上就行了,因為計算機(jī)其他部分不依賴具體硬盤,而只依賴一個IDE接口,只要硬盤實現(xiàn)了這個接口,就可以替換上去。從這里看,程序中的接口和現(xiàn)實中的接口極為相似,所以我一直認(rèn)為,接口(interface)這個詞用的真是神似!

使用接口的另一個好處就是不同部件或?qū)哟蔚拈_發(fā)人員可以并行開工,就像造硬盤的不用等造CPU的,也不用等造顯示器的,只要接口一致,設(shè)計合理,完全可以并行進(jìn)行開發(fā),從而提高效率。

本篇文章先到這里。最后我想再啰嗦一句:面向?qū)ο蟮木枋悄M現(xiàn)實,這也可以說是我這篇文章的靈魂。所以,多從現(xiàn)實中思考面向?qū)ο蟮臇|西,對提高系統(tǒng)分析設(shè)計能力大有脾益。

下篇文章,我將用一個實例來展示接口編程的基本方法。

而第三篇,我將解析經(jīng)典設(shè)計模式中的一些面向接口編程思想,并解析一下.NET分層架構(gòu)中的面向接口思想。

1.關(guān)于“面向接口編程”中的“接口”與具體面向?qū)ο笳Z言中“接口”兩個詞

看到有朋友提出“面向接口編程”中的“接口”二字應(yīng)該比單純編程語言中的interface范圍更大。我經(jīng)過思考,覺得很有道理。這里我寫的確實不太合理。我想,面向?qū)ο笳Z言中的“接口”是指具體的一種代碼結(jié)構(gòu),例如C#中用interface關(guān)鍵字定義的接口。而“面向接口編程”中的“接口”可以說是一種從軟件架構(gòu)的角度、從一個更抽象的層面上指那種用于隱藏具體底層類和實現(xiàn)多態(tài)性的結(jié)構(gòu)部件。從這個意義上說,如果定義一個抽象類,并且目的是為了實現(xiàn)多態(tài),那么我認(rèn)為把這個抽象類也稱為“接口”是合理的。但是用抽象類實現(xiàn)多態(tài)合理不合理?在下面第二條討論。

概括來說,我覺得兩個“接口”的概念既相互區(qū)別又相互聯(lián)系?!懊嫦蚪涌诰幊獭敝械慕涌谑且环N思想層面的用于實現(xiàn)多態(tài)性、提高軟件靈活性和可維護(hù)性的架構(gòu)部件,而具體語言中的“接口”是將這種思想中的部件具體實施到代碼里的手段。

2.關(guān)于抽象類與接口

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

看到有朋友對IPerson這個接口的質(zhì)疑,我個人的理解是,IPerson這個接口該不該定義,關(guān)鍵看具體應(yīng)用中是怎么個情況。如果我們的項目中有Women和Man,都繼承Person,而且Women和Man絕大多數(shù)方法都相同,只有一個方法

DoSomethingInWC()不同(例子比較粗俗,各位見諒),那么當(dāng)然定義一個AbstractPerson抽象類比較合理,因為它可以把其他所有方法都包含進(jìn)去,子類只定義DoSomethingInWC(),大大減少了重復(fù)代碼量。

但是,如果我們程序中的Women和Man兩個類基本沒有共同代碼,而且有一個PersonHandle類需要實例化他們,并且不希望知道他們是男是女,而只需把他們當(dāng)作人看待,并實現(xiàn)多態(tài),那么定義成接口就有必要了。

總而言之,接口與抽象類的區(qū)別主要在于使用的動機(jī),而不在于其本身。而一個東西該定義成抽象類還是接口,要根據(jù)具體環(huán)境的上下文決定。

再者,我認(rèn)為接口和抽象類的另一個區(qū)別在于,抽象類和它的子類之間應(yīng)該是一般和特殊的關(guān)系,而接口僅僅是它的子類應(yīng)該實現(xiàn)的一組規(guī)則。(當(dāng)然,有時也可能存在一般與特殊的關(guān)系,但我們使用接口的目的不在這里)如,交通工具定義成抽象類,汽車、飛機(jī)、輪船定義成子類,是可以接受的,因為汽車、飛機(jī)、輪船都是一種特殊的交通工具。再譬如Icomparable接口,它只是說,實現(xiàn)這個接口的類必須要可以進(jìn)行比較,這是一條規(guī)則。如果Car這個類實現(xiàn)了Icomparable,只是說,我們的Car中有一個方法可以對兩個Car的實例進(jìn)行比較,可能是比哪輛車更貴,也可能比哪輛車更大,這都無所謂,但我們不能說“汽車是一種特殊的可以比較”,這在文法上都不通。

關(guān)于利用Java怎么實現(xiàn)面向接口編程問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

分享名稱:利用Java怎么實現(xiàn)面向接口編程
分享URL:http://aaarwkj.com/article20/jjhjjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、動態(tài)網(wǎng)站、ChatGPT營銷型網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
日韩精品中文字幕有码| 日韩激情一区二区三区| 日韩日美日韩av影视| 亚洲综合国产一区二区| 日韩一级毛一片欧美一级| 亚洲av乱码一区二区三区观影| 国产一区欧美二区日韩三区| 欧美一区二区三区va| 亚洲美女高潮久久久久久久久| 狼人私人影院在线观看| 成人爱爱视频免费观看| 中日韩中文字幕一区二区| 亚洲综合一区二区在线视频| 亚洲国产综合六月深深爱| 国产中文精品字幕a区| 久久精品人妻少妇一区二| 人妻av在线中文字幕| 欧美黄色一区在线观看| 日本姜女黄视频免费看| 高清一区二区三区不卡视频| 欧美一区二区三区一级| 日产一区二区三区网站| 日韩欧美国产午夜精品| 亚洲欧美综合另类久久| 午夜福利片免费在线观看| 国产精品原创传媒在线观看| 中文字幕亚洲精品四区| 在线观看高清欧美国产视频| 日本理论午夜三级在线观看| 中文字幕日韩精品国产| 国产精品成久久久久三级| 开裆丝袜高跟啪啪高潮av| 少妇精品偷拍高潮少妇在线观看| 国产av爆操黑丝美女| 亚洲最大黄色免费在线观看| 麻豆精东传媒一区二区| 国产精品一区波多野结衣| 特黄日韩免费一区二区三区| 国产91在线视频播放| 日韩av大片一区二区三区| 亚洲小视频免费在线观看|