共找到2條詞條名為OOP的結果 展開

OOP

面向對象程序設計

面向對象程序設計(Object Oriented Programming)作為一種新方法,其本質是以建立模型體現出來的抽象思維過程和面向對象的方法。模型是用來反映現實世界中事物特徵的。任何一個模型都不可能反映客觀事物的一切具體特徵,只能對事物特徵和變化規律的一種抽象,且在它所涉及的範圍內更普遍、更集中、更深刻地描述客體的特徵。通過建立模型而達到的抽象是人們對客體認識的深化。

基本介紹


面向對象程序設計(Object Oriented Programming,OOP)是一種計算機編程架構。OOP的一條基本原則是計算機程序由單個能夠起到子程序作用的單元或對象組合而成。OOP達到了軟體工程的三個主要目標:重用性、靈活性和擴展性。OOP=對象+類+繼承+多態+消息,其中核心概念是類和對象。
面向對象程序設計方法是儘可能模擬人類的思維方式,使得軟體的開發方法與過程儘可能接近人類認識世界、解決現實問題的方法和過程,也即使得描述問題的問題空間與問題的解決方案空間在結構上儘可能一致,把客觀世界中的實體抽象為問題域中的對象。
面向對象程序設計以對象為核心,該方法認為程序由一系列對象組成。類是對現實世界的抽象,包括表示靜態屬性的數據和對數據的操作,對象是類的實例化。對象間通過消息傳遞相互通信,來模擬現實世界中不同實體間的聯繫。在面向對象的程序設計中,對象是組成程序的基本模塊。

原理


面向對象技術是對計算機的結構化方法的深入、發展和補充,在保障進行良好的計算機軟體的需求設計的同時,也需要儘可能實現利用低成本來開發出高質量的應用軟體的目標。消息是傳遞一個對象與另一個對象之間的信息,實現兩者進行通信的橋樑,消息鏈負責指定功能無條件的執行,而計算機軟體的主程序則負責對消息進行篩選(哪些可以接受、可以執行,哪些則需要摒棄,不可帶入),軟體開發主要由以下幾個方面組成,分別為需求定義、制定計劃、軟體的功能設計、軟體的功能實現、驗證和確認,這五個方面是最基本的環節,缺一不可。

特徵


(1)封裝性:
封裝是指將一個計算機系統中的數據以及與這個數據相關的一切操作語言(即描述每一個對象的屬性以及其行為的程序代碼)組裝到一起,一併封裝在一個有機的實體中,把它們封裝在一個“模塊”中,也就是一個類中,為軟體結構的相關部件所具有的模塊性提供良好的基礎。在面向對象技術的相關原理以及程序語言中,封裝的最基本單位是對象,而使得軟體結構的相關部件的實現“高內聚、低耦合”的“最佳狀態”便是面向對象技術的封裝性所需要實現的最基本的目標。對於用戶來說,對象是如何對各種行為進行操作、運行、實現等細節是不需要刨根問底了解清楚的,用戶只需要通過封裝外的通道對計算機進行相關方面的操作即可。大大地簡化了操作的步驟,使用戶使用起計算機來更加高效、更加得心應手。
(2)繼承性:
繼承性是面向對象技術中的另外一個重要特點,其主要指的是兩種或者兩種以上的類之間的聯繫與區別。繼承,顧名思義,是後者延續前者的某些方面的特點,而在面向對象技術則是指一個對象針對於另一個對象的某些獨有的特點、能力進行複製或者延續。如果按照繼承源進行劃分,則可以分為單繼承(一個對象僅僅從另外一個對象中繼承其相應的特點)與多繼承(一個對象可以同時從另外兩個或者兩個以上的對象中繼承所需要的特點與能力,並且不會發生衝突等現象);如果從繼承中包含的內容進行劃分,則繼承可以分為四類,分別為取代繼承(一個對象在繼承另一個對象的能力與特點之後將父對象進行取代)、包含繼承(一個對象在將另一個對象的能力與特點進行完全的繼承之後,又繼承了其他對象所包含的相應內容,結果導致這個對象所具有的能力與特點大於等於父對象,實現了對於父對象的包含)、受限繼承、特化繼承。
(3)多態性:
從宏觀的角度來講,多態性是指在面向對象技術中,當不同的多個對象同時接收到同一個完全相同的消息之後,所表現出來的動作是各不相同的,具有多種形態;從微觀的角度來講,多態性是指在一組對象的一個類中,面向對象技術可以使用相同的調用方式來對相同的函數名進行調用,即便這若干個具有相同函數名的函數所表示的函數是不同的。

優點


(1)易學好用。
傳統的程序設計技術是面向過程的設計方法,這種方法以演演算法為核心,把數據和過程作為相互獨立的部分,數據代表問題空間中的客體,程序代碼則用於處理這些數據。把數據和代碼代為分離的實體,反映了計算機的觀點,因為在計算機的內部數據和程序是分開存放的。但是,這樣做的時候總存在使用錯誤的數據調用正確的程序模塊,或使用正確的數據調用錯誤的程序模塊的危險。使數據和操作保持一致,是程序員一個沉重負擔,在多人分工合作開發一個大型軟體系統的過程中,如果負責設計數據結構的人中途改變了某個數據的結構而又沒有及時通知所有人員,則會發生許多不該發生的錯誤。面向對象的軟體技術為開發者提供了隨著對某個應用系統的認識逐步深入和具體化的過程,隨著認識深入和具體化再逐步派生出更具體的派生類。這樣的開發過程符合人們認識客觀世界,解決複雜問題時逐步深化漸進過程。
(2)穩定性好。
傳統的軟體開發方法以演演算法為核心,開發過程基於功能分析和功能分解。用傳統方法所建立起來的軟體系統的結構緊密依賴於系統所要完成的功能,用傳統的面向過程方法來實現模塊化技術時,一個很大的障礙是無法實現同一模塊的多次同時運行,例如,假設一個完成銀行日常業務的系統,其中一個小模塊專門用來實現隊列的功能,包括一些與隊列有關的基本操作,如插入一個事物、刪除一個事物、檢測隊列是否已滿等。由於隊列是一種常用的數據結構,在系統中可能會有多處同時使用,如未划轉業務隊列,未確認業務隊列等。這些隊列雖然有相同的操作,遵循相同的規則,但卻是相互獨立的。這樣的要求用面向對象過程方法實現的模塊是無法滿足的。相反,用面向對象技術中的類來實現模塊,用類的實例化,對象塊用隊列類來實現,類中包含了隊列的各種操作。以這個隊列為模板可以產生多個隊列對象。每個對象都有相同的方法。但卻可以獨立地同時運行,應用於系統的不同場合,從而方便地解決了這個面向過程開發中頗為棘手的問題。
(3)可重用性。為了能帶來可觀的商業利益,必須在更廣泛範圍中運用重用機制,而不是僅僅在程序設計這個層次上進行重用。因此,在OOA、OOD直到OOP中都顯示錶示問題域語義,其意義是十分深遠的。隨著時間的推移,軟體開發組織既可能重用它在某個問題域內的OOA結果,也可能重用相應的OOD和OOP結果。
(4)維護性好。儘管人們反覆強調保持文檔與源程序一致的必要性,但是,在實際工作中很難做到交付兩類不同的文檔,並使它們保持彼此完全一致,特別是考慮到進度、預算、能力和人員等限制因素時,做到兩類文檔完全一致幾乎是不可能的。因此,維護人員最終面對的往往只有源程序本身。

缺點


(1)運行效率較低。
類的大量載入會犧牲系統性能,降低運行速度。雖然CPU速度在提高,內存容量在增加,但這一問題仍會隨著系統規模變大而逐漸顯示出來,變得越發嚴重。
(2)類庫龐大。
由於類庫都過於龐大,程序員對它們的掌握需要一段時間,從普及、推廣的角度來看,類庫應在保證其功能完備的基礎上進行相應的縮減。
(3)類庫可靠性。
越龐大的系統必會存在我們無法預知的問題隱患,程序員無法完全保證類庫中的每個類在各種環境中百分之百的正確,當使用的類發生了問題,就會影響後續工作,程序員也有可能推翻原來的全部工作。

名詞解釋


面向對象程序設計中的概念主要包括:對象、類、數據抽象、繼承、動態綁定、數據封裝、多態性、消息傳遞。通過這些概念面向對象的思想得到了具體的體現。
1)對象(Object) :
可以對其做事情的一些東西。一個對象有狀態、行為和標識三種屬性。
2)類(class):
一個共享相同結構和行為的對象的集合。類(Class)定義了一件事物的抽象特點。通常來說,類定義了事物的屬性和它可以做到的(它的行為)。舉例來說,“狗”這個類會包含狗的一切基礎特徵,例如它的孕育、毛皮顏色和吠叫的能力。類可以為程序提供模版和結構。一個類的方法和屬性被稱為“成員”。
3)封裝(encapsulation):
第一層意思:將數據和操作捆綁在一起,創造出一個新的類型的過程。第二層意思:將介面與實現分離的過程。
4)繼承:
類之間的關係,在這種關係中,一個類共享了一個或多個其他類定義的結構和行為。繼承描述了類之間的“是一種”關係。子類可以對基類的行為進行擴展、覆蓋、重定義。
5)組合:
既是類之間的關係也是對象之間的關係。在這種關係中一個對象或者類包含了其他的對象和類。
組合描述了“有”關係。
6)多態
類型理論中的一個概念,一個名稱可以表示很多不同類的對象,這些類和一個共同超類有關。因此,這個名稱表示的任何對象可以以不同的方式響應一些共同的操作集合。
7)動態綁定:
也稱動態類型,指的是一個對象或者表達式的類型直到運行時才確定。通常由編譯器插入特殊代碼來實現。與之對立的是靜態類型。
8)靜態綁定:
也稱靜態類型,指的是一個對象或者表達式的類型在編譯時確定。
9)消息傳遞:
指的是一個對象調用了另一個對象的方法(或者稱為成員函數)。
10)方法:
也稱為成員函數,是指對象上的操作,作為類聲明的一部分來定義。方法定義了可以對一個對象執行那些操作。