# পাঠ ৫: অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-১

* অবজেক্ট
* ক্লাস
* ইন্টারফেইস&#x20;
* অ্যবস্ট্রাক্ট ক্লাস&#x20;
* স্ট্যাটিক মেম্বার
* অবজেক্ট ওরিয়েন্টেড কনসেপ্ট
* ইনহেরিট্যান্স
* পলিমরফিজম
* ইনকেপসুলেশান
* সারসংক্ষেপ

শুরুতে বস্তুর ধারণা নিয়ে একটি ছোট্ট ব্যাখ্যা দেই, পরবর্তীতে আমি এই কথাগুলো আরো ব্যাখ্যা করে বলবো। আমরা সবাই কম্পিউটার ব্যবহার করি, যারা একটু বেশি কৌতূহলী তারা নিশ্চয় কম্পিউটারের বক্স খুলে খুলে দেখে ফেলেছে যে, এর মধ্যে নানা রকম যন্ত্রাংশ থাকে, যেমন, র‍্যাম, হার্ডডিস্ক, মাদারবোর্ড, সিপিইউ, কুলিং ফ্যান ইত্যাদি। এইসব মিলেই কম্পিউটার। কিন্তু মজার ব্যপার হলো, এর সবই একটি কোম্পানি তৈরি করেনি। কেও র‍্যাম তৈরি করে, কেওবা মাদারবোর্ড, কেও বা আবার সিপিইউ। কিন্তু সবাই আলাদা আলাদা ভাবে সবকিছু তৈরি করলেও আমরা যখন পুরো কম্পিউটারটি এসেম্বল করি, কি সুন্দর ভাবে সব ঠিক ঠাক ভাবে লেগে যায়, কোন সমস্যা হয় না। একজন ম্যাকানিক-ও যার নাকি কম্পিউটার সায়েন্স এ ডিগ্রি নেই, সেও জানে কিভাবে সব কিছু এসেম্বল করতে হয়। র‍্যাম এর মধ্যে কি আছে সে সম্পর্কে তার কোনই ধারণা নেই, কিংবা সিপিইউ । অবজেক্ট ওরিয়েন্টেড কনসেপ্ট মূল ব্যাপারটি হলো এটি। একটা সিস্টেমে অনেক গুলো কম্পোনেন্ট থাকতে পারে, কিন্তু সব কম্পোনেন্ট গুলো কেও একা তৈরি করবে না এইটাই স্বাভাবিক, এবং এগুলো এমন ভাবে তৈরি করা হয় যাতে খুব সহজেই এদেরকে এসেম্বল করে পুরো সিস্টেম দাড় করানো যায়।

অবজেক্ট ওরিয়েন্টেড কনসেপ্ট এর ধারণার সাথে পরিচিত হতে হলে শুরুতে আমাদের কিছু টার্ম বা শব্দের সাথে পরিচিত হতে হয়। আমি শুরুতে এনালজি বা উপমা দিয়ে বুঝানো চেষ্টা করবো, তারপর মূল বিষয়ে চলে আসবো।

**অবজেক্ট (Object):**

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

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

সুতরাং আমরা জানলাম, অবজেক্ট এর দুইটা জিনিস থাকে, স্টেট ( অর্থাৎ নিজের সম্পর্কে ধারণা) এবং মেথড (সে কি কি কাজ করতে পারে)।

**ক্লাস(Class)**

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

অবজেক্ট ওরিয়েন্ট কনসেপ্ট তিনটি ধারণার উপর প্রতিষ্ঠিত।

এক, ***ইনহেরিট্যান্স-*** নাম থেকেই বুঝা যাচ্ছে যে এখানে বংশগতির একটা বিষয় চলে এসেছে। আসলেও তাই। ধরা যাক একটি একটা চাকা। নানা রকম চাকা হতে পারে, যেমন বাসের চাকা, সাইক্যাল এর চাকা, মটর সাইক্যাল এর চাকা ইত্যাদি। সব চাকার মধ্যেই কিন্তু কিছু কমন ব্যাপার আছে, এটির ব্যাসার্ধ আছে, পরিধি আছে এবং এটি ঘুরে। সুতরাং আমরা একটা চাকা নামের অবজেক্ট বানাতে পারি যা বাকি সব চাকা(বাস, সাইক্যাল এর) পূর্বপুরুষ। এতে আমাদের বেশি কিছু সুবিধা আছে, প্রধান সুবিধে হলো, কমন জিনিস গুলো নিয়ে আমাদের পূর্বপুরুষ তৈরি করার কাজ একবার করে ফেললেই হচ্ছে, উত্তরপুরুষ গুলোতে আপনা আপনি সেই বৈশিষ্ট্যগুলো চলে আসবে।

দুই, ***এনক্যাপসুলেশান-*** মানে হলো জিনিসপত্র ক্যাপসুলের মধ্যে ভরে রাখা। আমরা অনেকেই ক্যাপসুল মেডিসিন খেয়েছি, এটির বাইরে একটা আবরণ দিয়ে সব কিছু ভেতরে আটকানো থাকে । ব্যাপারটি এমনি।

তিন, ***পলিমরফিজম*** – বহুরূপিতা। অর্থাৎ একি অঙ্গে নানা রূপ। একটা অবজেক্ট নানা সময় নানা রকম রূপ ধারণ করতে পারে।

তবে কেন এই অবজেক্ট ওরিয়েন্টেড কনসেপ্ট লাগবে সেটি নিয়ে প্রশ্ন হতে পারে। এবার তাহলে এই প্রশ্নের উত্তর ব্যাখ্যা করা যাক।

আমাদের পরিচিত প্রথাগত বা প্রসিডিউরাল প্রোগ্রামিং ল্যাংগুয়েজ যেমন- সি এর কিছু অসুবিধা রয়েছে। আমরা চাইলেই সহজে পুনরায় ব্যবহারযোগ্য কম্পোনেন্ট তৈরি করতে পারি না। সবচেয়ে বড় অসুবিধা হলো আমরা চাইলেই একটি প্রোগ্রাম থেকে একটি ফাংশান কপি করে অন্য একটি প্রোগ্রামে ব্যবহার করতে পারি না কারণ ফাংশন গুলো সাধারণত কিছু গ্লোবাল ভেরিয়েবল এবং অন্যান্য ফাংশন এর উপর নির্ভর করে। এই ল্যাংগুয়েজ গুলো হাই-লেভেল এবস্ট্রাকশান এর জন্যে মানানসই নয়। যেমন সি যে কম্পোনেন্ট গুলো ব্যবহার করে সেগুলো খুব লো-লেভেল-এর যা দিয়ে একটি বাস্তব জগতের সমস্যাকে খুব সহজে চিত্রায়ণ (portray) করা সম্ভব হয় না। কাস্টমার রিলেশনশিপ ম্যানেজমেন্ট বা সিআরএম অথবা ফুটবল খেলাকে সহজে সি দিয়ে চিত্রায়ণ করা কঠিন।

১৯৭০ সালের যুক্তরাষ্ট্রের প্রতিরক্ষা অদিদপ্তরের একটি টাস্কফোর্স তদন্ত করে বের করার চেষ্টা করে কেন আইটি(IT) বাজেট সবসময় নিয়ন্ত্রণ করা সম্ভব হয় না। সেগুলোর মধ্যে প্রধান গুলো এমন- ৮০% বাজেট শুধুমাত্র সফটওয়্যার এর জন্যে ব্যয় হয় আর বাকি ২০% ব্যয় হয় হার্ডওয়্যার এর জন্যে। এর মধ্যে ৮০% ব্যয় হয় শুধুমাত্র সফটওয়্যার মেইনটেইন করার জন্যে, বাকি ২০% ব্যয় হয় সফটওয়্যার তৈরি করার জন্যে। হার্ডওয়্যার গুলো সহজেই রিইউজ বা পুনরায় ব্যবহার করা যায় এবং এতে এদের ইন্টিগ্রিটি নষ্ট হয় না, এবং একটি হার্ডওয়্যার একটি বিশেষ অংশ নষ্ট হয়ে গেলে তা সহজেই আলাদা করে ফেলা যায় এবং নতুন একটি দিয়ে রিপ্লেস করা যায়। কিন্তু সফটওয়্যার এর ক্ষেত্রে এমন সম্ভব হয় না, একটি প্রোগ্রাম এর সমস্যার জন্যে অন্য প্রোগ্রাম এর সমস্যা তৈরি হয় ইত্যাদি।

এই সমস্যা সমাধান করার জন্যে এই টাস্কফোর্স পরিশেষে প্রস্তাব করে যে সফটওয়্যার-ও হার্ডওয়্যার এর মতো হওয়া উচিৎ। পরবর্তীতে তারা তাদের সিস্টেম এর ৪৫০ টি প্রোগ্রামিং ল্যাংগুয়েজ রিপ্লেস করে এডা (Ada) নামে একটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ল্যাংগুয়েজ ব্যবহার করে।

## চলবে -------


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://java.howtocode.dev/5.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
