Why create method is not part of uvm_object_wrapper?

uvm_object_registry and uvm_component_registry implements following methods [IEEE 1800.2-2020, section 8.2.4 and 8.2.3 respectivelly]:

  • create_object/component
  • get_type_name
  • get
  • create
  • set_type_override
  • set_inst_override
  • initialize

However, only create_* and get_type_name are part of uvm_object_wrapper, which serves as the abstract interface for factory registries [8.3.2].

My question is: what is the architectural reason for this separation?

Are the remaining methods intended to be a syntactic sugar over the global uvm_factory singleton, allowing usage such as:

base_trans::type_id::set_type_override(child_trans::get_type());

instead of directly accessing the factory:

uvm_factory::get().set_type_override_by_type(
  base_trans::get_type(),
  child_trans::get_type()
);

Or is there a deeper design reason why these methods are not part of uvm_object_wrapper despite being implemented by all registry classes?