My Slider

Image Slider By Humayoun Kabir Lets Express our emotion with blog Email me at humayounk@ymail.com #htmlcaption

বৃহস্পতিবার, ২৬ ফেব্রুয়ারী, ২০১৫

জাভা কাস্টম ইভেন্ট হ্যান্ডেলিং বা ম্যানেজমেন্ট

প্রিয় বন্ধুরা , তোমরা সবাই কেমন আছ ? অনেক দিন পর ফিরে এলাম তোমাদের মাঝে । চাকুরীর ব্যস্ততার কারনে চাইলেও পোস্ট করতে পারি না । যাক কথা বাড়িয়ে লাভ নেই । আজকে আমরা দেখবো কিভাবে জাভা কাস্টম ইভেন্ট হেন্ডেল করতে হয় । প্রথমেই বলে নেই ইভেন্ট কি ? ইভেন্ট হল এক ধরনের একশন ( ফাংশন ) যা কোন অবজেক্ট ফাংশন কল করলে বা জাভা কম্পোনেন্ট গুলোর ফাংশনালিটি বুঝায় । যেমন কোন বাটন ক্লিক করলে , ড্রপডাউন পরিবর্তন করলে ইত্যাদি ... । এখানে বাটন , ড্রপডাউন ... হলো কম্পোনেন্ট আর ক্লিক হলো ইভেন্ট । আজকে আমরা যে কাজ করবো এটা কোন কম্পোনেন্ট ইভেন্ট প্রোগ্রামিং নয় বরং অবজেক্ট ভিত্তিক কাস্টম ইভেন্ট প্রোগ্রামিং । তো শুরু করা যাক , প্রথমেই আমরা বুধি আমরা কি করতে চাই । মনে করি আমাদের একটি অফিস রুম আছে সেই রুমে সবাই কে কার্ড পাঞ্চ করে ঢুকতে এবং বের হতে হয় । তো কার্ড পাঞ্চ করলে কি হবে ? কার্ড পাঞ্চ করার ফলে আমরা বুঝবো অফিস রুমে কতজন উপস্থিত এবং কে কে উপস্থিত । তো ধরুন পাঞ্চ মেশিন টা অনেক গুলো ফাংশন ইনপুট নেয় এবং কিছু ফাংশন আউটপুট হিসাবে দেয় যা অন্য ডিভাইস দিয়ে কাজে লাগাতে হয় । আমাদের কাজের সুবিধার্তে মনে করি পাঞ্চ মেশিন শুধু ইনপুট নিচ্ছে কয়জন পাঞ্চ করলো রুমে , এন্ট্রি এবং এক্সিট করার ক্ষেত্রে । তারপর আউট পুট হিসাবে জানাবে কয়জন রুমে উপস্থিত আছে । তো এই পাঞ্চ মেশিন যে ফাংশন লাইব্রেরী ব্যবহার করবে সেটাই আমরা আজ বানাবো জাভা দিয়ে । প্রকৃত পক্ষে এটাই ব্যবহার করে বা করবে তা নয় এটা একটা জাস্ট উদাহরন আর কিছুই না । তো শুরু করলাম নাকি ?...... প্রথমেই রুমে কারা ঢুকছে আর বের হচ্ছে এটা যেহেতু আমরা বের করতে চাচ্ছি তো প্রথমেই আমাদের রুম নামে একটা ক্লাস বানানো দরকার , ক্লাস কি ? ক্লাস হলো অবজেক্টের ব্লু প্রিন্ট । মনে করুন গাড়ী কোম্পানী গাড়ী বানাবে তো তারা হরেক মডেলের গাড়ী বানায় কিন্তু গাড়ীর কমন জিনিস গুলো যেমন গাড়ীর বডি , চার চাকা এগুলো তো একই থাকে তাই গাড়ির যে ব্লু প্রিন্ট তা তো এক তাই এখানে গাড়ির ক্লাস একটাই হবে । যাই হোক , তো আমাদের রুমের ক্লাস টা হবে এই রকম , রুম ক্লাসে কি কি আছে ? কয়জন রুমে আছে এটা বের করতে ব্যবহার করা হয়েছে কাউন্টার , রুম ইভেন্ট ফায়ার করে কাকে নটিফাই করবে তার জনা আছে লিসেনার যোগ করার ব্যবস্থা , কেউ রুমে প্রবেশ করলো কি না , নাকি বের হলো তার জন্য দুটি ফাংশন , আর ফায়ারিং ইভেন্ট টা । ইভেন্ট যখন ফায়ার হয় লিসেনার তখন লিসেন করে existenceReceive ফাংশন কল করে । তো আমরা ঝটপট এখন লিসেনার ইন্টারফেস টা বানিয়ে ফেলি , তো আমরা ইন্টারফেস কেন ব্যবহার করছি ? কারন হলো আমাদের মাল্টিপল লিসেনার থাকতে পারে যারা লিসেনারের একই ফাংশনালিটিগুলো ইউজ করতে পারে , অতিরিক্ত তাদের নিজস্ব কিছু ফাংশনালিটি থাকতে পারে , এছাড়া ফাংশন কল করার সময় অবজেক্ট পলিমরফিজম ইউজ করার জন্য , অর্থাৎ ইন্টারফেসের মাধ্যমে ইমপ্লিমেন্টেশন ক্লাস এর ফাংশন কল হবে । যাই হোক অনেক কমপ্লেক্স লেভেলের কথা বার্তা , এখনই যে সব বুঝতে পারবেন তা না তবে ধীরে ধীরে সব বুঝতে পারবেন । এখন তাহলে দেখি ExistenceListener অর্থাৎ লিসেনার এর কোড ,

package com.test.javacode;

public interface ExistenceListener {

 void existenceReceive(ExistenceEvent existEvent);

}

লিসেনার সব সময় প্যারামিটার হিসাবে ইভেন্ট গ্রহন করবে আর ইভেন্ট ক্লাস প্রপার্টি হিসাবে থাকবে যা যা আমি লিসেনারকে গ্রহন করাতে চাই , এখানে ইভেন্ট প্যারামিটার হলো ExistenceEvent , চলুন দেখি ExistenceEvent এর কোড ,

package com.test.javacode;

import java.util.EventObject;

public class ExistenceEvent extends EventObject {
 
 private static final long serialVersionUID = 1L;
 
 private Existence existence;
 private int countPersonInRoom;

 public ExistenceEvent(Object source, Existence existence, int countPersonInRoom) {
  super(source);
  this.existence = existence;
  this.countPersonInRoom = countPersonInRoom;
  
 }
 
 
 public Existence getExistence()
 {
  return existence;
 }
 
 public int getCountPersonInRoom()
 {
  return countPersonInRoom;
 }
 
 

}



এখানে Existence ক্লাস টা হলো কন্সট্যান্স ক্লাস যা থেকে আমরা কোন ব্যক্তি রুমে ঢুকেছে না বের হয়েছে তা সিগ্নাল ভ্যালু নিব । তো দেখা যাক Existence ক্লাসের কোড ,


package com.test.javacode;

public class Existence {
 
 public static final Existence ENTRY = new Existence("Entry");
 public static final Existence OUT = new Existence("Out");
 
 String existence;

 public Existence(String existence) {
  this.existence = existence;
 }

}



এখন আমরা একটা লিসেনার ক্লাস হিসাবে এডমিন ক্লাস নিবো যেটাতে ExistenceListener ইন্টারফেসের ইমপ্লিমেন্টেশন আছে ,



package com.test.javacode;

public class Admin implements ExistenceListener {

 @SuppressWarnings("unused")
 @Override
 public void existenceReceive(ExistenceEvent existEvent) {
  
   int totalPersonInRoom = existEvent.getCountPersonInRoom();
   String wordOfPersonForEntry = totalPersonInRoom > 1 ? " Persons have" : " Person has";
   String wordOfPersonForOut = totalPersonInRoom > 1 ? " Persons are" : " Person is";
   
  if(totalPersonInRoom > -1)
  {
   if(existEvent.getExistence() == Existence.ENTRY){
    System.out.println(totalPersonInRoom + wordOfPersonForEntry + " enter the room");
   }
   else if(existEvent.getExistence() == Existence.OUT){
    System.out.println(totalPersonInRoom + wordOfPersonForOut + "  now in the room");
   }   
  }
  else
  {
   System.out.println("No one is in room now !!");
  }
  
 }

}




ফাইনালি আমাদের কোড কে মেইন ফাংশনে টেস্ট করার পালা , তো করে ফেলি কি বলো ?


package com.test.javacode;

public class ADayInProgram {

 /**
  * @param args
  */
 public static void main(String[] args) {

        //I will have a object that notify when someone enters in a room or leave from room
        
        Room room = new Room();
        
        ExistenceListener listener = new Admin();
        
        room.addExistenceListener(listener);
        
        room.enterSomeOne();
        
        room.enterSomeOne();
        
        room.enterSomeOne();
        
        room.enterSomeOne();
        
        room.leaveSomeOne();
        
        room.leaveSomeOne();
        
        
        
 }

}

এই হলো আমাদের আউটপুট । ভাল থেকো সবাই আর আমার জন্য দুয়া রেখ । আবার আসবো ইনশাল্লাহ কোন একদিন অন্য কোন আর্টিকেল নিয়ে ।