Friday, July 16, 2010

ජාවා interface සංකල්පය සහ එහි යෙදීම්

Interface එකක් කිව්වාම එකපාරටම මතක් වෙන්නෙ GUI එකක් නැත්නම් web form එකක් නේ. නමුත් මෙම පාඩමේදී අපි සලකා බලන්නේ වස්තු පාදක සංකල්පයක් වන interface සංකල්පය පිලිබඳවයි. මෙම සංකල්පයත් ජාවා ක්‍රමලේඛනයේ යෙදීමේදී බහුල වශයෙන් භාවිතා වන්නක්. මෙම පාඩමේදී පෙර පාඩම වන "ජාවා තුල Abstract Classes යොදාගන්නා අයුරු" යන පාඩමේදී උගත් කරුණු වැදගත් වන නිසා අවශ්‍ය නම් නැවත එය අධ්‍යයනය කරන්න.

interface එකක ඇති ප්‍රධාන ලක්ෂණ ගැන අපි සලකා බලමු.
  • interface එකක් යනු සම්පූර්ණයෙන්ම abstract class එකකි.

  • interface එකක ඇති methods සියල්ලම අර්ථදක්වා(define) ඇත්තේ method body එකකින් තොරවය(මෙයට හේතුව interface එක fully abstract වීමයි. එමනිසා මෙහි methods සියල්ලක්ම abstract වේ) 

  • interface එකක් තුල class variables (උදා : private int age;) පැවතිය නොහැක. නමුත් final attributes පැවතිය හැක(උදා: private final SIZE=512;)
මීලඟට අපි සලකා බලමු ලියන ලද interface එකක් භාවිතා කිරීමේදී සැලකිය යුතු කරුණු.
  • class එකකට අවශ්‍ය නම් interface එකකට වැඩි ප්‍රමාණයක් භාවිතා කල හැක. එනම් class එකකට අවශ්‍ය නම් interface එකකට වැඩි ප්‍රමාණයක් implement කල හැක. මේ සඳහා implement keyword එක භාවිතාවේ.

  • යම් class එකක් interface එකක් implement කර ඇත්නම් එම interface එකෙහි ඇති සියලුම methods override කිරීම අනිවාර්‍යයෙන්ම කල යුතුය.

  • class එක abstract නම් එසේ අවශ්‍ය නොවේ.

  • class වලදී මෙන් inheritance සංකල්පය interface සඳහාද භාවිතා කල හැක. එනම් interface එකකදී වෙනත් interface එකක් extend කල හැක.

  • multiple inheritance නම් සංකල්පය C++ වලදී මෙන් java තුලදී කිරීමට ඉඩදී නොමැති වුවද, මෙම interface සංකල්පය යොදාගෙන එම ක්‍රියාවලිය ඉටුකරගත හැක.

අපි දැන් බලමු interface එකක් ලිවීම සඳහා භාවිතා වන syntax එක
interface MyInterface {
 
 final int VAL=512;
 
 void myMethod1();
 int myMethod2();
 ......................
 ...................... 
}
දැන් අපි බලමු interface සංකල්පයේ යෙදීම් ආදර්ශනය කිරීමට ලියන ලද සරල වැඩසටහනක්
/**    
*class  : CarControllerDemo    
*Author : Kanishka Dilshan    
*Purpose: Describe interface concept in Java  
*Blog   : http://javaxclass.blogspot.com    
*/ 

interface CarController{
 final float MAX_SPEED=320f;
 
 void accelerate(); //accelerate the car
 void applyBreak(); //apply breaks
}

class BMW implements CarController{
 private String model;
 private float speed;
 
 public BMW(String model){
  this.model=model;
  speed=0f;
 }
 public void accelerate(){
 //implementing accelerate() method in the interface
  if(speed < MAX_SPEED)
   speed+=15;
 }
 
 public void applyBreak(){
 //implementing applyBreak() method in the interface
  if(!((speed-20) < 0))
   speed-=20;
  else
   speed=0;   
 }
 
 public void showDetails(){
  System.out.println("Car model : "+model);
  System.out.println("Speed     : "+speed);
 }
}

//another car called Nissan implements CarController interface
class Nissan implements CarController{
 private String model;
 private float speed;
 
 public Nissan(String model){
  this.model=model;
  speed=0f;
 }
 public void accelerate(){
 //implementing accelerate() method in the interface
  if(speed < MAX_SPEED)
   speed+=15;
 }
 
 public void applyBreak(){
 //implementing applyBreak() method in the interface
  if(!((speed-25) < 0))
   speed-=25;
  else
   speed=0;
 }
 
 public void showDetails(){
  System.out.println("Car model : "+model);
  System.out.println("Speed     : "+speed);
 }
}


public class CarControllerDemo{
 public static void main(String args[]){
  //creating BMW car object
  BMW car1=new BMW("BMW M6");
  Nissan car2=new Nissan("Altima Sedan");
  
  //accelerate car1 twice
  car1.accelerate();
  car1.accelerate();
  //applyBreak() for car1
  car1.applyBreak();
  car1.showDetails();
  
  //accelerate car2 4 times
  car2.accelerate();
  car2.accelerate();   
  car2.accelerate();
  car2.accelerate(); 
  //applyBreak() for car2
  car2.applyBreak();  
  car2.showDetails();
 }
}
Output:

පැහැදිලි කිරීම:
ඉහත උදාහරණයේ Line8 සිට Line13 දක්වා ඇත්තේ define කරන ලද interface එකයි. BMW සහ Nissan යන class තුලදී implement කර ඇත්තේ එම interface එක තුල ඇති accelerate() සහ applybreak() යන methods දෙකයි. මීට පෙර පාඩම් වලදී උගත් සිද්ධාන්ත භාවිතා කරමින් ඉහත කේතයේ අනෙකුත් කොටස් අවබෝධ කිරීම ඔබගේ කාර්‍යයකි. 

ජාවා ක්‍රමලේඛන භාෂාව යොදාගෙන වැඩසටහන් ලිවීමේදී පහත අවස්ථා වලදී මෙම interface භාවිතය ප්‍රායෝගිකව දැකගත හැකිය.
  • Event handling
  • Database connectivity
මෙම පාඩමත් සමග ජාවා වල මූලික OOP සංකල්ප කොටස අවසන් වේ. ඉදිරි පාඩම් වලදී ජාවහි අතුරු මුහුණත් සැකසීම පිලිබඳ අධ්‍යයනය කරමු.

4 comments:

  1. Inside an interface you cannot have any private variables whether its final or not.All the interface variables are constants.By default they are public static final. Try to use keywords like "private and protected " inside an interface .Compiler will sue you !

    Nice post ! Im sure it helps lot of people.Keep going !!

    ReplyDelete
  2. mama nam me blog eka danagaththe ape cls eke sir kenekgen.bohoma wadhagath wage.mama palaweni post eke indan kiyawagana enawa.digatama meka karagana yanna subha pathanawa

    ReplyDelete
  3. Very much useful for my studies... thanks

    ReplyDelete