“那怎麽理解麵向對象編程的三大特征?”李慶豐又問道。
“麵向對象編程主要有三大特征:封裝性、繼承性和多態性。”章岩答道,“封裝性比較好理解,就是把過程和數據包圍起來,對數據的訪問隻能通過已定義的界麵進行。也可以說是把能夠實現某一特定功能的一組組代碼打包,形成一個個可以完成某種特定操作的固定模塊,這個做法就是封裝。
就像現在市場上的快食麵、茶包、便捷菜等產品一樣。快食麵裏麵有麵條、調味包、湯包、油包,茶包裏麵有泡袋、茶葉、繩子,便捷菜裏麵是烹製好的各色菜肴,這些產品的生產過程就類似麵向對象編程的封裝過程。
而這些產品最大的特點就是,你需要的話拿來就能用。而無需每次都要自己從到市場購買原材料迴來進行清洗、斬切、調味、烹飪。
我們可以把一包這樣的產品看做是一個對象。我們要調用這個對象,需要選擇特定的方法。比食用如快食麵,我們是用開水泡湯吃還是浸泡之後做成撈麵或者炒麵來吃,那就隨各人喜歡了。
在享用的時候我們還可以自己加入辣、香等調味料和青菜、瓜果、鮮肉等輔料,這些可以看成是變量。
我們可以這樣來概括,麵向對象的程序設計最突出的特點是,它建立在對象和類的基礎上,把要解決的問題所對應的現實世界中的事物抽象成對象或類,並建立對象之間的關係。
每個對象或類不僅包含描述其特征的屬性或數據結構,而且還包含對這些數據結構的操作。
這些操作可能是以某種方式處理數據,或者是執行某個計算,或者是監督一個對象控製事件的發生。”
“這比較容易理解。”黃華山點點頭。
“繼承性也不複雜。”章岩繼續說,“通俗地說,就是一種產品不管由什麽材料加工而成,它除了具有自己的特點外,還會擁有從生產它所使用的各種原材料中繼承下來的特點。
比如說快食麵,除了擁有自己的特點外,必然會擁有製作快食麵所用的麵條的特點,也會擁有生產麵條所用的麵粉的特點,可以說是繼承了上輩乃至祖輩材料的主要特點,這就是繼承性。
在麵向對象編程中,衍生類和基類存在繼承關係,子類與祖先類也存在繼承關係。”
“這樣的比喻通俗易懂。”賀俊明有一種豁然開朗的感覺。
“至於多態性,就是不同類的對象對同一消息作出響應,或者說同一操作(也可以說是方法)作用於不同的對象時,可以有不同的解釋,產生不同的執行結果。”章岩繼續說,“比如,同樣是加法運算,把兩個時間加在一起和把兩個整數加在一起,計算方法和結果肯定完全不同。
又比如,同樣進行複製和粘貼操作,在字處理程序和繪圖程序中會有不同的效果。
多態性使用虛方法和抽象方法來編程,更符合麵向對象編程的思想,並且可以大幅提升代碼的可讀性和減少冗餘的代碼,能夠用更少的代碼實現相同的功能。
多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享等多種優勢,很好的解決了應用程序函數同名問題。
封裝可以隱藏實現細節,使得代碼模塊化;繼承可以擴展已存在的代碼模塊(類),它們的目的都是為了所謂的‘代碼重用’或‘代碼共用’。而多態則是為了‘接口重用’或接口共用。”
“接口重用?這裏麵的接口是什麽?”賀俊明對接口這個概念並不陌生,但在對麵向對象編程中接口認識上有些模糊,此刻趁機向章岩討教。
“接口泛指實體把自己提供給外界的一種抽象化物(可以為另一實體),用以由內部操作分離出外部溝通方法,使其能被內部修改而不影響外界其他實體與其交互的方式。”章岩解釋說,“用通俗的話來說,接口就是在不同部件、不同係統或不同模塊之間建立聯係、交換信息、相互通信的方法,一般分為硬件接口和軟件接口。
在計算機中,接口是計算機係統中兩個獨立的部件進行信息交換的共享邊界。這種交換可以發生在計算機軟、硬件,外部設備或進行操作的人之間,也可以是它們的結合。
麵向對象編程中的接口指的就是軟件接口,是指對協定進行定義的引用類型,或者說是通過對象關係可以明確對象之間的消息,通過定義每個對象所能夠接收的消息以及對象接收消息時執行的相應操作,同時還可以描述對象的私有部分即對象的內部屬性或數據結構以及操作的過程細節,以保證它們支持某些操作。
與類相似,接口可以包含方法、屬性、索引器和事件作為成員。
當然,這些隻是理論上的東西,要真正理解接口,必須通過大量的代碼編寫、接口設計、軟件調試等工作,不斷加深對接口的認知並積累編程經驗。”
“編程語言經曆了很多代,現在最流行的就是麵向對象編程語言,它到底有什麽獨特的優勢?”李慶豐接著問。
“麵向對象編程具有很多突出的優點。一是易維護。采用麵向對象思想設計的結構,各種功能都是通過模塊去實現的,可讀性高,邏輯性強。同時,由於繼承的存在,即使需要對軟件作出改變,也隻需要在局部模塊中進行修改,所以維護起來是非常方便和低成本的。
二是質量高。可以重用現有經過驗證的模塊,特別是在以前的項目中已被測試過、能夠正確運行的類使得係統能夠滿足新舊業務需求並具有較高的質量。
三是效率高。在軟件開發過程中,根據解決問題的需要對現實世界的各種事物進行抽象,產生類,接近於日常生活和自然的思考方式,可以有效地提高軟件開發的效率和質量。
四是易擴展。由於麵向對象編程具有繼承、封裝、多態的特性,功能模塊化,能夠設計出高內聚、低耦合的係統結構,使得係統更靈活、更容易擴展,而且成本較低。”
“麵向對象編程主要有三大特征:封裝性、繼承性和多態性。”章岩答道,“封裝性比較好理解,就是把過程和數據包圍起來,對數據的訪問隻能通過已定義的界麵進行。也可以說是把能夠實現某一特定功能的一組組代碼打包,形成一個個可以完成某種特定操作的固定模塊,這個做法就是封裝。
就像現在市場上的快食麵、茶包、便捷菜等產品一樣。快食麵裏麵有麵條、調味包、湯包、油包,茶包裏麵有泡袋、茶葉、繩子,便捷菜裏麵是烹製好的各色菜肴,這些產品的生產過程就類似麵向對象編程的封裝過程。
而這些產品最大的特點就是,你需要的話拿來就能用。而無需每次都要自己從到市場購買原材料迴來進行清洗、斬切、調味、烹飪。
我們可以把一包這樣的產品看做是一個對象。我們要調用這個對象,需要選擇特定的方法。比食用如快食麵,我們是用開水泡湯吃還是浸泡之後做成撈麵或者炒麵來吃,那就隨各人喜歡了。
在享用的時候我們還可以自己加入辣、香等調味料和青菜、瓜果、鮮肉等輔料,這些可以看成是變量。
我們可以這樣來概括,麵向對象的程序設計最突出的特點是,它建立在對象和類的基礎上,把要解決的問題所對應的現實世界中的事物抽象成對象或類,並建立對象之間的關係。
每個對象或類不僅包含描述其特征的屬性或數據結構,而且還包含對這些數據結構的操作。
這些操作可能是以某種方式處理數據,或者是執行某個計算,或者是監督一個對象控製事件的發生。”
“這比較容易理解。”黃華山點點頭。
“繼承性也不複雜。”章岩繼續說,“通俗地說,就是一種產品不管由什麽材料加工而成,它除了具有自己的特點外,還會擁有從生產它所使用的各種原材料中繼承下來的特點。
比如說快食麵,除了擁有自己的特點外,必然會擁有製作快食麵所用的麵條的特點,也會擁有生產麵條所用的麵粉的特點,可以說是繼承了上輩乃至祖輩材料的主要特點,這就是繼承性。
在麵向對象編程中,衍生類和基類存在繼承關係,子類與祖先類也存在繼承關係。”
“這樣的比喻通俗易懂。”賀俊明有一種豁然開朗的感覺。
“至於多態性,就是不同類的對象對同一消息作出響應,或者說同一操作(也可以說是方法)作用於不同的對象時,可以有不同的解釋,產生不同的執行結果。”章岩繼續說,“比如,同樣是加法運算,把兩個時間加在一起和把兩個整數加在一起,計算方法和結果肯定完全不同。
又比如,同樣進行複製和粘貼操作,在字處理程序和繪圖程序中會有不同的效果。
多態性使用虛方法和抽象方法來編程,更符合麵向對象編程的思想,並且可以大幅提升代碼的可讀性和減少冗餘的代碼,能夠用更少的代碼實現相同的功能。
多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享等多種優勢,很好的解決了應用程序函數同名問題。
封裝可以隱藏實現細節,使得代碼模塊化;繼承可以擴展已存在的代碼模塊(類),它們的目的都是為了所謂的‘代碼重用’或‘代碼共用’。而多態則是為了‘接口重用’或接口共用。”
“接口重用?這裏麵的接口是什麽?”賀俊明對接口這個概念並不陌生,但在對麵向對象編程中接口認識上有些模糊,此刻趁機向章岩討教。
“接口泛指實體把自己提供給外界的一種抽象化物(可以為另一實體),用以由內部操作分離出外部溝通方法,使其能被內部修改而不影響外界其他實體與其交互的方式。”章岩解釋說,“用通俗的話來說,接口就是在不同部件、不同係統或不同模塊之間建立聯係、交換信息、相互通信的方法,一般分為硬件接口和軟件接口。
在計算機中,接口是計算機係統中兩個獨立的部件進行信息交換的共享邊界。這種交換可以發生在計算機軟、硬件,外部設備或進行操作的人之間,也可以是它們的結合。
麵向對象編程中的接口指的就是軟件接口,是指對協定進行定義的引用類型,或者說是通過對象關係可以明確對象之間的消息,通過定義每個對象所能夠接收的消息以及對象接收消息時執行的相應操作,同時還可以描述對象的私有部分即對象的內部屬性或數據結構以及操作的過程細節,以保證它們支持某些操作。
與類相似,接口可以包含方法、屬性、索引器和事件作為成員。
當然,這些隻是理論上的東西,要真正理解接口,必須通過大量的代碼編寫、接口設計、軟件調試等工作,不斷加深對接口的認知並積累編程經驗。”
“編程語言經曆了很多代,現在最流行的就是麵向對象編程語言,它到底有什麽獨特的優勢?”李慶豐接著問。
“麵向對象編程具有很多突出的優點。一是易維護。采用麵向對象思想設計的結構,各種功能都是通過模塊去實現的,可讀性高,邏輯性強。同時,由於繼承的存在,即使需要對軟件作出改變,也隻需要在局部模塊中進行修改,所以維護起來是非常方便和低成本的。
二是質量高。可以重用現有經過驗證的模塊,特別是在以前的項目中已被測試過、能夠正確運行的類使得係統能夠滿足新舊業務需求並具有較高的質量。
三是效率高。在軟件開發過程中,根據解決問題的需要對現實世界的各種事物進行抽象,產生類,接近於日常生活和自然的思考方式,可以有效地提高軟件開發的效率和質量。
四是易擴展。由於麵向對象編程具有繼承、封裝、多態的特性,功能模塊化,能夠設計出高內聚、低耦合的係統結構,使得係統更靈活、更容易擴展,而且成本較低。”