|HOME |ABOUT |ARTICLES |ACK |FEEDBACK |TOC |LINKS |BLOG |JOBS |


Tutorials



ENCAPSULATION




Encapsulation is a technique for minimizing interdependencies among modules by defining a strict external communication. This way, internal coding can be changed without affecting the communication, so long as the new implementation supports the same (or upwards compatible) external communication.

Encapsulation prevents a program from becoming so interdependent that a small change has massive ripple effects.

The implementation of an object can be changed without affecting the application that uses it for:

Improving performance, fix a bug, consolidate code or for porting.


Access Specifiers:



In SystemVerilog, unqualified class properties and methods are public, available to anyone who has access to the object¿s name.

A member identified as local is available only to methods inside the class. Further, these local members are not visible within subclasses. Of course, nonlocal methods that access local class properties or methods can be inherited and work properly as methods of the subclass.


EXAMPLE: local variblg error
class base;
local int i;
endclass

program main;
initial
begin
base b = new();
b.i = 123;
end
endprogram

RESULT:

Local member 'i' of class 'base' is not accessible from scope 'main'


The above examples gives compilation error.

EXAMPLE: local varible access using method
class base;
local int i;

task set(int j);
i = j;
$display(i);
endtask
endclass

program main;
initial
begin
base b = new();
b.set(123);
end
endprogram

RESULT

123


EXAMPLE: local varible access in subclass
class base;
local int i;
endclass

class ext extends base;
function new();
i = 10;
endfunction
endclass
RESULT

Local member 'i' of class 'base' is not accessible from scope 'ext'




A protected class property or method has all of the characteristics of a local member, except that it can be inherited; it is visible to subclasses.



EXAMPLE: protected varible
class base;
protected int i;
endclass

class ext extends base;
function new();
i = 10;
endfunction
endclass

EXAMPLE: protected varible in 2 level of inheritence
class base;
local int i;
endclass

class ext extends base;
protected int i;
endclass

class ext2 extends ext;
function new();
i =10;
endfunction
endclass



In the above example, the varible i is overloaded in subclass with different qualifier.


EXAMPLE: Error access to protected varible.
class base;
protected int i;
endclass

program main;
initial
begin
base b = new();
b.i = 123;
end
endprogram

RESULT

Protected member 'i' of class 'base' is not accessible from scope 'main'




Within a class, a local method or class property of the same class can be referenced, even if it is in a different instance of the same class.


EXAMPLE
class Packet;
local integer i;

function integer compare (Packet other);
compare = (this.i == other.i);
endfunction
endclass


A strict interpretation of encapsulation might say that other.i should not be visible inside of this packet because it is a local class property being referenced from outside its instance. Within the same class, however, these references are allowed. In this case, this.i shall be compared to other.i and the result of the logical comparison returned.


Index
Introduction
Class
Object
This
Inheritance
Encapsulation
Polymorphism
Abstract Classes
Parameterised Class
Nested Classes
Constant
Static
Casting
Copy
Scope Resolution Operator
Null
External Declaration
Classes And Structures
Typedef Class
Pure
Other Oops Features
Misc

Report a Bug or Comment on This section - Your input is what keeps Testbench.in improving with time!





<< PREVIOUS PAGE

TOP

NEXT PAGE >>

copyright © 2007-2017 :: all rights reserved www.testbench.in::Disclaimer