Skip to main content

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



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



ক্লাসের কাজ কি?

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



মেথডের কাজ কি?
অবজেক্টের জন্য বৈশিষ্ট্য তৈরি করা। অর্থাৎ আমরা এখানে আমাদের ওওপি 
ডিজাইনে যা যা চেয়েছি, তাঁর এলগরিদম এখানে ইমপ্লিমেন্ট করব। মেথডের 
ভিতর যা কোড লিখব, অবজেক্টটা ওইরকম আচরণ করবে।
তাহলে তো মেথড আর ফাংশন একই কথা! নাম কেন আলাদা!



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



মেথড অনেক ধরণের হতে পারে 
যেমন, ইন্টারফেস মেথড, কনস্ট্রাকটর মেথড ইত্যাদি।




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

this কিওয়ার্ডটির কাজ হচ্ছে, ঐ ক্লাসে অন্তর্ভুক্ত কোন ভ্যারিয়েবল বা মেথড 
আমরা this এর মাধ্যমে এক্সেস করতে পারি, ঐ ক্লাসে যেহেতু তিনটি 
ভ্যারিয়েবল ব্যবহার করছি, constructor দিয়ে ডেটাগুলো সংগ্রহ করে 
আমরা সেখানে এসাইন করে দিচ্ছি। ভ্যারিয়েবলগুলো কেন private করা 
হলো, এবং বাকি দুইটি মেথডের যৌক্তিকতা পরে ব্যাখ্যা করছি।

এখন একজন ইউজার একাউন্ট খুললে কি হচ্ছে দেখা যাক,








এখানে মেথড আর ফাংশনের পার্থক্য স্পষ্ট। আমরা যখন setdeposit()  
মেথড এক্সেস করতে যাচ্ছি, তখন আমরা user অবজেক্টের রেফারেন্সে .(ডট)  
অপারেটর ব্যবহার করে মেথড এক্সেস করছি,

কিন্তু জাভার বিল্টইন 'ফাংশন' println যখন ব্যবহার করছি
কোন অবজেক্টের রেফারেন্স আমাকে নিতে হচ্ছে না। 
এটাই মেথড আর ফাংশনের মাঝে পার্থক্য। 



এখন আমরা আলোচনা করব অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের চারটি 
সাধারণ বৈশিষ্ট্য নিয়ে
ইংরেজিতে যাদের ডাকা হয়, 'OOP basic principles'

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ল্যাংগুয়েজ মাত্রই এই প্রিন্সিপালগুলো মেনে চলে
অর্থাৎ এই ফিচারগুলি থাকলেই আমরা সেই ল্যাংগুয়েজকে অবজেক্ট 
ওরিয়েন্টেড ল্যাংগুয়েজ বলতে পারব নয়ত না। জনপ্রিয় সব ল্যাংগুয়েজ 
যেমন, Java, Php, C#, -তে একটু খেয়াল করলেই এই ফিচারগুলি লক্ষ 
করা যাবে।






এখন ফিচারগুলি কি কি জানা যাকঃ
. Inheritance
. Abstraction
. Polymorphism
. Incapsulation



লিংকগুলিতে ক্লিক করলে বিশদ ব্যাখ্যায় যাওয়া যাবে।



যখন আমরা একটি অবজেক্ট ওরিয়েন্টেড ডিজাইন করতে শুরু করব
তখন SOLID principles মেনে ডিজাইন করা best practice.






পরামর্শ ও প্রশ্ন - dipchakraborty71@gmail.com





Comments

Popular posts from this blog

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং

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

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ ইনহেরিটেন্স

ইনহেরিটেন্সঃ ইনহেরিটেন্স অর্থ উত্তরাধিকারী। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ একটি ক্লাস অন্য আরেকটি ক্লাসকে ইনহেরিট করলে ঐ ক্লাস যে ক্লাসকে ইনহেরিট করেছে, সে ক্লাসের ডেটাগুলো ব্যবহার করতে পারে। উত্তরাধিকারসূত্রে পিতার সম্পত্তিপ্রাপ্তির মতই হয়ে যাচ্ছে ব্যাপারটা! তাই সুবিধার জন্য ইনহেরিট যে ক্লাসকে করা হয়েছে সে ক্লাস প্যারেন্ট ক্লাস ও যে ক্লাস ইনহেরিট করেছে সেই ক্লাস চাইল্ড ক্লাস হিসেবে বহুল ব্যবহৃত। আমিও এই নামেই ডাকছি। ইনহেরিট করার জন্য আমরা extends কিওয়ার্ডটি ব্যবহার করি। এখানে চাইন্ড ক্লাস প্যারেন্ট ক্লাসকে এক্সটেন্ড করে প্যারেন্ট ক্লাসের মেথডটি এক্সেস করতে পারছে। inheritance এর প্রকারভেদ, সিঙ্গেল লেভেল, মাল্টীলেভেল, হায়ারকিক্যাল, হাইব্রিড। সিঙ্গেল লেভেলঃ একটি প্যারেন্ট ক্লাস ও চাইল্ড ক্লাসের ডিরেক্ট সম্পর্ক।   মাল্টিলেভেলঃ প্যারেন্ট ক্লাস যদি অন্য আরেকটি ক্লাসকে ইনহেরিট করে তবে ঐ ক্লাসের সাথে চাইল্ড ক্লাসের সম্পর্ক। হায়ারকিক্যালঃ এক প্যারেন্টকে একাধিক চাইল্ড ইনহেরিট করলে হাইব্রিডঃ বাকি প্রকারভেদগুলোর মিশ্রণ এখন পর্যন্ত যা দেখলাম, তা আ...

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ পলিমরফিজম

পলিমরফিজমঃ পলিমরফিজম অর্থ বহুরূপতা। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে, একই নামে বহু মেথড লেখা যায় অন্তত একটা পার্থক্য রেখে। অথবা প্যারেন্ট ক্লাসের কোন মেথডকে চাইল্ড ক্লাসে আবার লেখা যায়, একে বলে মেথড ওভাররাইড করা। এখানে একই মেথড প্যারামিটার বদলে অনেকবার ব্যবহার করলাম, একে বলে মেথড ওভারলোডিং। এখানে প্যারেন্ট ক্লাসের মেথডকে চাইল্ড ক্লাসে আবার লিখলাম। একে বলে মেথড ওভাররাইড করা। পলিমরফিজমের সুবিধা অনেক। কোড রিইউজ করা যায়, একটা সুপার ক্লাস বানিয়ে সেখানে সব মেথড রেখে, সেটা দিয়েই অন্যান্য সাবক্লাসের কাজ করা যায়, কন্সট্রাক্টরে বিভিন্নভাবে এর কাজ করা যায়। পলিমরফিজমের একটি অসুবিধা হচ্ছে, কোডের readable quality কমিয়ে দেয়। একই নামের অসংখ্য মেথড থাকলে runtime এও প্রভাব ফেলে, ফলে প্রোগ্রাম স্লো হয়ে যাওয়ার সম্ভাবনা দেখা যায়।