类的概述

面向对象的编程(object oriented programing,OOP),核心思想是把数据和相关的方法(也叫子程序,即一些处理数据的task或function)封装成一个类(class)。这样,用户可以在更高的抽象层次建立测试平台。用户可以在更加抽象的层次建立测试平台和系统级模型,通过调用函数来执行—个动作而不是简单地改变信号的电平。在验证环境中,包括stimulator、monitor、checker以及其它验证组件都可以按照OOP的方式来构建。

例如一个数据包,可能被定义为一个类,类中可以包含指令、地址、队列ID、时间戳和数据等成员。packet这个类可以在其中对这些数据做初始化,设置指令,读取该类的状态以及检查队列ID。

每一个packet类例化的具体对象其数据成员都可能不相同,然而packet类作为描述这些数据的抽象类型,将其对应的数据成员和操作这些数据成员的方法都定义在其中。

OOP术语

  • 类(class) :包含成员变量和成员方法,包含变量和子程序的基本构建块。Verilog中与之对应的是模块(mod-ule)。
  • 对象(object):类在例化后的实例。在Verilog 中,你需要实例化一个模块才能使用它。
  • 句柄(handle)︰指向对象的指针。在Verilog 中,你通过实例名在模块外部引用信号和方法。一个OOP句柄就像一个对象的地址,但是它保存在一个只能指向单一数据类型的指针中。
  • 原型(prototype):程序的声明部分,包含程序名、返回类型和参数列表。程序体则包含了执行代码。

构建函数

SV并不像C++语言一样要求复杂的存储空间开辟和销毁的手段,而是采用了像Java—样空间自动开辟和回收的手段。因此SV的类在定义时,只需要定义构建函数(constructor) ,而不需要定义析构函数(destructor) 。

类在定义时,需要定义构建函数,如果未定义,则系统会自动帮助定义一个空的构建函数(没有形式参数,函数体亦为空)。对象在创建时,需要先声明再例化,同时进行亦可。

class Packet;integer comnand ;function new ();command = IDLE ;endfunction
endclass
Packet p = new ;

静态成员

类的成员(变量/方法)默认都是动态(automatic)生命周期 ,即每一个对象的变量和方法都会为其开辟新的空间。如果多个对象为了共享一个成员(变量/方法),那么可以为其添加关键字static。

多个对象因此可以共享同一个成员变量或者方法。访问该成员时,无需进行对象的例化。

class Packet ;static integer fileID = $fopen( "data" , "r" ) ;...
endclass
Packet p;
c = $fgetc( p.fileID ) ; //OR Packet: : fileID

成员方法也可以声明为静态。静态方法无法访问非静态成员(变量/方法),否则会发生编译错误。

this用法

this是用来明确索引当前所在对象的成员(变量/参数/方法)。this只可以用来在类的非静态成员、约束和覆盖组中使用。this的使用可以明确所指向变量的作用域。

class Demo ;integer x;function new (integer x);this.x = x;endfunction
endclass

赋值和拷贝

声明变量和创建对象是两个过程,也可以一步完成。

Packet p1;
p1 = new ;

如果将p1赋值给另外一个变量p2,那么依然只有一个对象,只是指向这个对象的句柄有p1和p2。

以下这种方式表示p1和p2代表两个不同的对象。在创建p2对象时,将从p1拷贝其成员变量例如integer、string和句柄等,该种拷贝方式称为浅拷贝(shallow copy) 。

Packet p1;
Packet p2;
pl = new ;
p2 = new pl ;

数据的隐藏和封装

类的成员(变量/方法)默认情况下,即是公共属性的。这表示对于类自身和外部均可以访问该成员。

对于商业开发,类的提供方会限制一些类成员的外部访问权限,继而隐藏类成员的更多细节。这种方式也使得类的外部访问接口更为精简,减轻了类的维护工作量,也使得类在修改时便于与l旧版本保持兼容。数据隐藏的方式使得类的测试和维护都变得更为简单。

如果使用local,则只有该类可以访问此成员,而子类或者外部均无法访问

如果使用protected,则表示该类和其子类均可以访问此成员,而外部无法访问

reference

  1. 西电路科验证PPT

SystemVerilog学习-06-类的封装相关推荐

  1. Python 学习笔记 类的封装 类的继承 多态继承 类方法和静态方法 单例设计模式

    一.类的封装: 1.概念: 广义的封装:函数和类的定义本身,就是封装的体现 狭义的封装:一个类的某些属性,在使用的过程 中,不希望被外界直接访问,而是把这个属性给作为私有的[只有当前类持有],然后暴露 ...

  2. PCB入门学习— CHIP类PCB封装的创建

    目录 2.12 原理图PCB封装完整性的检查 3.1 CHIP类PCB封装的创建 学习目录 2.12 原理图PCB封装完整性的检查 然后点接受变更. www.digikey.com搜索规格的网站. 3 ...

  3. SV学习笔记—类的封装和继承

    1.类的封装 面向对象(OOP)编程的核心思想就是封装,封装就是指将对象的属性和方法封装起来,类就是这个封装的载体.通过封装可以将程序实现细节隐藏起来,并通过public/protected/loca ...

  4. Java学习:类的封装、继承和多态

    [3.1]声明日期类及使用日期对象 public class MyDate{ //类声明 int year,month,day; //成员变量,表示年月日 void set(int y,int m,i ...

  5. java有理数类的封装_java实验报告有理数的类封装.doc

    java实验报告有理数的类封装 华中科技大学文华学院 <Java程序设计>实验报告 实验三:有理数的类封装 专业班级: 通信工程2008级1班 姓名: 学号: 时间: 实验三:有理数的类封 ...

  6. Java基础-学习笔记(六)——类的封装性

    1.类是模板,对象是具体的实例 2.如果成员函数中的局部变量与成员变量名一致,则该方法对这个变量名的访问是局部变量 class lesson1 {int age=9;void talk(){int a ...

  7. java虚拟机预先加载哪些类_Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  8. SystemVerilog学习笔记

    SystemVerilog学习笔记(会持续更新~) 文章目录 SystemVerilog学习笔记(会持续更新~) SV数据类型 固定数组 固定数组的声明格式 一维数组与二维数组 固定数组的一些操作 固 ...

  9. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  10. 【C++】 15_类于封装的概念

    类的组合 电脑一般而言是由 CPU, 内存,主板,键盘和硬盘等部件组合而成. 思考: 学习电脑组装需要多少时间? 学习电脑组装是否需要学习显示器,键盘,鼠标,主板,内存等部件的设计与制造? 类的封装 ...

最新文章

  1. java代码例子_Java与C++两大语言比较
  2. Linux C :C的汇编码生成
  3. 【数据结构与算法】之深入解析“奇怪的打印机”的求解思路与算法示例
  4. android代码设置全屏
  5. python编_python编
  6. 干煸线椒的做法_美食:农家蒸土鸡,剁椒梅鲚鱼干,干煸茶树菇,芹菜炒牛肉的做法...
  7. python变量类型有几种_python十种变量类型
  8. 浅谈Linux文件系统
  9. Spark源码分析之Task
  10. 女友晚安之后依然在线:python男友用20行代码写了个小工具
  11. java线程计数器_CountDownLatch----线程计数器
  12. linux 中开机启动过程简单
  13. 《那些年啊,那些事——一个程序员的奋斗史》——53
  14. [渝粤教育] 西南科技大学 语言学概论(汉语言文学) 在线考试复习资料
  15. 2018年软件评测师备考之路
  16. 【渝粤教育】广东开放大学 计量基础知识 形成性考核 (48)
  17. 云熙板式家具设计拆单
  18. 孔雀东南飞$追加x5淘宝JS
  19. 计算机网络共享名称乱码,电脑wifi名称显示乱码怎么回事
  20. Web 开发学习笔记——关于互联网和互联网应用

热门文章

  1. 【实习日志】一天小记录及项目小问题
  2. 无尘车间净化装修方案
  3. IOS 开发中相机获取图片 不同方向的相机获取不同的图片的实现 ||图片的从新绘图
  4. 对抗性神经网络百度百科,生成对抗式神经网络
  5. 插入排序(动图演示,思路详解,代码展示)
  6. 慢慢欣赏linux cpupower编译
  7. 524页《Java中高级程序员必备核心知识》总结,令人犹如醍醐灌顶
  8. 删除隐藏盘符的隐藏共享,打开隐藏盘符
  9. 12天搞定Python,基础语法(上)
  10. 杰理之音量调节【篇】