萬能的OOP語言都不知道,你還想學開發?——還是早點洗洗睡吧!

萬能的OOP語言都不知道,你還想學開發?——還是早點洗洗睡吧!

OOP簡介

OOP全稱 Object Oriented Programming——面向對象的程序設計。

所謂"對象"在顯式支持面向對象的語言中,一般是指類在內存中裝載的實例,具有相關的成員變量和成員函數。面向對象的程序設計完全不同於傳統的面向過程程序設計,它大大地降低了軟件開發的難度,使編程就像搭積木一樣簡單,是當今電腦編程的一股勢不可擋的潮流。為了實現整體運算,每個對象都能夠接收信息、處理數據和向其它對象發送信息;OOP主要有以下的概念和組件:

  • 組件:數據和功能一起在運行著的計算機程序中形成的單元,組件在 OOP 計算機程序中是模塊和結構化的基礎。

  • 抽象性:程序有能力忽略正在處理中信息的某些方面,即對信息主要方面關注的能力。

  • 封裝:也叫做信息封裝:確保組件不會以不可預期的方式改變其它組件的內部狀態;只有在那些提供了內部狀態改變方法的組件中,才可以訪問其內部狀態。每類組件都提供了一個與其它組件聯繫的接口,並規定了其它組件進行調用的方法。

  • 多態性:組件的引用和類集會涉及到其它許多不同類型的組件,而且引用組件所產生的結果得依據實際調用的類型。

  • 繼承性:允許在現存的組件基礎上創建子類組件,這統一併增強了多態性和封裝性。典型地來說就是用類來對組件進行分組,而且還可以定義新類為現存的類的擴展,這樣就可以將類組織成樹形或網狀結構,這體現了動作的通用性。

萬能的OOP語言都不知道,你還想學開發?——還是早點洗洗睡吧!

OOP思想

  1. 抽象

  2. 封裝

  3. 繼承

  4. 多態

萬能的OOP語言都不知道,你還想學開發?——還是早點洗洗睡吧!

抽象與封裝

  • 對象是現實世界中的一個實體,類是對一組具有共同屬性特徵和行為特徵的對象的抽象。類與對象之間的關係就是抽象與具體的關係。對象是類的實例。

  • 封裝就是將數據的表現方式和對數據的操作細節隱藏起來,用戶可以通過接口對數據進行操作,而不必要知道數據是如何表示的,怎麼對數據操作的這些細節。封裝是面向對象的基本特徵之一。封裝的優點如下:

  1. 允許類的客戶不必關心類的工作機理就可以使用它。就象駕駛員不必瞭解發動機的工作原理就可以駕駛汽車一樣,類的客戶在使用一個類時也不必瞭解它是如何工作的,而只需瞭解它的功能即可。

  2. 所有對數據的訪問和操作都必須通過特定的方法,否則便無法使用,從而達到數據隱藏的目的。

萬能的OOP語言都不知道,你還想學開發?——還是早點洗洗睡吧!

繼承

子類自動繼承其父級類中的屬性和方法,並可以添加新的屬性和方法或者對部分屬性和方法進行重寫。繼承的優點:繼承的方法允許在不改動原程序的基礎上對其進行擴充,這樣使得原功能得以保存,而新功能得以擴展。有利於減少重複編碼,提高軟件的開發效率。

例:實現繼承了幾種方式:

原型鏈繼承

萬能的OOP語言都不知道,你還想學開發?——還是早點洗洗睡吧!

組合方式繼承

萬能的OOP語言都不知道,你還想學開發?——還是早點洗洗睡吧!

這種方式雖然實現了每個實例之間相互隔離,但是執行了兩次構造函數P1。

優化繼承

萬能的OOP語言都不知道,你還想學開發?——還是早點洗洗睡吧!

這種方式是最優化的繼承方式。不僅繼承了父類的原型鏈,同時也明確了自己的構造函數。

多態

多態性就是一個事物有多種形態,換個角度說,就是指相同的動詞作用到不同類型的對象上。


多態性有兩種表現形式:

  • 不同的對象在收到相同的消息是,產生不同的動作;

  • 同一對象收到相同的信息卻產生不同的函數調用;

實現多態,有以下二種方式:

  1. 覆蓋:是指子類重新定義父類的虛函數的做法。

  2. 重載:是指允許存在多個同名函數,而這些函數的參數表不同。

萬能的OOP語言都不知道,你還想學開發?——還是早點洗洗睡吧!

重載的實現是:編譯器根據函數不同的參數表,對同名函數的名稱做修飾,然後這些同名函數就成了不同的函數。假如有兩個同名函數:function func(p:integer):integer;和function func(p:string):integer;。那麼編譯器做過修飾後的函數名稱可能是這樣的:int_func、str_func。對於這兩個函數的調用,在編譯器間就已經確定了,是靜態的。也就是說,它們的地址在編譯期就綁定了,因此,重載和多態無關!真正和多態相關的是“覆蓋”。當子類重新定義了父類的虛函數後,父類指針根據賦給它的不同的子類指針,動態的調用屬於子類的該函數,這樣的函數調用在編譯期間是無法確定的。因此,這樣的函數地址是在運行期綁定的。

萬能的OOP語言都不知道,你還想學開發?——還是早點洗洗睡吧!


分享到:


相關文章: