Friday, March 9, 2018

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


অবজেক্ট অরিয়েন্টেড কোন প্রোগ্রামিং ল্যাঙ্গুয়েজ না। এটা শুধুমাত্র একটা কনসেপ্ট যা ভিবিন্য প্রোগ্রামিং ল্যাঙ্গুয়েজে ব্যাবহার করা হয়। সি প্লাস প্লাস, সি শার্প, জাভা, পাইথন সহ আরো অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজ আছে যা অবজেক্ট অরিয়েন্টেড ফলো করে। প্রফেসনাল লেবেলে কাজ করার পুর্বশর্তই হল অবজেক্ট অরিয়েন্টেড সম্পর্কে ধারনা রাখা। আর অবজেক্ট অরিয়েন্টেড কনসেপ্ট জানা ছাড়া ইন্ডাস্ট্রি লেভেলের কাজ করা অসম্ভব। সো, অবজেক্ট ওরিয়েন্টেডের গুরুত্ব কেমন তা বুঝাই যাচ্ছে। অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং করার আগে অবশ্যই বেসিক প্রোগ্রামিং নলেজ থাকতে হবে যেমন, সি! আর যেহেতু এটা আমরা জাভা দিয়ে করবো সেহেতু বেসিক জাভা সম্পর্কে আইডিয়া থাকা জরুরি।

অবজেক্ট,  ক্লাস এবং আমাদের চারিপাশঃ  ধরা যাক, কাউকে বলা হল যেকোন দুইটা প্রাণী নিয়ে গবেষনা করতে। তাহলে সর্বপ্রথম কি করবে? প্রথমেই তাকে দুইটা প্রাণী জোগাড় করতে হবে। ধরা যাক, প্রানীগুলো হল রাকিব এবং জন । লোকটি দেখতে  পেলো রাকিব এবং জন দুজনেরই চোখ, কান, নাক, পা এবং মুখ আছে। দুইজনেই হাটতে পারে, খেতে পারে। কিন্তু  চিন্তা করা, কথা বলতে পারা এটা শুধু রাকিবই পারে কিন্তু জন পারেনা। আবার জন ঘেউ ঘেউ করে, কিন্তু রাকিব তা পারেনা তবে সে Hi, Hello বলতে পারে। পুরো বিষয়টাকে আমরা একটা লিস্ট আকারে সাজিয়ে নিতে পারি।


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

আচ্ছা, তাহলে ক্লাস পাওয়া গেল। কিন্তু অবজেক্ট কোনটা? অবজেক্টই হল, রাকিব এবং জন! তাহলে অবজেক্ট এর সংজ্ঞা কি হতে পারে? অবজেক্ট হল এমন একটা জিনিস যা নির্দিষ্ট একটা ক্লাসের প্রতিনিধি হিসেবে কাজ করে। এখানে জন এবং রাকিব হল যথাক্রমে কুকুর এবং মানুষ শ্রেনীর প্রতিনিধি করে। মানে হল একটা ক্লাসের যে যে বিশিষ্ট থাকে তা অবজেক্টের মধ্যে খুঁজে পাওয়া যায়। যেমনটা আমি রাকিবকে পর্যবেক্ষন করলে মানুষের গুনগুলো খুঁজে পাবো।

অবজেক্ট, ক্লাস এবং প্রোগ্রামিংঃ  এখন কথা হল, অব্জেক্ট/ ক্লাস কিম্বা অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং নিয়ে এত মাতামাতি কেন! কেনই বা এটার এত গুরুত্ব? তার আগে জন এবং রাকিবের উদাহরণ টা নিয়ে আরেকটু আলোচনা করি। রাকিব এবং জনের যা আছে তা আমরা ভেরিয়েবল হিসেবে চিন্তা করি এবং তারা যা করতে পারে তাকে ফাংশন হিসেবে চিন্তা করি। আমরা জানি ফাংশনের কাজই হল কোন কিছু করা।


দেখতেই পারছো একটা ক্লাসের ভিতরে কয়েকটা ভেরিয়েবল এবং ফাংশন। এরকম হাজার হাজার ভেরিয়েবল এবং ফাংশন একটা ক্লাসের ভেতর এঁটে দেওয়া যায়। এটা অনেকটা ফাংশনের এক্সটেন্ডেড ভার্সন বলা চলে।  আবার সেই ক্লাসটাই একটা ভেরিয়েবলের বা অবজেক্ট এর ভিতর নিয়ে আসা যায় । যেমন উপরের উদাহরনে রাকিব এবং জন! উপরের কথাগুলোই এখন জাভা দিয়ে লেখার চেষ্টা করি -
 //file: Human.java  
    class Human{   
    String name, hands, Eyes,legs;   
    int age;  
    void Eat()   
    {   
       System.out.println("Eating");   
    }   
    void Walk()   
    {   
       System.out.println("Walking");   
    }   
    void Think()   
    {   
       System.out.println("Thinking");   
    }   
    void Call()   
    {   
       System.out.println("Hello...");   
    }   
  }   

  //file: Dog.java   
  class Dog{   
    String name, hands, eyes, legs;  
    int age;  
    void Eat()   
    {   
       System.out.println("Eating");   
    }   
    void Walk()   
    {   
       System.out.println("Walking");   
    }   
    void Bark()   
    {   
       System.out.println("Gheu Gheu...");   
    }   
  }   

যা বললাম হুবহু প্রোগ্রামিং তা ই করলাম। এখন মেইন ক্লাস থেকে হিউম্যান এবং ডগ এর অবজেক্ট তৈরী করবো। মনে রেখো, এক ক্লাস থেকে অন্য ক্লাসের এলিমেন্ট ব্যবহার করতে হলে অবজেক্ট তৈরী করতে হয়। সাধারনত অবজেক্ট ছাড়া এটা করা যায়না। একটা ক্লাস থেকে আনলিমিটেড অবজেক্ট তৈরী করা যায় এবং প্রতিটা অবজেক্ট স্বতন্ত্র!

  //File: MainClass.java  
    public class MainClass {   
    public static void main(String[] args) {   
       Human Rakib = new Human(); //Creating Human's object. it's Rakib   
       Rakib.name = "Rakib"  //set the name
       Rakib.age = 23;  //set age 
       Rakib.Think();    //Instruct Rakib to think   
       Dog John = new Dog();  //Creating Dogs's object. It's John    
       John.Bark();    //Instruct John to Bark   
       System.out.println(Rakib.name);  //Print the name
       System.out.println(Rakib.age);  //Print age
  }   
  }   

 Output   
 Thinking   
 Gheu Gheu...  
 Rakib  
 23   

পুরো ব্যাপারটাকে এক দৃষ্টিতে দেখার চেষ্টা করিঃ

ক্লাসঃ এক সেট নির্দিষ্ট গুন/ বৈশিষ্ট্য
অবজেক্টঃ একটি বস্তু বা যেকোন কিছু যা একটি নির্দিষ্ট ক্লাসের বৈশিষ্ট্য বহন করে। অব্জেক্ট তৈরী করার স্ট্রাকচার -
<Class Name>  <A variable/ObjectName>  = <new> <ClassName()> 

মেথডঃ কোন নির্দিষ্ট কাজ সম্পর্ন করাকেই মেথড বা ফাংশন বলে। যেমন,  খাওয়া-দাওয়া, হাটা।
ইনস্ট্যান্স বা ভেরিয়েবলঃ কোন মেথডের কাজ সম্পর্ন করতে যেসব জিনিস ব্যাবহার করা হয় তাদেরকেই ভেরিয়েবল বলে। যেমন, হাত-পা, মুখ।

এতক্ষনে হয়তো বুঝে যাওয়ার কথা অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং কি ! সোজা কথায় যে ধরনের প্রোগ্রামিং ল্যাঙ্গুয়েজ অবজেক্ট নিয়ে কাজ করে তাকেই অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং বলে, ব্যাস! যেমন, সি প্লাস প্লাস, জাভা, সি শার্প, পাইথন ইত্যাদি! আচ্ছা তাহলে অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং কেন করবো? বা তার সুবিধা কি?

 এটার অনেকগুলো সুবিধা আছে সেগুলো হলঃ
১।  Avoid Data Duplication and Code Reuse: জাভা একই কোড বার বার লিখা থেকে বাঁচিয়ে দেয়। যেমন ধরো, উপরে আমরা Human নামের ক্লাসটি যদি আরো কোথাও ইউজ করতে চাই সিমপ্লি ঐ ক্লাসের Object তৈরী করেই আমরা ইউজ করতে পারো। তুমি চাইলে Rakib, Sakib, Karim, Rahim নামের হাজার হাজার অবজেক্ট তৈরী করতে পারো। প্রতিটা অবজেক্টই স্বতন্ত্র।

২। Design Benefit: যেহেতু সোর্সকোড ক্যাটাগরিভিত্তিক থাকে এবং একই কোড বার বার লিখতে হয়না সেহেতু প্রোগ্রাম ডিজাইনে অনেক সুবিধা পাওয়া যায়।

৩। Simplicity: প্রোগ্রাম সহজে বুঝা এবং ডিবাগ করতে সুবিধা হয়।

৬। Software Maintenance: অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং ব্যবহার করে সফটওয়্যার মেন্টেন করা যায় সহজেই। যে কারনে প্রফেসনাল কাজে অব্জেক্ট অরিয়েন্টেড প্রোগ্রামিং এর এতটা প্রয়োজন!

পরবর্তী পর্বগুলোতে আমরা আরো বিস্তারিত জানতে  পারবো এসব ব্যপারে।

অবজেক্ট অরিয়েন্টেড ফিচার্সঃ
১। Encapsulation
২। Inheritance
৩। Polymorphism
৪। Abstraction
৫। Interface

এখন নীচের প্রশ্নগুলোর উত্তর খোঁজার চেষ্টা করোঃ
১। জাভাতে কিভাবে অবজেক্ট তৈরী করা হয়?
২। উপরের প্রতিটা ক্লাসের কতগুলো অবজেক্ট তৈরি করা যাবে?
৩। উপরের দুইটা ক্লাস থেকে মোট ১০ টা অবজেক্ট তৈরি করো এবং ফাংশনে আলাদা আলাদা প্যারামিটার পাঠিয়ে পরিবর্তনটা লক্ষ্য কর!
৩। অবজেক্ট তৈরী করার সময় যে <ClassName()> এরকম কিছু একটা ব্যবহার করি সেটা কি?
৪। new কিওয়ার্ড এর কাজ কি?
৫। Constructor কি এবং কেন ব্যবহার করা হয়? এটা কিভাবে কাজ  করে?


প্র্যাক্টিসঃ
1. Create a class named Car. It includes the name of the car, Accelerates car speed, shows the current speed at any time.

4 comments:

  1. ১। জাভাতে কিভাবে অবজেক্ট তৈরী করা হয়?
    Ans:Class Name A variable/ObjectName = new ClassName();
    ২। উপরের প্রতিটা ক্লাসের কতগুলো অবজেক্ট তৈরি করা যাবে?
    Ans: Unlimited
    ৩। উপরের দুইটা ক্লাস থেকে মোট ১০ টা অবজেক্ট তৈরি করো এবং ফাংশনে আলাদা আলাদা প্যারামিটার পাঠিয়ে পরিবর্তনটা লক্ষ্য কর!
    ৩। অবজেক্ট তৈরী করার সময় যে এরকম কিছু একটা ব্যবহার করি সেটা কি?
    Ans: je class ar object create korte chai tar nam mention korte hobe .
    ৪। new কিওয়ার্ড এর কাজ কি?
    Ans: noton akta store create kora
    ৫। Constructor কি এবং কেন ব্যবহার করা হয়? এটা কিভাবে কাজ করে?
    Ans: class name & method name same hole amra take Constructor hisebe use korte pari & same name use kore this dot bebohar korte pari.

    @#plz feedback my opinion <3

    ReplyDelete