Wednesday, March 28, 2018

অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং - ৭ঃ ইন্টারফেস

ইন্টারফেস অনেকটা অ্যাবস্ট্র্যাক্ট ক্লাসের মতই তবে এর ভেতরে কোন কনক্রেট মেথড থাকেনা। মানে হল সবগুলো মেথডই এখানে অ্যাবস্ট্র্যাক্ট। ইন্টারফেস মানেই যেহেতু অ্যাবস্ট্র্যাক্ট সেহেতু এর ভেতরে কোন মেথডকে অ্যাবস্ট্র্যাক্ট লিখে দেওয়ার দরকার পড়েনা। আমরা সেই Animal উদাহরনে ফিরে যাই-

এই উদাহরনে যদি একটু ভালোভাবে খেয়াল করি প্রতিটা Animal এর হাটার ধরন এবং কথা বলার ধরন একই রকম না। তাহলে এই দুটো মেথডের ইমপ্লিমেন্টেশন সব ক্লাসের জন্য একই হবেনা তাইনা? যেমন পৃথিবীর সব প্রাণী যদি Animal ক্লাসকে ইনহেরিট করে তাহলে এখানে অসামঞ্জস্যতা ক্রিয়েট হবে। এখানে আমরা এইটুকু নিশ্চিত যে প্রতিটি প্রাণী হাটতে এবং কথা বলতে পারে কিন্তু আমরা এটা নিশ্চিত না তাদের কার হাটার ধরন কেমন এবং কার কথা বলার ধরন কেমন। যেটুকু নিশ্চিত আমরা সেটুকুই লিখে দেই। তাহলে আমরা এই দুটো মেথডকে আন-ইমপ্লিমেন্টেড লিখে রাখবো কারন আমরা এখনো নিশ্চিত না বডিতে কি লিখতে হবে। যেহেতু সব মেথডই এখানে আন-ইমপ্লিমেন্টেড সেহেতু পুরো ক্লাসকে আমরা ইন্টারফেস হিসেবে রাখতে পারি। তাতে বার বার অ্যাবস্ট্র্যাক্ট লিখা লাগবেনা। ইন্টারফেসের ক্ষেত্রে extends এর পরিবর্তে লিখতে হয় implements তো আমরা কাজটি করেই ফেলি-

 public interface Animal {  
      public void Walk();  
      public void Speak();  
 }  
 public class Human implements Animal {  
      public void Walk()  
      {  
           System.out.println("Human walk using two legs");  
      }  
      public void Speak() {  
           System.out.println("Human can speak using- Hi, Hello");  
      }  
 }  
 public class Dog implements Animal {  
      public void Walk() {  
           System.out.println("Dog walk using two legs");  
      }  
      public void Speak() {  
           System.out.println("Dog can speak something like Woof");  
      }  
 }  
 public class StartUp {  
      public static void main(String[] args) {  
           Human human1 = new Human();  
           human1.Walk();  
           human1.Speak();  
           Dog dog1 = new Dog();  
           dog1.Walk();  
           dog1.Speak();  
      }  
 }       
 OUTPUT  
 Human walk using two legs  
 Human can speak using- Hi, Hello  
 Dog walk using two legs  
 Dog can speak something like Woof  

ইন্টারফেস কেন দরকারঃ
১। টিমওয়ার্কে সকল টিম মেম্বারদের একটা নিয়মের মধ্যে রাখাঃ মনে করো তুমি একজন প্রোজেক্ট লিডার। তুমি একটি প্রোজেক্ট করতে যাচ্ছো যেখানে অনেক গুলো ক্লাস লিখতে হবে। একেকটা ক্লাসের দায়িত্ব একেকজন মেম্বারকে দিয়ে দিয়েছো।  তুমি চাচ্ছো সবগুলো ক্লাসে এমন কিছু জিনিস থাকতেই হবে। তুমি সিমপ্লি একটা ইন্টারফেস লিখে দিলে এবং সবাইকে বলে দিবে সবাই যেন ঐ ইন্টারফেসটা Implement করে। এখন সেই ইন্টারফেসটা ইমপ্লিমেন্ট করতে গেলে তাকে অবশ্যই সেই জিনিসগুলো ইমপ্লিমেন্ট করতে হবে যা তুমি ইন্টারফেসের ভিতর লিখে দিয়েছো :D
এতে তিনটা লাভ হল- সবাই ঐ মেথডগুলো লিখতে হবে, মেথডগুলোর নাম একই ইউজ করবে। কেউ রাম, কেউ সাম কেউ যদুমদু লিখার সুযোগ পাবেনা :D

২। মাল্টিফল ইনহেরিটেন্সঃ জাভাতে মাল্টিফল ইনহেরিটেন্স সাপোর্ট করেনা। কিন্তু ইন্টারফেস ইউজ করে তুমি একাধিক interface ইমপ্লিমেন্ট করতে পারবে।

৩। মেথডের বডি নিয়ে কনফিউশনঃ তুমি জানো এই প্রোজেক্টে এই মেথডটা থাকা উচিৎ কিন্তু শিওর না কোন ক্লাসের জন্য বডি কি রকম হবে বা এক্সট্রা কি লাগতে পারে। সেক্ষেত্রে এটা আনইমপ্লিমেন্টেড রেখে দেওয়া যায় পরে যার ক্লাসের জন্য যেরকম দরকার হবে সে ওরকম বডি লিখে নিতে পারবে। 

No comments:

Post a Comment