SV的物件導向程式設計2(OOP)

2021-10-08 16:26:58 字數 1485 閱讀 2445

若想建立乙個與現存的類很相似的新類,但是增加了一些新的變數和方法,那麼可以使用繼承。繼承可以從乙個現存類獲得其變數和子程式、繼承通過增加新的特性提供了可重用性,不要編寫額外**、不需要更改基類就可使對現有類增加新的功能。

基類包含一些公共的、基礎的屬性和方法。其中方法function之前要冠以virtual,這樣就可以在派生類中重新定義。除了new()函式,new()函式在物件建立時候呼叫,所以無法拓展。例如:

class transaction;

rand bit[31:0] src,dst,data[8];

bit[31:0] crc;

int var;

virtual function void calc_crc;

crc=src^dst^data.xor;

endfunction

function new(input int var);

this.var=var; //this明確地告訴sv,我正在向類一級的變數賦值。

endfunction

virtual function void display(input string prefix="");

$display("%str:src=%h,dst=%h,crc=%h",

prifix,src,dst,crc);

endfunction

endclass:transcation

定義派生類時需要用extends 指明其基類,相應的方法也要在前面加virtual。例如:

class badtr extends transaction;

rand bit bad_crc;

virtual function void calc_crc;

super.calc_crc();

if(bad_crc) crc=~crc;

endfunction

function new(input int var);

super.new(var); //呼叫父類的new(),並且必須放在派生類new的第一行。

....... //其他行為

endfunction

virtual function void display(input string prefix="");

$write("%sbadtr:bad_crc=%b,",prefix,bad_crc);

super.display();

endfunction

endclass:badtr

注意:

合成使用了有的關係,繼承使用了是的關係。火車中有座位是合成的關係,火車是車輛的乙個特例是繼承關係。

sv不支援多繼承,多繼承中乙個類可以由幾個類同時生成,所以只能合成。

物件導向程式設計(OOP)

物件導向程式設計 object oriented programming 作為一種新方法,其本質是以建立模型體現出來的抽象思維過程和物件導向的方法。模型是用來反映現實世界中事物特徵的。任何乙個模型都不可能反映客觀事物的一切具體特徵,只能對 事物特徵和變化規律的一種抽象,且在它所涉及的範圍內更普遍 更...

OOP物件導向程式設計

oop 達到了軟體工程的三個主要目標 重用性 靈活性和擴充套件性。元件 資料和功能一起在執行著的電腦程式中形成的單元,元件在 oop 電腦程式中是模組和結構化的基礎。抽象性 程式有能力忽略正在處理中資訊的某些方面,即對資訊主要方面關注的能力。封裝 也叫做資訊封裝 確保元件不會以不可預期的方式改變其它...

OOP 物件導向程式設計

作用 建立物件 初始化 基本概念 1.方法名和類名一致 2.沒有返回值宣告 3.呼叫 使用 new 關鍵字,本類中呼叫使用 this 4.預設有乙個無參構造,當宣告了乙個構造方法後,預設的不再提供 1.在乙個類中,方法名相同 2.引數列表不一樣 型別 順序 數量,跟引數名無關 3.跟返回值無關 三大...