Thursday, May 20, 2010

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

Methods

 
Method එකක් යනු function/procedure සඳහා ලබාදී ඇති OOP term එකයි.
methods වල වැදගත්කම් කිහිපයක් බලමු.


 


►වැඩසටහනක් modules වලට කැඩීමේදී උපයෝගී ක‍රගනී.
►Code reusability සංකල්පය එනම් කේත නැවත නැවත, අදාල ස්ථානයන්හිදී භාවිතා කිරීමට යොදාගත හැක.
►Method එකක් ක්‍රියාත්මක(execute) වනුයේ එය call කල විට පමණි
(explicitly invoked).



Method Declaration 
Method එකක් සෑම විටම පැවතිය යුත්තේ class එකක් තුලයි. method එකක් declare කිරීමෙන් පසු අපට අවශ්‍ය විටක එය invoke කල හැකිය. එතෙක් එය තුල ඇති උපදෙස් ක්‍රියාත්මක නොවේ. පහත syntax එකට අනුව method එකක් declare කිරීම සිදුකෙරේ.
Syntax:
modifiers  returnType methodName (parameter-list) {
    /*
    * Method body (block)
    */
    return expression;
}
 දැන් අපි method header එක පිලිබඳව සලකමු.

■ modifiers
මෙයට method scope යයිද කියනවා. මෙමගින් method එක access කිරීම පිලිබඳ තීරණ ගනු ලබනවා.
මෙම access modifiers වනුයේ public, private, protected, default/friendly යන ඒවායි.මේවා ගැන සවිස්ත‍ර වශයෙන් අපි ඉදිරියේදී සාකච්ඡා ක‍රමු.


■ returnType
method එකෙන් එය call කල ස්ථානයට යවන(return) පණිවුඩය කුමන දත්ත ආකාරයක් ඇති එකක්ද යන්න මෙමගින් සඳහන් කෙරේ.


■ method එක invoke ක‍රනවිට method එකට ලබාදෙන දත්ත parameter-list එක තුල අන්තර්ගත වේ.


■ method body
method එකෙන් සිදුක‍රන කාර්යයට අදාල කේත මෙතුල අඩංගුවේ.


■ return expression
method එකෙන් එය call කල ස්ථානයට පණිවුඩය යැවීම මෙමගින් සිදුකෙරේ. මෙම statement එක execute වී අවසන් වූ වහාම method එකෙහි execute වීම අවසන්වේ.


Note :  සෑම method එකක්ම values return කිරීම අනිවාර්‍ය නොවේ. මෙසේ values return නොක‍රන method වලදී modifier එක ලෙස void යන්න භාවිතාවේ.


Method invoke/call කිරීම
මෙය method එක සඳහා values pass කිරීම ලෙසද හඳුනවනු ලැබේ. 
syntax:
methodName(argument-list)
argument-list එකෙහි ඇති arguments හ‍රියටම method එකේ parameter-list එකෙහි ඇති parameters වලට අනුරූප විය යුතුය.
variable pass ක‍රන්නේ නම් මෙම arguments අගයන් සහිත තාත්ත්වික විචල්‍යයන්(real variables) විය යුතුය. මේ නිසා මෙම arguments pass කිරීමට පෙර එම variables initialize ක‍ර තිබිය යුතුය.


class එක තුලදී method call කිරීම 
මෙහිදී කෙලින්ම method එකේ නම භාවිතාක‍රමින් invoke කල හැක. අවශ්‍ය නම් this keyword එකද භාවිතාකල හැකිය.
methodName()
//or
this.methodName()
class එකෙන් පිටතදී method call කිරීම
මෙහිදී method එක අයත් object එකේ නමද යොදාගැනේ
objectName.methodName()
static method එකක් නම්
static keyword එක ගැන අපි ඉදිරි පාඩමකදී විස්ත‍රාත්මකව බලමු. දැනට static method එකක් call ක‍රන ආකාරය මතක තබා ගන්න. 
className.methodName()
ex:
Math.random();
දැන් අපි බලමු methods පවතින ස‍රල ආකාර මොනවාද කියලා

►return type එකක් පවතින සහ parameters නැති
උදා:
int getName(){
 return name;
}
►return type එකක් පවතින සහ parameters ඇති
int sum(int i,int j){
 return(i+j);
}
►return type එකක් නොපවතින(void)  සහ parameters නැති
void showDetails(){
 System.out.println("Name: " + this.name);
}
►return type එකක් නොපවතින(void)  සහ parameters ඇති
void showMax(int a, int b){
 if(a>b)
  System.out.println(a);
 else
  System.out.println(b);
}
මෙම ආකාරවලට අමත‍රව methods පැවතිය හැකි තවත් ආකාර කිහිපයක් පවතිනවා. අපි ඒවා වෙනමම පාඩමකදී සාකච්ඡා ක‍රමු.

දැන් අපි method හි ක්‍රියාකාරීත්වය තවත් හොඳින් අවබෝධ ක‍රගැනීම සඳහා ජාවා වැඩසටහනක් ලියමු.
මේ සඳහා කලින් පාඩමේදී ගත් උදාහ‍රණයම methods යොදා දීර්ඝ ක‍රමු.
Circle.java
class Circle {
 int x,y,radius;
 //Constructor 1
 public Circle(int x,int y,int r){
  this.x = x;
  this.y = y;
  radius= r;
 }
 //Constructor 2
 public Circle(int x,int y){
  this.x = x;
  this.y = y;
  radius=1;
 }

 //Method 1
 public float getArea(){
  return (3.14f*radius*radius);
 }
 //method 2
 public void setRadius(int r){
  radius=r;
 }
 //method 3
 public void showDetails(){
  System.out.println("Position x=" +x+" y="+y  );
  System.out.println("Radious : " + radius );
  System.out.println("Area    : " + getArea() );
 } 
}
දැන් බලමු එම circle class එකෙන් සාදන object වලට අයත් methods භාවිතා ක‍රන ආකාරය.
මේ සඳහා ලියන ලද සරල java වැඩසටහනක් පහත දැක්වේ.
CircleDemo.java
public class CircleDemo {
 public static void main(String srgs[]){
  /*create a circle object 
   *x=12 , y=34 , radius=4
   */
  Circle c1=new Circle(12,34,4);
  float c1_area=c1.getArea();
  System.out.println("Area of c1 : " + c1_area);
  
  //change the radius of c1
  c1.setRadius(6);
  //invoke the showDetails method of c1
  c1.showDetails();

 } 
}
Output :
මෙම පාඩමෙන් ලබාගත් දැණුම උපයෝගී ක‍රගනිමින් ඉහත වැඩසටහන ක්‍රියාත්මක වන ආකාරය දැන් ඔබට තේරුම් ගත හැකිය. ගැටලු වෙතොත් comment එකක් ලෙස හෝ ඉදිරිපත් ක‍රන්න.
අපි මීලඟ පාඩමෙන් access modifiers ගැන සාකච්ඡා ක‍රමු.

4 comments:

  1. meka niyama site1k.Thank u very much

    C/C++/C# wage anek languages walatath liyanna

    Best of LUCK!!

    ReplyDelete
  2. float value 1ta passe f letter1 ai?

    ex:3.14f

    ReplyDelete
  3. ජාවා Strong typed language එකක් නිසා සියලුම value/Object සඳහා type පවත්වාගැනීම අනිවාර්ය වේ.
    යම් සංඛ්‍යාවක් දැක්වීමේදී 3.147 යනුවෙන් දැක්වීමේදී අදහස් වනනේ එය double value එකක් බවයි(double type එකෙහි scope එක float ට වඩා විශාලය) type එක විශේෂයෙන් දැක්වීමට අවශ්‍යනම් එය සඳහන් කලයුතුය.
    2.147f යනාදී වශයෙන්.

    ReplyDelete