面向對象編程中的多態

你想知道什麼是多態嗎? 在下面的文章中,我們將為您詳細介紹什麼叫 面向對象編程中的多態.

面向對象編程中的多態性-1

面向對象編程中的多態

雖然它看起來像是一個描述有些複雜的詞,但實際上這種與計算機相關的主題與它的基本方面有關。 當你學習 面向對象編程,我們可以遇到這種描述,它的含義只是對單個屬性的多種可能狀態的描述。

對於計算,它是面向對象編程的基本屬性之一,它也是計算機病毒或蠕蟲用來修改其部分代碼使其難以檢測的技術。 這個可以 方便 當我們不想那麼具體並且需要更多功能以適應更廣泛的工作方式,減少工作並幫助我們能夠處理更動態和靈活的事情時,在編程時會發生很多事情。

在直接進入正題之前,我們將解釋一些概念並分解定義,它們將作為 張開嘴,不僅要更好地理解它,還要了解它的操作、它的重要性,以及它在計算領域的用處,幫助我們放鬆工作。 在直接跳到 OOP 中的多態之前,我們可能不會發現任何新東西,但重要的是要記住以下所有內容以便正確理解。

面向對象編程中的多態概念起源於 Simula 67,這是一種用於執行模擬的編程語言。 這是由奧斯陸挪威數據中心的 Ole Joha Dahl 和 Kristen Nygaard 創建的。

該中心致力於船舶的模擬,由於它們之間的差異導致爆炸引起了很多混亂,當這些船舶按各自的類別分組以在進行研究時產生更多控制時,這是那麼這個想法就實現了。漂浮。

這種編程風格在 80 年代幾乎在所有計算領域都占主導地位,因為它與另一種 C 編程語言 C ++ 密切相關。由於圖形用戶界面,這種方法的主導地位非常有效。

面向對象編程中的多態性有幾個特點,在當時使用的不同語言中都有應用,例如:Ada、BASIC、LISP、Pascal等,儘管它們開發了各種兼容性問題。

有關什麼是面向對象編程中的多態性的更詳細說明,我們邀請您觀看以下視頻:

多態和繼承

前綴 poly 起源於希臘語,所以它的確切描述意味著豐富、許多或多樣性,態射是一個希臘語後綴,它進入具有身體形狀、組成或結構含義的詞的形成中。 考慮到這一點,我們可以進入這個片段中我們想要解釋的內容,我們的主詞根據定義基本上是由身體結構形成的變體; 在數學的各個領域,映射被稱為保留內部結構的數學結構之間的應用。

為了完全清楚這一點,我們可以比較一下多態和繼承。 換句話說,這允許我們在分類層次結構中執行多態性。 同樣重要的是,這些都是通過繼承給出的,只要繼承,我們可以理解為對象的派生類,總是屬於同一個類; 舉一個已經解釋過的例子,我們可以說從車輛這個詞中出現了幾個類,例如汽車、摩托車和公共汽車,這樣看來,多態和繼承是兩個不可否認的聯繫概念。

類型系統在多態中的重要性

將此分類命名為類型系統,因為該詞的派生詞仍然是其中的一部分,但為什麼這在面向對象編程多態性中很重要?

閱讀本文的許多人可能熟悉使用弱類型語言編程是什麼,就像在 Javascript 和 PHP 的情況下一樣,但是重要的是我們要很好地理解它是什麼樣的。

在這種類型的語言中,當定義一個變量時,我們總是必須指明我們希望該變量包含的類型,例如:int myNumber。

這樣我們就有可能表明建立為“myNumber”的變量將始終包含一個整數; 如果不是這種情況,編譯器會向我們拋出一條錯誤消息,阻止我們編譯我們製作的程序。

事實上,對於對象,這也可能發生在我們身上,如果在 Java 中我們定義“故事片”類,知道這個詞是持續一個多小時的電影,當我們創建“故事片”類的對象時,我們必須指明在其中指明要製作的對像類型的變量。 我們可以這樣表達:

故事片 miLargo = 新故事片

我們的變量將是“myLong”並公開它,我們將引用“電影”的類或類型的對象,並且當它持續時,它應該始終具有相同類或類型的任何對象,已經說過知道這一點很重要,這樣您就不能在變量或其他類型或類的其他對像中存儲整數,這不是繼承並且沒有關係。

如果我們再次提及車輛及其類型的示例,重要的是要澄清,如果我們決定定義一個指向 «moto» 類對象的變量,當這個變量持續存在時,它必須始終指向一個相關的或繼承對像類«moto»,而不是類«car»,也不是«bus»; 然而,在我們之前提到的那些弱內臟語言中,這種不靈活是不存在的,儘管它是像 Java 這樣的重內臟語言的一個共同特徵。 這是一個更廣泛的例子:

  • 汽車 myCar = 新車(馬自達 2″): Mazda 2 將是我們對屬於該類或類型的對象的繼承,變量指向它,如果我們願意,明天它可以指向另一個對象 我的車.

MyCar = 新車(福特福克斯 2.0 ″)

我們永遠不能做的是在 Car 類的變量集中存儲其他與 Car 類型無關的東西,因為那樣我們就會有一個編譯時錯誤,萬一它發生了,它一定已經保存了 New Car Ford Focus 2.0 我們會選擇 New Moto Yamaha YBR。

應該澄清的是,在這一點上,我們還沒有討論多態,但我們正在用類型系統測試一般的編程; 關鍵是我們必須對強三重語言的限制可能給我們帶來的複雜情況敞開心扉,以便以後理解為什麼多態很重要,並且是面向對象編程中多態的關鍵部分。

在完全類型化的計算機語言中,當一個函數被表現出來時,我們必須始終保持一個重要的點,當通知它將要接收的規則類型時。 我們將無法向我們建立的函數傳遞變量或帶有整數值的文字以外的任何東西,如果我們發現傳遞具有其他類型的其他數據,編譯器將進行更改,它將不允許我們編譯程序,因為在這種情況下它無法在函數參數中找到預期的類型。

moto-car-1

對像中的多態性

最後,我們已經到了真正指定這個感興趣的話題的部分,這就是為什麼在這個系統下會製作自己的元素來體現它的類和目標,作為強類型語言的工作,變量必須始終指向一個對象我們在建立它時指出的那種。

這是必須記住的,現在,其參數已聲明為類的函數將只接受我們接收該類的對象; 一個被聲明為由某種類型的元素組成的數組將只允許我們用我們建立的那種類型的對象填充它的盒子; 我們將展示另一個例子:

車輛 [] myVehculos = 新車輛 [3]

我們給出的這個例子是一個變量,它是一個數組,在其中我們聲明盒子的內容將是 Vehicle 類的對象,在強三重語言中,它只能包含 Vehicle 類的對象,正如我們所言已經解釋過了,但是現在我們找到了多態性,通過它我們可以為類型系統提供更多的靈活性,讓我們有機會讓變量也接受“子級”或派生類的對象。

通過使類型系統更加靈活,我們不是在談論一個整體,而是它與我們在類或類型系統中的繼承分類有什麼關係。 如果我們設法使用已建立類的單元格定義數組,編譯器將接受我們插入我們已經在這些框中建立的該對象的“子項”字樣。如果我們確定一個函數接收某個類的對像作為參數,編譯器將允許我們向它發送從我們已經聲明的類派生的類的對象的調用。

更具體地說,我們的車輛數組不僅允許我們將通用車輛插入到其變量中,還允許我們將所有子類或該類的派生類的對象插入,然後我們將擁有公共汽車、汽車和摩托車的對象我們定義的類或任何孩子,這一切都歸功於多態性。

應用多態性

儘管我們對故事片做出了解釋,但我們想澄清的是,除了作為電影之外,我們還可以製作紀錄片等; 也許兩者都有不同的特徵,不同的觀眾時間,不同的價格,因此我們可以決定我們的 Feature Film 類有子類或繼承,如“電影”或“紀錄片”。

如果我們創建一個建立為 Cinema 的類和一個我們稱之為“reproduce”的方法,它將作為我們想要在電影院中再現的內容的參數,其中電影類和紀錄片類的對像都可以到達,如果我們很好地理解類型系統(甚至沒有進入多態),我們的方法將建立我們接收的參數的類型。 它看起來像這樣:

  • 播放(要播放的電影)

但是如果我們想複製一部紀錄片,我們就必須改變我們的公式。

  • 播放(要播放的紀錄片紀錄片)

真的有必要創建兩個不同的公式嗎? 兩種再現兩種事物的方法完全相同,何必呢? 我們只需要將故事片放入播放器,點擊播放(或播放)並創建一個記錄,記錄成功售出的門票數量。 雖然同時使用這兩種方法並不麻煩,但我們必須意識到,我們可能會遇到必須創建另一個公式的情況,我們可以舉一個例子,我們有電影,但這次是 3D 格式。

在這一點上,我們可以求助於多態性,在它的幫助下,我們可以創建一種再現方法,該方法將識別我們需要在未來。 語言將允許我們建立再現方法,表明我們將要接收的類的參數是電影類型的對象,但語言和編譯器將接受從電影或電影派生的任何對象紀錄片,我們會留下這樣的東西: 播放(故事片 itemToPlay)。

無論我們是想製作電影還是紀錄片來複製它們,所有這一切都可以通過一種方法來實現,即復制,由於面向對象編程中的多態性,我們使系統更加靈活,它不會有必要。 例如,如果要再現電影而不是紀錄片,我們就不必選擇 Cinema 類,但是我們要再現的是故事片對象繼承的一部分就足夠了。

如果我們回到車輛的例子,即使記住多態性的用處以及它為我們提供的可能性來減少所有計算機程序的維護,如果我們沒有這個概念的幫助,我們將不得不這樣做。

假設我們有停車類(在西班牙語中是學習停車的類),我們在其中具有停車功能。 在停車場中,除了只能停放汽車之外,我們還可以停放公共汽車和摩托車,如果沒有多態性,我們將不得不創建一個允許我們停放“汽車”類型對象的方法和另一個允許我們停放對象的方法“公共汽車”型和另一種允許我們停放“摩托車”型物體的,雖然這三種車輛外觀差異顯著,但執行這些動作的程序基本相同,只是一種佔用更多空間比另一個。

最準確的方法是有一個單一的方法來簡化事情並允許我們接收所有類型的車輛,不僅是汽車和汽車品牌,還包括車輛對象的所有被接受和珍貴的衍生品。 首先我們將重用代碼,因為正如我們已經說過的,停放這些類型的車輛是相似的,唯一的區別是每個車輛佔用的空間不同,但除此之外,如果明天還有其他類型的車輛為了在市場上銷售,我們的軟件有可能接受它,而無需修改我們已經建立的停車類。

我們可以使用一種方法來接受車輛可能具有的所有精確繼承,從而使工作更加靈活,並節省了我們為每種類型的車輛創建一個所花費的時間。 面向對象編程中的多態性為可以被單一方法接受的一系列對像打開了大門。

我們試圖以最容易理解的方式解釋多態性,並對其背後的一切進行廣泛的回顧,如果不提供背景來幫助我們理解它並理解其突出的重要性,那麼立即跳到這樣的概念是不合適的和重要性。使用我們可以給它。

有可能在單個方法中包含多個方法,而派生同意作為對象的繼承,這是非常有用的,因為它使我們無需創建幾個迫使我們非常具體的需要,而不會給我們這樣做的可能性更靈活的工作事實上,我們可以創建一種更動態的方式來處理我們編寫的程序,就像知道一個單詞的正確派生方式一樣簡單,即它所包含的一切,幫助我們做一個更有效的工作.

我們希望您喜歡這篇文章並了解什麼是面向對象編程中的多態性。 如果您想閱讀我們關於編程的另一篇文章,我們建議您訪問以下文章,它為我們提供了計算機世界中一種非常知名的編程形式: C++編程。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:Actualidad Blog
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。