2016-10-25 3 views
1

J'essaie d'apprendre UVM, et je voulais juste savoir que ce diagramme ci-dessous représente l'héritage, par exemple, est-ce que uvm_object hérite de uvm_void? Je suis en train de lire la référence de la classe UVM 1.1. Il mentionne à la page 17 queclasses héritées dans UVM

La classe uvm_void est la classe de base pour toutes les classes UVM. C'est une classe abstraite sans membre ou fonction de données. Il permet de créer des conteneurs génériques d'objets , similaire à un pointeur vide dans le langage de programmation C. Les classes utilisateur dérivées directement de uvm_void n'héritent d'aucune fonctionnalité UVM, mais ces classes peuvent être placées dans des conteneurs uvm_void-typed avec d'autres objets UVM.

Si uvm_object est dérivé de uvm_void, alors comment at-il des fonctionnalités UVM puisque les classes dérivées de uvm_void ne devraient avoir aucune fonctionnalité UVM, mais uvm_object a des méthodes comme clone, impression, emballage, déballer, enregistrer, comparer etc

Lorsque nous écrivons la classe uvm_ * étend uvm_ * par exemple. La classe uvm_component étend uvm_object, déduit-elle l'héritage? Quelque part, il mentionne aussi le mot sous-type. Le sous-type est-il identique à la classe dérivée?

enter image description here

Répondre

2

A 'classe dérivée' est une forme de 'sous-type'. Subtypes vs Derived Types in C++

Si uvm_object est dérivé de uvm_void, alors comment at-elle une fonctionnalité UVM puisque les classes dérivées de uvm_void ne devraient avoir aucune fonctionnalité UVM, mais uvm_object a des méthodes comme clone, impression, emballage, déballer, enregistrer, comparer etc.

Cette notion est erronée, une classe dérivée peut mettre en œuvre de nouvelles fonctionnalités. La restriction, les objets ne peuvent pas être créés à partir de classes abstraites. Un descripteur de classe parent peut pointer vers n'importe quel objet tant qu'il est un sous-type. Un handle peut uniquement accéder aux méthodes et aux membres de son propre type, ainsi qu'aux méthodes virtuelles qui ont été redéfinies. Par conséquent, si un descripteur pointe vers un objet de sous-type, il ne peut pas accéder aux méthodes ou aux membres qui ont été ajoutés par ce sous-type.

uvm_void est une classe abstraite vide. Si vous regardez dans le code source UVM vous le verrez souille comme deux lignes:

virtual class uvm_void; 
endclass 

Le but de uvm_void est d'avoir un type parent commun, donc plus tard sur un conteneur générique peut être créé qui peut contenir tout UVM objet connexe. Un tel conteneur peut même contenir des classes définies par l'utilisateur qui héritent de uvm_void sans relation avec uvm_object (en pratique cela ne devrait pas être fait).

uvm_object implémente la fonctionnalité fondamentale utilisée par UVM. La grande majorité des classes UVM héritent de uvm_object ou de l'un de ses sous-types.