Saturday, May 22, 2010

ජාවා වස්තු පාදක ක්‍රමලේඛනය IV (Access Modifiers)

මීට පෙර පාඩමෙන් අපි සාකච්ඡා කලේ methods ගැනයි. අපි එහිදී access modifiers සඳහා සුලු හැඳින්වීමක් දුන්නා. අපි මෙම පාඩමෙන් modifiers ගැන විස්ත‍ර සහිතව අධ්‍යයනය කරමු. Inheritance , Encapsulation වැනි OOP Concept ක්‍රියාවට නැංවීම (implement) සඳහා access modifiers ඉතා වැදගත් මෙහෙව‍රක් ඉටුක‍රනවා. අපි පහත වගුව තුලින් access modifiers ගැන අධ්‍යයනයක යෙදෙමු.
Access modifier this(class) subclass package general
public
protected
X
X
default
X
X
private
X
X
X

දැන් අපි මේ පිලිබඳව විස්ත‍රාත්මකව බලමු.
■ public
මෙලෙස declare ක‍රන ලද members සඳහා ජාවා වැඩසටහන තුල එය අයත් object එක refer ක‍රන ඕනෑම තැනකදී ලඟා විය හැක.  

■ protected
මේ අයුරින් declare ක‍රන ලද methods හා variables භාවිතා කල හැක්කේ එම class එකෙහි sub class / child class වලට පමණි. මෙය Inheritance පාඩමේදී වඩාත් පැහැදිලි වනු ඇත.

■ default
යම් member කෙනෙක් සඳහා කිසිඳු modifier එකක් යොදා නොමැති විට එයට යෙදෙනුයේ default modifier එකයි.default members භාවිතා කල හැක්කේ එම class එක තුලදී සහ එම class එක අයත් package එක තුලදී පමණි.

■ private
සියලු private members access කල හැක්කේ එය අයත් class එක තුලදීම පමණි. 

සැයු: සාමාන්‍යයෙන් Object Oriented ක්‍රමලේඛනයක් ලිවීමේදී අනුගමනය කරන දෙයක් තමයි data නොහොත් instance variables, private ලෙස declare කිරීම සහ methods , public ලෙස declare කිරීම.public data භාවිතා කිරීම හොඳ වස්තු පාදක ක්‍රමලේඛනයක ලක්ෂණයක් නොවේ!.

දැන් අපි private සහ public modifiers ගැන අධ්‍යයනය කිරීම සඳහා ස‍රල ජාවා වැඩසටහනක් ලියමු.
මේ සඳහා අපි Employee කෙනෙකු උදාහ‍රණයට ගනිමු.
Employee.java

class Employee {
 //instance variables
 public String Name; // Name is a public member
 private float HourlyRate; //private member
 private float HoursWorked; //private member
 
 //constructor
 public Employee(String name,float hr,float hw){
  Name=name;
  HourlyRate=hr;
  HoursWorked=hw;
 }
 
 //public method
 public void setHourlyRate(float hr){
  HourlyRate=hr;
 }
 //private method
 private float getTotalSal(){
  return (HourlyRate*HoursWorked);
 }
 //public method
 public void showDetails(){
  System.out.println("Employee Name : " + Name);
  System.out.println("Total Salary  : " + getTotalSal() );
  System.out.println("-----------------------------------------");
 }
}//end of the Employee class
■දැන් අපි Employee class එක යොදාගෙන පහත කේතය execute ක‍ර ලැබෙන ප්‍රතිඵලය කුමක්දැයි බලමු.
Employee emp1=new Employee("Prasanna",2300.75f,40.0f);
  emp1.showDetails();
  emp1.Name="Nimal"; //access the public variable of emp1
  emp1.showDetails();
1 සහ 2 පේලි
මෙහිදී Employee object එකක් සාදා මුලින්ම එහි public member කෙනෙකු වන showDetails() method එක invoke ක‍රයි.
3 පේලිය
මෙහිදී ඉහත සාදාගත් emp1 object එකට අයත් public member වන Name විචල්‍යය access ක‍ර එහි name එක Nimal ලෙසට වෙනස් ක‍රනු ලැබේ.
4 පේලිය
මෙහිදී නැවතත් emp1 object එකෙහි showDetails() method එක invoke ක‍රයි. දැන් console එකෙහි දිස්විය යුත්තේ Name එක Nimal ලෙසටය.


Output:

මීලඟට private modifier එක අධ්‍යයනය කිරීමට පහත කේතය execute ක‍රමු.
Employee emp1=new Employee("Prasanna",2300.75f,40.0f);
  emp1.HourlyRate=1500.00f;
මෙහිදී emp1 ගේ private modifier එකක් වන HourlyRate විචල්‍යය අපි access කිරීමට යයි. එම නිසා මෙහිදී compile කිරීමේදී පහත දෝශ පණිවුඩය පෙන්වයි.
අපට නිවැරදිව HourlyRate එක වෙනස් කිරීමට කලයුතු වන්නේ අප Employee class එකෙහි අන්තර්ගත කොට ඇති setHourlyRate() නම් public method එක භාවිතා කිරීමයි. මේ සඳහා කේතය පහත පරිදි වේ.
Employee emp1=new Employee("Prasanna",2300.75f,40.0f);
  emp1.showDetails(); // before changing the HourlyRate
  emp1.setHourlyRate(1500.00f);
  emp1.showDetails(); // after changing the HourlyRate
Output:
මේ ආකාරයෙන්ම Employee class එකට අයත් getTotalSal() නම් private method එක class එක තුලදීම භාවිතා ක‍ර තිබෙන ආකාරය line 25 දෙස බලන විට ඔබට පෙනී යනු ඇත. 
අනෙක් access modifiers පිලිබඳව අපි ඉදිරියේදී සාකච්ඡා ක‍රන OO Concept වලදී පුලුල්ව අධ්‍යයනය කිරීමට පුලුවන්.
මම මේ සඳහා යොදාගත් උදාහරණ භාගත කර ගැනීමට පහත සබැඳිය භාවිතා ක‍රන්න. 
Download The Source Code

6 comments:

  1. Is it correct ?
    or else it should be ,

    protected ● ● X X

    In Access modifier diagram ?

    :)

    ReplyDelete
  2. Diagram Above this section
    protected

    මේ අයුරින් declare ක‍රන ලද methods හා variables භාවිතා කල හැක්කේ එම class එකෙහි sub class / child class වලට පමණි. මෙය Inheritance පාඩමේදී වඩාත් පැහැදිලි වනු ඇත.

    ReplyDelete