面向介面編程思想
① 為什麼是List list = new ArrayList,而不直接用ArrayList
面向介面編程思想。
首先,面向介面編程和面向對象編程並不是平級的,它並不是比面向對象編程更先進的一種獨立的編程思想,而是附屬於面向對象思想體系,屬於其一部分。或者說,它是面向對象編程體系中的思想精髓之一。
//1.這樣你就只能調用List介面裡面定義好的方法,而不能使用你自己在ArrayList擴展的方法。
Listlist=newArrayList();
//2.這樣你可以使用自己在ArrayList類上擴展的方法
ArrayListlist=newArrayList();
//介面就是定義了一些行為,它要求你應該做什麼。
//假如你採用了面向介面編程方式,也就是第一種方式:Listlist=newArrayList();
//就能通過介面很大限度上規范開發人員的實現規則,因為你現在只能調用介面的方法。
② 面向介面編程到底有什麼好處
1.最簡單的方法:
publicstaticStringreverse1(Stringstr)
{
returnnewStringBuffer(str).reverse().toString();
}
2.最常用的方法:
publicstaticStringreverse3(Strings)
{
char[]array=s.toCharArray();
Stringreverse="";//注意這是空,不是null
for(inti=array.length-1;i>=0;i--)
reverse+=array[i];
returnreverse;
}
3.常用方法的變形:
publicstaticStringreverse2(Strings)
{
intlength=s.length();
Stringreverse="";//注意這是空,不是null
for(inti=0;i<length;i++)
reverse=s.charAt(i)+reverse;//在前面連接,而非常見的後面
returnreverse;
}
4.c語言中常用的方法:
publicstaticStringreverse5(Stringorig)
{
char[]s=orig.toCharArray();
intn=s.length-1;
inthalfLength=n/2;
for(inti=0;i<=halfLength;i++){
chartemp=s[i];
s[i]=s[n-i];
s[n-i]=temp;
}
returnnewString(s);//知道char數組和String相互轉化
}
③ 為什麼要面向介面編程
在一個面向對象的系統中,系統的各種功能是由許許多多的不同對象協作完成的。在這種情況下,各個對象內部是如何實現自己的對系統設計人員來講就不那麼重要了;而各個對象之間的協作關系則成為系統設計的關鍵。小到不同類之間的通信,大到各模塊之間的交互,在系統設計之初都是要著重考慮的,這也是系統設計的主要工作內容。面向介面編程就是指按照這種思想來編程。 寫小的應用程序看不到介面的優勢,寫大點的程序馬上就顯示出介面的優勢,越大越明顯.所以還是從現在開始養成面向介面編程的習慣.寫多了程序就會覺得優勢顯而易見.
據不同含量按說明書使用。初次噴霧在團棵期進行,
④ 什麼是面向介面編程
在一個面向對象的系統中,系統的各種功能是由許許多多的不同對象協作完成的。在這種情況下,各個對象內部是如何實現自己的對系統設計人員來講就不那麼重要了;而各個對象之間的協作關系則成為系統設計的關鍵。小到不同類之間的通信,大到各模塊之間的交互,在系統設計之初都是要著重考慮的,這也是系統設計的主要工作內容。面向介面編程我想就是指按照這種思想來編程吧!實際上,在日常工作中,你已經按照介面編程了,只不過如果你沒有這方面的意識,那麼你只是在被動的實現這一思想;表現在頻繁的抱怨別人改的代碼影響了你(介面沒有設計到),表現在某個模塊的改動引起其他模塊的大規模調整(模塊介面沒有很好的設計)等等。 Booch先生那天談到Interaction Designer,它就是指做這類設計的人,只不過層次更高一些。我想目前我們的軟體設計隊伍中,這類人是最缺乏的人才之一。 1.關於介面的理解。 介面從更深層次的理解,應是定義(規范,約束)與實現(名實分離的原則)的分離。 我們在一般實現一個系統的時候,通常是將定義與實現合為一體,不加分離的,我認為最為理解的系統設計規范應是所有的定義與實現分離,盡管這可能對系統中的某些情況有點繁煩。 介面的本身反映了系統設計人員對系統的抽象理解。 介面應有兩類:第一類是對一個體的抽象,它可對應為一個抽象體(abstract class); 第二類是對一個體某一方面的抽象,即形成一個抽象面(interface); 一個體有可能有多個抽象面。 抽象體與抽象面是有區別的。 2.設計介面的另一個不可忽視的因素是介面所處的環境(context,environment),系統論的觀點:環境是系統要素所處的空間與外部影響因素的總和。任何介面都是在一定的環境中產生的。因此環境的定義及環境的變化對介面的影響是不容忽視的,脫離原先的環境,所有的介面將失去原有的意義。 3.按照組件的開發模型(3C),它們三者相輔相成,各司一面,渾然一體,缺一不可。 面向對象是指,我們考慮問題時,以對象為單位,考慮它的屬性及方法 面向過程是指,我們考慮問題時,以一個具體的流程(事務過程)為單位,考慮它的實現 介面設計與非介面設計是針對復用技術而言的,與面向對象(過程)不是一個問題 我認為:UML裡面所說的interface是協議的另一種說法。並不是指com的interface,CORBA的interface,
⑤ 關於java面向對象編程和面向介面編程區別
Struggle說得對。根本不是一個層次的東西。「面向對象思想」和「面向過程思想」相對,而「針對介面(抽象)編程」和「針對實現編程相對」。首先糾正樓主一個認識誤區,任何編程思想都是在試圖建立現實世界和計算機世界的「映射」。無論是面向過程還是面向對象或者是其它的什麼思想,根本目的都是在計算機中建立現實世界的模型,通過模型的「沙盤推演」,達到解決現實問題的目的。宏觀上說,無論是面向對象還是面向過程,都是一種世界觀,是一種對世界的認知和劃分。只不過面向過程的思想把世界劃分為數據結構和函數,而面向對象的思想把世界劃分為對象和方法。相對於面向過程的思想而言,面向對象思想和現實世界的「映射」更容易建立,所以現在面向過程的思想已經逐漸被面向對象的思想所取代(但是這絕不是說面向對象思想可以完全取代面向過程的思想)。c語言是面向過程思想的典範,而面向對象的思想的代表編程語言有Java和C++等(切忌語言和語法規則服務於編程思想)。任何的編程語言只是編程思想得以實現的載體。
面向介面編程本身是面向對象編程思想所提倡的一種編程規范。因為它能夠最大限度的解耦,所謂解耦既是解耦合的意思,它和耦合相對。耦合就是聯系,耦合越強,聯系越緊密。在程序中緊密的聯系並不是一件好的事情,因為兩種事物之間聯系越緊密,你更換其中之一的難度就越大,擴展功能和debug的難度也就越大。舉個硬體例子,道理和軟體相同
軟盤你知道吧,骨灰級的存儲工具,最初是3.5英寸的,後來變成了2.5英寸,無論哪一種,都採用軟碟機中的磁頭讀取軟盤上的數據,而且存儲能力都小得可憐,現在你已經很難再見到它們了。後來出現了光碟,工作原理和軟盤相似,但是傳輸速度和存儲容量都大大超過軟盤。遺憾的是軟碟機是無法讀取光碟的,硬體製造商不得不提供光碟機來替代軟碟機。今天既是一個不懂電腦的人,也不會利用軟碟機讀取光碟?為什麼呢?起碼軟盤和光碟的直徑就不一樣,塞不進去,然而你不這么做根本原因不是因為它太過匪夷所思,而是軟碟機和軟盤的緊密「耦合」使得軟碟機只能用來讀取軟盤。但是USB介面則不同,Intel睿智的設計者們提出了這種傳輸介面,它幾乎能夠接駁幾乎所有你想得到的輸入輸出設備,現在無論你接駁的是外置的USB光碟機,還是USB軟碟機,甚至是最新的比USB產生還要晚的面部識別系統他都恩那個夠正常工作,硬體製造商們不需要再去費腦筋提出更新的「X驅」了。什麼原因呢?因為USB介面是針對抽象「介面」設計的松耦合設備,USB介面的提供端並不知道也不需要知道介面的另一端是滑鼠、鍵盤、攝像頭還是其它的什麼設備,它對任何傳輸進來的數據都採用相同的處理規則,管你是什麼,你符合USB的傳輸方式我就支持你。這樣你可以任意更換USB的另一端設備,而且你驚奇的發現他們都能夠正常工作!軟體編程也是一樣,Java類庫中這樣的例子太多。比如Arrays.sort()方法,該方法是一個排序方法,需要利用Compareble介面的compareTo()方法,但是compareTo()方法沒有任何實現,它需要你自己去編寫,這是合理的因為計算機並不知道如何比較你定義的數據(是字典排序字元,還是大小排序阿拉伯數字或者其它的什麼方式)。那就只好交給你自己來編寫,sort方法是一個針對抽象介面Compareble編程的方法。,該方法只是專注於採用哪種排序方式,是冒泡排序還是快速排序,而不考慮具體兩個對象的比較方式。具體的你最好看看api。總結一下針對介面編程給編寫程序最大限度的解耦合,提供了最大的擴展性。它使得整個程序,不會因為局部的更改(無論是因為修正錯誤還是提供功能的擴展),而「牽一發而動全身」,造成整個軟體必須重新編寫。
⑥ 面向切面編程和面向介面編程的區別
談談自己的理解吧:
面向切面編程:
手段:分離業務的主邏輯和次邏輯的一種思想。
目的:解決的是邏輯分離問題(主邏輯和次邏輯分開,其實主要是分離業務邏輯和非業務邏輯分開)。
案例:我們開發項目的時候基本都要去連接資料庫操作數據等,但是都會涉及到事務的提交,這時我們就用到了面向切面編程,我們在業務層只寫自己的業務邏輯,提交事務這一塊統一的動作我們就濃縮到了一塊兒統一處理,形象一點比喻就是我們做什麼事之前都以一個准備動作或結束動作的時候就把它統一起來,只關注我們要完成的事,這些准備動作統一完成!
類似的面向切面編程案例還有:系統日誌的記錄、請求的攔截等
面向介面編程:
手段:通過介面規約對象的屬性和方法,是面向對象一部分。
目的:統一標准問題,讓大家不至於各行其事而對代碼的可讀性造成影響(公用部分行為)。
案例:其實這個比較好解釋,就是有一件事,需要大家去完成,但是給你規定了完成的方式,你只能怎麼去做,這時我們當中任何一個人都能去完成這件事,只不過因人而異會有效率和風格的差異,但是都是按照事先的規定來的!比如:讓你去給資料庫添加一行數據返回受影響的行數,這里大家都去實現介面寫SQL,中間可能會有差異,但是最後都得返回一個int類型的受影響行數回來
大體意思就是說:介面給我們規定了完成一個任務的標准,但是具體過程不限制,任何人都能通過遵循的規定去完成這件事!這樣擴展性就很強!
個人水平有限,如果不滿意請參考:網頁鏈接
⑦ java面向介面編程思想
A s=new B();
一個對象實例只能賦值給與它類型相同的引用、或者父類(包括介面)的引用。
B是A的實現類所以B的實例可以賦值給A的引用。
實例:確實的對象;引用:指向某一對象的名字。
這個耦合度是指:一個類(或者對象)對另一個類(或者對象)的依賴。
如果用類的繼承,要求所有的具有某一個方法的一類對象都必須是指定類的子類對象,總是存在依賴,應用靈活度非常差!
⑧ 什麼是面向介面編程
什麼是介面?
-- 在表面上是由幾個沒有主體代碼的方法定義組成的集合體,有唯一的名稱,可以被類或其他介面所實現(或者也可以說繼承), 由關鍵詞 interface 修飾。
什麼是面向介面編程?
-- 在系統分析或架構設計中,每個層級的程序並不是直接提供程序服務,而是定義一組介面,通過實現介面來提供功能。面向介面編程實際是面向對象編程的一部分。
面向介面編程的優點?
1、介面的定義和實現分開(分開有什麼好處呢?)
首先,項目一般是由團隊共同開發來完成的,在其中,介面的定義一般是由架構師來設定,然後又編程人員來實現完成,架構師根據架構、設計規則來設定介面,把握項目的整體視圖和編寫規范,編程人員實現具體業務邏輯,分工明確,程序清晰。
其次,從實現上看,介面的定義時間很短,但介面的實現周期相對較長,若一個編程人員需要調用其他人員編寫的某個方法時,可以採用多態的方式獲取介面對象,來調用方法,這樣保證團隊共同完成開發。
2、介面可以有多個實現類,便於以後的業務擴展
什麼意思呢?
-- 比如實現類的業務需要擴展功能,此時可以採用重新實現介面的方式,這樣降低了程序的冗餘 和 一個類寫太多行代碼的尷尬。
另外,介面的多實現易於通過配置文件的方式配置介面的實現類(這個是指在spring中管理對象的時候)。