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