前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我眼中的UVM|类的三要素

我眼中的UVM|类的三要素

作者头像
用户10108023
发布2022-10-28 16:14:03
5220
发布2022-10-28 16:14:03
举报
文章被收录于专栏:不二鱼的芯片验证记录

嗨,屏幕前的你还好吗?我是不二鱼,一个不喜欢写技术博客的IC验证工程师,写这个系列,是需要很大的勇气的,因为,写得人很多,但写得好的不多,我也是如此。我一个菜鸡,敢写UVM(应该也不止UVM,我尽量把其他知识杂糅进去),我是疯了吗?至今能有比张强老师写得好的估计也没有,我之所以写,是为了促进自己进步,换了一个新的环境,使用UVM也是日常必备,所以,以写促学,写一写我眼中的UVM,也希望能和大家一起学习,相互成就,如有错误,欢迎私信我批评指正。

一个技术帖为什么选这么个小清新的模板,是因为,想让你看完如沐春风,没有压力感,哈哈哈。

更新频率:暂定一周一更。

01

絮絮叨叨

在上一节,我们探讨一下在UVM中,典型的验证平台,今天的分享,想和大家讨论下类的三要素。UVM是面向对象编程的,UVM最伟大的地方,也就是类。之前跳槽面试的时候,也经常会被问到类的三要素,一般的面试,回答 到封装、继承和多态,面试管就不会再问了。但也会有一些严格的面试官,会继续追问,什么是封装继承和多态。为了更好的学习UVM,我觉得很有必要搞清楚类的这三个要素。

02

类的三要素

类,关键字class,关于类,可以扯很多东西,这里就简单讲一讲。我在之前的文章里比作一个菜市场,是为了说明类可以很好的进行复用,不用自己种菜,施肥等等一列操作,“炒菜”省去了很多步骤。今天,为了更好的说明类的三要素,我想把类比作一个菜谱,一个莲花血鸭(我老家的特色菜)的菜谱。在这个菜谱里头,我们定义里食材,比如鸭肉、辣椒、大蒜、姜,配料有油、盐、味精、水。这是一个标准的菜谱,我们把这一系列的东西都写在菜谱里头,也就把这些特性,封装成一个类。这就是所谓的封装。在类里面,封装了一些要使用的变量,还有可能给这些变量赋初识值,还会定义一些函数,一些任务,等等,这个封装好的类,就叫做基类,也叫父类。

在这个菜谱里头,我们定义了的食材、配料,当我们要实际使用这个菜谱,制作一道莲花血鸭,我们就需要基于这个标准菜谱,这就是继承。同时,也可以根据自己的口味进行扩展。继承的类叫做子类,子承父业,被继承的类就是上面的父类。子类会继承父类的所有特性,不管是成员变量还是任务、函数,并且还会有自己的特性。UVM预先定义了一系列的类,在UVM的验证平台中,每一个类,都要继承自UVM中已经定义好的类。类怎么继承呢,会用到关键字extends。同时也涉及到,类的实例化,一张菜谱,是不能变成菜的,只有把这道菜真正的炒出来,才能成为一道菜,这个“炒”的过程,就是实例化的过程,如下所示:

代码语言:javascript
复制
//定义一个类BEY
class BEY;
...
endclass
//通过new创造出一个BEY的实例
BEY y
y = new();

实例化的过程是通过new来实现的,在后面,会通过工厂机制中的实例方式进行实例化,这是后话了。new的过程可以简单概括为分配内存空间的过程

类的第三个要素,多态,多态的概念比前两个要素都复杂,这里只做简单科普,如果想要深入了解,可以看C++的书籍。在我之前的面试当中,封装和继承的概念还是经常会被问到的,多态只问过一次。在c++中,多态分为静态多态动态多态,静态和动态的区分在于父类中是否使用virtual 虚函数。为了实现多态,必须具备继承关系,多态的实现依赖于继承,且子类必须重写父类的方法。先声明一个父类的实例,同时也有继承相同父类的不同子类A、B实例,通过父类的指针指向子类的对象,来决定执行哪一个子类对象。

好了,今天的分享就到这里了,希望对你的学习有一点帮助。持续更新,欢迎关注。觉得有帮助的朋友,希望能够点个赞鼓励一下!!你的每个鼓励都是我持续创作的动力!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 不二鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档