日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面向对象技术第一讲 多态性

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象技术第一讲 多态性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?面向對象技術第一講? 多態性


一﹑什么是多態?為什么要支持多態?

多態是一種普遍存在的現象,如water的三種形態:冰﹑水﹑汽,又如算術運算1+1, 1+0.5, 1/2+0.5等。

多態性用一句經典的英文來解釋就是:a value can belong to multiple types.

那么在軟件設計中支持多態有什么好處呢?首先,可以使程序中的數學運算符合常規的數學運算規則,為程序提供更強的表達能力;其次使得對不同類型的數據有同樣的操作語義,可以實現程序的重用,而重用標識的資源,可以提高程序的可讀性和可理解性。

軟件系統支持多態的前提就是能夠靜態(編譯時)或者動態(運行時)地確定類型。

二﹑多態的分類有哪些?

多態分為兩種:通用的多態(universal)和特定的多態(ad hoc)。兩者的區別是前者對工作的類型不加限制,允許對不同類型的值執行相同的代碼;后者只對有限數量的類型有效,而且對不同類型的值可能要執行不同的代碼。

通用的多態又分為參數多態(parametric)和包含多態(inclusion);特定的多態分為過載多

態(overloading)和強制多態(coercion)。具體見下圖:

2.1參數多態

??? 概念:采用參數化模板,通過給出不同的類型參數,使得一個結構有多種類型。

??? 例如:Ada中的generic(類屬 )。

??? 見下例:


分析:這兩個packages的:

·應用內涵一致:提供的都是堆棧抽象操作。

·實現結構相似:采用同類數據結構,實現代碼相同。

·元素的類型不同,一些用常量表示的細節不同。

對比:函數是相似的語句序列的一種涵義明確的抽象,用函數中的語句表示相同的部分,用形參指明不同的部分,用實參體現不同的部分。但是,函數的參數只能是數據,不能是類型。

??? 類屬在一個抽象結構中允許以參量形式來表示可變的類型﹑函數﹑常數﹑數據值,在編譯時

(靜態)進行實例化,結果是一個具體的結構(類型﹑函數等)。而且類型的實例化可以靜態進

行,也可以動態進行,但結果都是一個值。

Ada中的generic結構體現的多態性例子如下:

generic結構調用的時候的情況:

可見:

·對實參所取得類型不加限制。

·對不同的實參執行的是相同的代碼。

因而構成了多態。

2.2 包含多態

概念:同樣的操作可用于一個類型及其子類型。(注意是子類型,不是子類。)包含多態

一般需要進行運行時的類型檢查。如Pascal中的子界。


幾點需要注意的地方:

1. 包含多態的操作存在著逆單調(Anti-mornotonic)。即一個類型t上的操作,當其定義域縮小成t的一個子類型時,其值域應不小于t.

2.3 過載多態

概念:同一個名(操作符﹑函數名)在不同的上下文中有不同的類型。程序設計語言中基本類型的大多數操作符都是過載多態的。如c語言中的

==? :? int * int -> int

==? :? double*double->int

==? :? char*char->int

有一些程序設計語言允許用戶自定義過載多態的操作符。如c++語言中的:

bool? operator == (Complex1 c1,? Complex c2);

bool? operator ==(Address a1,? Address a2);

過載多態的操作符或函數名,他所對應的通常是不同的實現。


2.4 強制多態

概念:編譯程序通過語義操作,把操作對象的類型強行加以變換,以符合函數或操作符的要求。程序設計語言中基本類型的大多數操作符,在發生不同類型的數據進行混合運算時,

編譯程序一般都會進行強制多態。程序員也可以顯示地進行強制多態的操作(Casting)。

例如:

要注意的是并不是任意兩個類型之間都可以進行強制多態。在不同類型之間實現強制多態,通常需要執行不同的轉換操作。強制多態的原則是:將值集較小(即占用存儲空間較小)的類型,變換成值集包含了前者(即占用存儲空間較大)的類型,反之,應當注意可能發生的對值的損傷(特別是在使用Casting時)。

有時,強制多態與過載多態是混合出現的。例如,對于表達式1+2; 1.0+2; 1+2.0; 1.0+2.0;

中出現的多態,就會有多種解釋:

·操作符+有四種過載多態;

·操作符+只有一種:double * double -> double, 要將參與運算的整數強制變換成浮點數;

·操作符+有兩種過載多態:int * int -> int 和 double * double -> double,要將混合運算中的整數強制變換成浮點數。

?
三﹑ 其他類型的多態

現在的多數文獻中都認為,在面向對象程序設計語言中還存在著兩種多態:

·在有繼承關系的類之間存在的多態(但不能完全等同于包含多態);

·通過動態綁定機制,在運行時才確定接受消息的對象類型(如c++語言中的虛擬函數)。

總結

以上是生活随笔為你收集整理的面向对象技术第一讲 多态性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。