বস্তুগত ধারণাঃ পাঠ-১

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

গল্পটিঃ

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

টেকনলিজ অনেকটা এই গল্পের মতো। আমাদের একজনের পক্ষে পুরাপুরি দেখা বা বুঝা সম্ভব হয়ে উঠে না, আমরা একটি অংশ নিয়ে পড়াশোনা করি, এবং সেটি নিয়ে কাজ করি।

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

অবজেক্ট ওরিয়েন্টেড টার্মস (Object oriented terms)

প্রত্যেকটি গল্পে কিছু চরিত্র থাকে। এখন চরিত্র গুলো সম্পর্কে জানা যাক।

অবজেক্ট (Object):

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

অবজেক্ট এর একটি স্টেট থাকে। স্টেট হলো কিছু তথ্য যা দিয়ে ওই অবজেক্টকে আলাদা করা যায়, এবং তার বর্তমান অবস্থান জানা যায়। যেমন একটি ব্যাংক একাউন্ট স্টেট হতে পারে কারেন্ট ব্যালেন্স। একটা অবজেক্ট এর মধ্যে আরেকটি অবজেক্ট থাকতে পারে, যা ওই অবজেক্ট এর স্ট্যাট হতে পারে।

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

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

ক্লাস(Class)

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

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

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

দুই, ইনহেরিট্যান্স– নাম দেখেই বুঝতে পারছো বংশগতির একটা বিষয় চলে আসছে। আসলেও তাই। ধরো একটা চাকা। নানা রকম চাকা হতে পারে, যেমন বাসের চাকা, সাইক্যাল এর চাকা,  মটর সাইক্যাল এর চাকা। সব চাকার মধ্যেই কিন্তু একটা কমন ব্যাপার আছে, এটির ব্যাসার্ধ আছে, পরিধি আছে এবং এটি ঘুরে। সুতরাং আমরা একটা চাকা নামের অবজেক্ট বানাতে পারি যা বাকি সব চাকা(বাস, সাইক্যাল এর) পূর্বপুরুষ। এতে আমাদের বেশি কিছু সুবিধা আছে, প্রধান সুবিধে হলো, কমন জিনিস গুলো নিয়ে আমাদের একবারই চিন্তা করতে হবে। সুবিধা গুলো পরে আরো ডিটেলে বলা হবে।

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

এই হলো ধারণা। অবজেক্ট ওরিয়েন্টেড কনসেপ্ট শুরু করতে হলে আমাদের এই ধারণাটুকু রাখলেই চলবে। কিন্তু এটিই কিন্তু শেষ নয়। আরো অনেক কিছুই আছে, ধীরে ধীরে বলবো।

তোমরা যারা সি জানো, তারা এখনি শুরু করতে পারো। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং শুরু করতে হলে আমার মতে সবার আগে চয়েস হলো জাভা ।

সুতরাং গেট সেট গো।

  • IDE – Integrated development environment – I prefer eclipse.
  • JRE (Java Runtime Environment) && JDK (Java Development Kit)

Download:

  •  http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u4-downloads-1591156.html[Accept License Agreement & get choose your operating system]
  • http://www.eclipse.org/downloads/ [Choose first one]

Advertisements

11 Comments

  1. “অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং শুরু করতে হলে সবার আগে চয়েস হলো জাভা ।”
    দ্বিমত পোষন করছি।
    প্রথম চয়েস জাভা, বা পায়থন বা ডটনেটও হতে পারে। তুই চাইলে বলতে পারিস তোর নিজের পছন্দ হলো জাভা – কিন্তু চাপিয়ে দেয়া কেন?
    চোখ বুলিয়ে গেলাম। কালকে ভালো করে পড়ে বাকিটা সম্পর্কে জানাবোনে 🙂

    1. আমি জানি এইটা তুই এইটা বলবি,এর আগেও একজন বলছে… কিন্তু আমি ইচ্ছে করেই লিখেছি এইটা। জিনসিটা ঠিক চাপিয়ে দেওয়া না।
      তাছাড়া আমি মোটামুটি ৬ টা অবজেক্ট ওরিয়েন্টেড ল্যাংগুয়েজ জানি, সুতরাং বলতেই পারি কোনটা বেটার। আর এখন পর্যন্ত সব যায়গায় প্রথম চয়েস জাভা হয়ে আসছে .. সুতরাং কিছুটি ভুল বলি নাই।

      1. বস্তুগত ভাষা একাধিক হতে পারে। কিন্তু ধারণাটা এক রেখেই ভাষাগুলো তৈরী করা হয়েছে। আর পৃথিবীতে অনেকেই আছে যারা একাধিক বস্তুগত ভাষা জানে। অনেককেই দেখেছি যারা জাভা পায়থন দুটোই শিখে এসে জাভার বদলে পায়থনকে বেশি পছন্দ করে সবখানে পায়থন শিখাতে চায় এই কারণে যে পায়থন আরো ভালো বস্তুগত ধারণা মেনে চলে। বলা বাহুল্য, এটা ব্যক্তিগত পছন্দের ভিত্তিতে বার করা কারণ মাত্র। ব্যক্তিগত ভাবে মনে হয়েছে, “সবার আগে চয়েস হলো জাভা” এর বদলে “সবার আগে আমার পছন্দের চয়েস হলো জাভা” বললে সেটায় নিজের অবস্থান আরেকটু পরিষ্কার থাকে। এতে বুঝা যায় যে তোর নিজের পছন্দ জাভা হলেও – চাইলে অন্যগুলাও পাঠক দেখতে পারে।

        চলে আসা – বা ট্র্যাডিশন যে সবসময় ভালো – এমনটা কিন্তু না। C করার জন্য Turbo C অনেক দিন ধরে চলে আসছে আমাদের দেশে। জাভা সাধারণত যারা পাঠ্যক্রমে রাখে – তারা নিজেরা অন্যান্য বস্তুগত ভাষা চেখে দেখেছে নাকি কখনো, তা নিয়ে আমার সন্দেহ আছে।

        যাই হোক, আমার মতামত আমি দিয়েছি। সেটা নিয়ে আর আলোচনা করাটা অপ্রাসঙ্গিক হবে।

        আমার পুরোটা পড়া শেষ 🙂 গল্পটা ভালো লেগেছে। তবে কিছু প্রশ্ন মাথায় আসতে পারে যেমন
        ১) মাল্টিপ্লান কি
        ২) ফাংশন ও মেথডের পার্থক্য
        ৩) এই ক্লাস সেই ক্লাস নয় বাক্যে আসলে কি বুঝানো হয়েছে

        জিনিষটা পড়ে জানার আগ্রহ আসে আরো। পরবর্তি লেখার জন্য অপেক্ষায় থাকবো। 😀

  2. ঠিক করা হলো…
    ১. মা্ল্টিপ্লান ইলিফ্যান্ট রোড একটা দোকানের নাম.. সবাই চিনে, তুই ও চিনিস নিশ্চয়।
    ২.ফাংশন আর মেথড এর মধ্যে আসলে তেমন কোন পার্থক্য নেই । এক ই । তবে সি এবং জাভার মাধে তুলনা করলে ,ফাংশ স্বাধীন । মেইন বাইরে যেখানে খুমি হতে পারে, কিন্তু মেথড অব্যশ্যই ক্লাসের মধ্যে লিখতে হবে।
    ৩. একটা বিখ্যাত কবিতার লাইন প্যারোডি করেছি মাত্র .. মজা করার জন্যে ..

    1. আমিও চিনি। কথা হলো, তোর ব্লগটা বাংলা পড়ুয়াদের জন্য। আর তারা ঢাকায় থাকবে, মাল্টিপ্ল্যান চিনবে – বিষয়টা এমন না।
      প্রশ্নগুলা আমার না, অন্যদের মাথায় আসতে পারে বলে দিয়েছিলাম।

  3. Polymorphism ta clear koren ??? Ar encapsulation o Inhertance niye oituku amra sobay jani kintu setar kono implementation amra kore dekhi nai…….tai bujhtesi na eigula basic Concept keno hoilo ar kemne hoilo ???

    Part – 2 taratrai likhen Vai………….

    1. পলিমরফিজম, সহজ করে বলি, একজন অনেকগুলা রূপ নিতে পারে। উইকিপিডিয়ার http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming#Examples এই লিংকটা অপেন করো। দেখবে এনিম্যাল নামে একটা ইন্টারফেইস আছে, এই এনিম্যল একেক সময় এককে রকম, কখনো, ডগ, কখনো ক্যাট।

      পলিমরফিজম মূলত এইটাই, একটা অবজেক্ট একেক সময় একেক রকম ভাবে তৈরি হবে।

      আর ইনহেরিটেন্স, ইনক্যাপসুলেশানের ব্যবহার পাবে, যখন ডিজাইন প্যাটার্ন পড়বে, দেখবে এগুলো ছাড়া চলতেই পারছো না.. আমি চেষ্টা করবো জিনিস গুলো আলাদা আলাদা ভাবে আরো লিখতে। আইআইটিতে তোমরা সবাই মিলে(যারা যারা ইন্টারেস্টেড) বসতে পারো।

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s