প্রিয় বন্ধুরা , তোমরা সবাই কেমন আছ ? অনেক দিন পর ফিরে এলাম তোমাদের মাঝে । চাকুরীর ব্যস্ততার কারনে চাইলেও পোস্ট করতে পারি না । যাক কথা বাড়িয়ে লাভ নেই । আজকে আমরা দেখবো কিভাবে জাভা কাস্টম ইভেন্ট হেন্ডেল করতে হয় । প্রথমেই বলে নেই ইভেন্ট কি ? ইভেন্ট হল এক ধরনের একশন ( ফাংশন ) যা কোন অবজেক্ট ফাংশন কল করলে বা জাভা কম্পোনেন্ট গুলোর ফাংশনালিটি বুঝায় । যেমন কোন বাটন ক্লিক করলে , ড্রপডাউন পরিবর্তন করলে ইত্যাদি ... । এখানে বাটন , ড্রপডাউন ... হলো কম্পোনেন্ট আর ক্লিক হলো ইভেন্ট ।
আজকে আমরা যে কাজ করবো এটা কোন কম্পোনেন্ট ইভেন্ট প্রোগ্রামিং নয় বরং অবজেক্ট ভিত্তিক কাস্টম ইভেন্ট প্রোগ্রামিং । তো শুরু করা যাক , প্রথমেই আমরা বুধি আমরা কি করতে চাই । মনে করি আমাদের একটি অফিস রুম আছে সেই রুমে সবাই কে কার্ড পাঞ্চ করে ঢুকতে এবং বের হতে হয় । তো কার্ড পাঞ্চ করলে কি হবে ? কার্ড পাঞ্চ করার ফলে আমরা বুঝবো অফিস রুমে কতজন উপস্থিত এবং কে কে উপস্থিত । তো ধরুন পাঞ্চ মেশিন টা অনেক গুলো ফাংশন ইনপুট নেয় এবং কিছু ফাংশন আউটপুট হিসাবে দেয় যা অন্য ডিভাইস দিয়ে কাজে লাগাতে হয় । আমাদের কাজের সুবিধার্তে মনে করি পাঞ্চ মেশিন শুধু ইনপুট নিচ্ছে কয়জন পাঞ্চ করলো রুমে , এন্ট্রি এবং এক্সিট করার ক্ষেত্রে । তারপর আউট পুট হিসাবে জানাবে কয়জন রুমে উপস্থিত আছে । তো এই পাঞ্চ মেশিন যে ফাংশন লাইব্রেরী ব্যবহার করবে সেটাই আমরা আজ বানাবো জাভা দিয়ে । প্রকৃত পক্ষে এটাই ব্যবহার করে বা করবে তা নয় এটা একটা জাস্ট উদাহরন আর কিছুই না । তো শুরু করলাম নাকি ?......
প্রথমেই রুমে কারা ঢুকছে আর বের হচ্ছে এটা যেহেতু আমরা বের করতে চাচ্ছি তো প্রথমেই আমাদের রুম নামে একটা ক্লাস বানানো দরকার , ক্লাস কি ? ক্লাস হলো অবজেক্টের ব্লু প্রিন্ট । মনে করুন গাড়ী কোম্পানী গাড়ী বানাবে তো তারা হরেক মডেলের গাড়ী বানায় কিন্তু গাড়ীর কমন জিনিস গুলো যেমন গাড়ীর বডি , চার চাকা এগুলো তো একই থাকে তাই গাড়ির যে ব্লু প্রিন্ট তা তো এক তাই এখানে গাড়ির ক্লাস একটাই হবে । যাই হোক , তো আমাদের রুমের ক্লাস টা হবে এই রকম , রুম ক্লাসে কি কি আছে ? কয়জন রুমে আছে এটা বের করতে ব্যবহার করা হয়েছে কাউন্টার , রুম ইভেন্ট ফায়ার করে কাকে নটিফাই করবে তার জনা আছে লিসেনার যোগ করার ব্যবস্থা , কেউ রুমে প্রবেশ করলো কি না , নাকি বের হলো তার জন্য দুটি ফাংশন , আর ফায়ারিং ইভেন্ট টা । ইভেন্ট যখন ফায়ার হয় লিসেনার তখন লিসেন করে 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();
}
}
এই হলো আমাদের আউটপুট । ভাল থেকো সবাই আর আমার জন্য দুয়া রেখ । আবার আসবো ইনশাল্লাহ কোন একদিন অন্য কোন আর্টিকেল নিয়ে ।
কোন মন্তব্য নেই:
একটি মন্তব্য পোস্ট করুন