কিভাবে জাভার "বিমূর্ত" ক্লাস এবং পদ্ধতিগুলি ব্যবহার করবেন
Abstraction
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এর তিনটি মূল নীতির মধ্যে একটি - এনক্যাপসুলেশন এবং উত্তরাধিকারের পাশাপাশি।
বিমূর্ততা হল আপনার প্রোগ্রামের জটিলতা কমাতে এবং আপনার কোড পড়া সহজ করার একটি উপায়। জাভাতে, বিমূর্ততা আপনাকে অনুমতি দেয়:
- একটি ক্লাসের শুধুমাত্র নির্দিষ্ট কিছু বিবরণ দেখান এবং
- সেই ক্লাসের অন্যান্য সমস্ত বিবরণ লুকান।
জাভাতে শ্রেণী এবং পদ্ধতি উভয় ক্ষেত্রেই বিমূর্ততা প্রয়োগ করা যেতে পারে।
এই টিউটোরিয়ালটি জাভাতে বিমূর্তকরণের মূল বিষয়গুলি, কীভাবে বিমূর্ত ক্লাসগুলি ব্যবহার করতে হয় এবং কীভাবে বিমূর্ত পদ্ধতিগুলি ব্যবহার করতে হয় তা নিয়ে আলোচনা করা হবে। এই গুরুত্বপূর্ণ ধারণাটি আরও ভালভাবে বুঝতে আপনাকে সাহায্য করার জন্য আমরা কয়েকটি উদাহরণের মাধ্যমেও হাঁটব।
জাভা বিমূর্ততা
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং হল এক ধরণের প্রোগ্রামিং যা ডেটা এবং পদ্ধতিগুলিকে উপস্থাপন করতে অবজেক্ট এবং ক্লাস ব্যবহার করে। অবজেক্ট এবং ক্লাস ব্যবহার করা কোডের পুনরাবৃত্তি কমাতে পারে এবং প্রোগ্রামগুলিকে আরও দক্ষ করে তুলতে পারে।
জাভা একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা। যেমন, এটি বস্তু এবং ক্লাসের সাথে কাজ করতে ব্যবহৃত বেশ কয়েকটি বৈশিষ্ট্য অন্তর্ভুক্ত করে। বিমূর্ততা সেই বৈশিষ্ট্যগুলির মধ্যে একটি। বিমূর্ততা আপনাকে জাভাতে একটি ক্লাসে শুধুমাত্র নির্দিষ্ট তথ্য প্রদর্শন করতে দেয়।
দুটি উদাহরণ রয়েছে যেখানে জাভাতে বিমূর্ততা ব্যবহার করা হয়:ক্লাসে এবং পদ্ধতিতে।
জাভা বিমূর্ত ক্লাস
জাভাতে, একটি বিমূর্ত শ্রেণী হল এমন একটি শ্রেণী যেখান থেকে আপনি কোনো বস্তু তৈরি করতে পারবেন না। অন্য কথায়, বিমূর্ত ক্লাস ইনস্ট্যান্ট করা যাবে না।
81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগদানের পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷
৷গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় ব্যয় করেছে।
জাভাতে একটি বিমূর্ত ক্লাস তৈরি করতে, আপনি বিমূর্ত কীওয়ার্ড ব্যবহার করতে পারেন। এখানে জাভাতে একটি বিমূর্ত শ্রেণীর একটি উদাহরণ রয়েছে:
বিমূর্ত শ্রেণীর BankAccount {// এখানে কোড
যেহেতু এটি একটি বিমূর্ত ক্লাস, আমরা যদি এই ক্লাসের সাথে একটি অবজেক্ট তৈরি করার চেষ্টা করি তবে আমাদের প্রোগ্রামটি একটি ত্রুটি ফিরিয়ে দেবে।
উদাহরণস্বরূপ, ধরুন আমরা BankAccount নামে একটি ক্লাসের একটি উদাহরণ তৈরি করার চেষ্টা করি। আমরা এই উদাহরণটিকে lucyAccount বলতে চাই এবং আমরা চাই এটি লুসির ব্যাঙ্কের তথ্য সংরক্ষণ করুক। লুসি আমাদের গ্রাহকদের একজন। এই উদাহরণটি তৈরি করার চেষ্টা করার জন্য আমরা নিম্নলিখিত কোড ব্যবহার করি:
BankAccount lucyAccount =নতুন BankAccount();
আমরা যখন এই কোডটি চালাই, তবে, আমাদের প্রোগ্রামটি ফিরে আসে:
ব্যাঙ্ক অ্যাকাউন্ট বিমূর্ত; তাত্ক্ষণিক করা যাবে নাআপনি দেখতে পাচ্ছেন, আপনি একটি অবজেক্টে বিমূর্ত ক্লাস বরাদ্দ করতে পারবেন না।
যাইহোক, আপনি এখনও বিমূর্ত ক্লাস থেকে সাবক্লাস তৈরি করতে পারেন। পরবর্তী বিভাগে, আমরা আলোচনা করব কিভাবে বিমূর্ত ক্লাস থেকে সাবক্লাস তৈরি করা যায়।
বিমূর্ত শ্রেণীর উত্তরাধিকার
আমরা যেমন উল্লেখ করেছি, আপনি অবজেক্টকে একটি বিমূর্ত শ্রেণী বরাদ্দ করতে পারবেন না। সুতরাং, একটি বিমূর্ত শ্রেণীর বিষয়বস্তু অ্যাক্সেস করার জন্য-অন্য কথায়, সেই শ্রেণীর সাথে সম্পর্কিত বৈশিষ্ট্য এবং পদ্ধতিগুলি-আমাদের
inherit
করতে হবে। ক্লাস।ধরুন আমরা একটি প্রোগ্রাম তৈরি করছি যা একটি ব্যাঙ্কের জন্য ব্যাঙ্ক অ্যাকাউন্টের তথ্য সংরক্ষণ করে। আমাদের প্রোগ্রাম দুটি ক্লাস অন্তর্ভুক্ত করবে:BankAccount এবং CheckingAccount। BankAccount হবে একটি অভিভাবক শ্রেণী যা ব্যাঙ্ক অ্যাকাউন্টের সাথে কাজ করার জন্য বৈশিষ্ট্য এবং পদ্ধতি সংরক্ষণ করে। CheckingAccount একটি চাইল্ড ক্লাস হবে যা সেই পদ্ধতিগুলিকে উত্তরাধিকারসূত্রে প্রাপ্ত করে৷
এই উদাহরণের জন্য, BankAccount একটি বিমূর্ত শ্রেণী। আমরা শুধুমাত্র চেকিং অ্যাকাউন্ট তৈরি করতে এটি ব্যবহার করতে চাই৷
৷আমাদের ব্যাঙ্কঅ্যাকাউন্ট এবং চেকিংঅ্যাকাউন্ট ক্লাসের সাথে কাজ করার জন্য এই কোডটি ব্যবহার করতে পারি:
বিমূর্ত বর্গ BankAccount { public void viewAccountNumber() { System.out.println("অ্যাকাউন্ট নম্বর:#1932042"); }}ক্লাস CheckingAccount প্রসারিত করে BankAccount {}ক্লাস মেইন { পাবলিক স্ট্যাটিক ভ্যাইড মেইন(স্ট্রিং[] আর্গস) { CheckingAccount lucyAccount =new CheckingAccount(); lucyAccount.viewAccountNumber(); }}আমাদের কোড রিটার্ন করে:
অ্যাকাউন্ট নম্বর:#1932042এই উদাহরণে, আমরা তিনটি ক্লাস তৈরি করেছি:
- ব্যাঙ্ক অ্যাকাউন্ট . এটি একটি বিমূর্ত ক্লাস। এটিতে
viewAccountNumber()
নামে একটি পদ্ধতি রয়েছে . যেহেতু BankAccount একটি বিমূর্ত ক্লাস, আমরা ক্লাসের একটি বস্তু তৈরি করতে পারি না।- চেকিং অ্যাকাউন্ট . এটি একটি শিশু ক্লাস। একটি শিশু শ্রেণী হিসাবে, এটি BankAccount ক্লাসের বৈশিষ্ট্য এবং পদ্ধতিগুলি উত্তরাধিকার সূত্রে পায়।
- প্রধান . এই ক্লাসে আমাদের প্রধান প্রোগ্রামের কোড রয়েছে।
আমাদের প্রধান প্রোগ্রামে, আমরা CheckingAccount ক্লাসের একটি উদাহরণ তৈরি করি এবং এটিকে lucyAccount বলি। lucyAccount একটি বস্তু। আমাদের প্রোগ্রামে তিনটি ক্লাস তৈরি করার পর, আমরা
viewAccountNumber()
পদ্ধতিতে lucyAccount অবজেক্ট ব্যবহার করেছি। .নিম্নলিখিত সারণী এই উদাহরণের মূল অংশগুলিকে সংক্ষিপ্ত করে:
NAME | TYPE | বর্ণনা |
BankAccount | বিমূর্ত/প্যারেন্ট ক্লাস | ব্যাঙ্ক অ্যাকাউন্টের সাথে কাজ করার জন্য বৈশিষ্ট্য এবং পদ্ধতি সংরক্ষণ করে। |
চেকিং অ্যাকাউন্ট | শিশু শ্রেণি | অভিভাবক শ্রেণীর পদ্ধতিগুলি উত্তরাধিকারসূত্রে পায়৷ | ৷
প্রধান | শ্রেণী | আমাদের প্রধান প্রোগ্রামের কোড রয়েছে। |
lucyAccount | অবজেক্ট | আমাদের প্রোগ্রামের বাস্তব-বিশ্বের অ্যাপ্লিকেশন। |
আপনি যদি জাভাতে উত্তরাধিকার সম্পর্কে আরও জানতে আগ্রহী হন তবে এখানে আমাদের সম্পূর্ণ নির্দেশিকা পড়ুন।
জাভা বিমূর্ত পদ্ধতি
ক্লাস ছাড়াও, পদ্ধতিগুলিও বিমূর্ত হতে পারে।
আপনি যখন একটি বিমূর্ত পদ্ধতি ঘোষণা করেন, আপনি উপরের মত একই বিমূর্ত কীওয়ার্ড ব্যবহার করেন। আপনি কোন বিষয়বস্তু নির্দিষ্ট করেন না, এবং আপনি শুধুমাত্র একটি বিমূর্ত শ্রেণীর মধ্যে একটি বিমূর্ত পদ্ধতি ঘোষণা করতে পারেন৷
এখানে জাভাতে একটি বিমূর্ত পদ্ধতির একটি উদাহরণ রয়েছে:
বিমূর্ত অকার্যকর চেকব্যালেন্স();
এই উদাহরণে, আমরা checkBalance()
নামে একটি বিমূর্ত পদ্ধতি তৈরি করেছি . এই পদ্ধতির কোনো শরীর নেই—অন্য কথায়, পদ্ধতির সাথে কোনো কোড যুক্ত নেই।
আগের থেকে আমাদের ব্যাঙ্কের উদাহরণে ফিরে আসা যাক। সেই প্রোগ্রামটিতে একটি বিমূর্ত পদ্ধতি রয়েছে:lucyAccount.viewAccountNumber();
.
গ্রাহকের ব্যাঙ্ক অ্যাকাউন্ট নম্বরগুলি প্রদর্শন করতে আমাদের প্রোগ্রামটি সক্ষম করতে আমরা এই বিমূর্ত পদ্ধতিটি ব্যবহার করেছি। উপরের উদাহরণে (আগের বিভাগ থেকে), BankAccount অভিভাবক শ্রেণী শিশু শ্রেণীর(গুলি) জন্য এক ধরণের টেমপ্লেট হিসাবে কাজ করে।
এই ক্ষেত্রে, শিশু শ্রেণীর বিভিন্ন ধরনের ব্যাংক অ্যাকাউন্ট। এর কারণ হল আমাদের গ্রাহকদের একাধিক ধরনের ব্যাঙ্ক অ্যাকাউন্ট থাকতে পারে এবং আমরা প্রতিটি ধরনের অ্যাকাউন্টে একই কাজ করতে চাই। আমরা উপরে যে চাইল্ড ক্লাস তৈরি করেছি তা হল:CheckingAccount।
আসুন উপরের উদাহরণ থেকে আমাদের গ্রাহকের কাছে ফিরে যাই। লুসির একটি চেকিং অ্যাকাউন্ট আছে, তবে তার একটি সেভিংস অ্যাকাউন্ট এবং একটি ব্রোকারেজ অ্যাকাউন্টও থাকতে পারে। আমরা লুসির প্রতিটি অ্যাকাউন্টের জন্য অ্যাকাউন্ট নম্বর প্রদর্শন করতে সক্ষম হতে চাই। আমরা এই দুটি অতিরিক্ত অ্যাকাউন্টের জন্য চাইল্ড ক্লাস তৈরি করে তা করতে পারি। আমরা তাদের কল করতে পারি:SavingsAccount, BrokerageAccount।
যেহেতু আমরা BankAccount প্যারেন্ট ক্লাস তৈরি করেছি, তাই আমরা দক্ষতার সাথে এবং ন্যূনতম কোড পুনরাবৃত্তি সহ তিনটি অ্যাকাউন্টের জন্য অ্যাকাউন্ট নম্বর প্রদর্শন করতে পারি।
নীচের কোডে, আমরা বিমূর্ত কীওয়ার্ড দুইবার ব্যবহার করি। প্রথমত, আমরা একটি বিমূর্ত শ্রেণী (BankAccount) ঘোষণা করি। তারপর, আমরা একটি বিমূর্ত পদ্ধতি ঘোষণা করি যা পরবর্তীতে আমাদের গ্রাহকের অ্যাকাউন্ট নম্বর(গুলি) প্রদর্শনের জন্য প্রোগ্রামটিকে নির্দেশ করতে সহায়তা করবে। সেই বিমূর্ত পদ্ধতির ঘোষণা হল:বিমূর্ত অকার্যকর viewAccountNumber();
. তারপর আমরা viewAccountNumber()
আরম্ভ করি CheckingAccount চাইল্ড ক্লাসের পদ্ধতি। এখানে কোড:
বিমূর্ত বর্গ BankAccount { abstract void viewAccountNumber();}ক্লাস CheckingAccount ব্যাঙ্ক অ্যাকাউন্ট প্রসারিত করে {public void viewAccountNumber() { System.out.println("চেকিং অ্যাকাউন্ট নম্বর:#1932042"); }}ক্লাস মেইন { পাবলিক স্ট্যাটিক ভ্যাইড মেইন(স্ট্রিং[] আর্গস) { CheckingAccount lucyAccount =new CheckingAccount(); lucyAccount.viewAccountNumber(); }}
আমাদের কোড ফিরে আসে:
অ্যাকাউন্ট নম্বর চেক করা হচ্ছে:#1932042
এই উদাহরণটি আমাদের আগের উদাহরণের মতো একই আউটপুট প্রদান করে, তবে নোট করার জন্য কয়েকটি কোড পার্থক্য রয়েছে। তারা হল:
- বিমূর্ত পদ্ধতির ঘোষণা। এখানে উদাহরণে, আমরা BankAccount নামে একটি বিমূর্ত শ্রেণী ঘোষণা করি। এই ক্লাসে
viewAccountNumber()
নামে একটি বিমূর্ত পদ্ধতি রয়েছে . - বিমূর্ত পদ্ধতির এক্সটেনশন। আমরা CheckingAccount ক্লাসের মাধ্যমে BankAccount ক্লাস প্রসারিত করি। CheckingAccount ক্লাসটি BankAccount পদ্ধতিতে সংরক্ষিত মানগুলিকে উত্তরাধিকার সূত্রে প্রাপ্ত করে।
CheckingAccount ক্লাসে, আমরা একটি পদ্ধতি সংজ্ঞায়িত করি—যাকে বলা হয় viewAccountNumber()
—এটি শুধুমাত্র CheckingAccount অবজেক্টে অ্যাক্সেসযোগ্য। তারপর, গ্রাহকের অ্যাকাউন্ট নম্বর দেখার জন্য, আমরা একটি CheckingAccount অবজেক্ট তৈরি করি।
জাভা অ্যাবস্ট্রাকশন উদাহরণ
এখন যেহেতু আমরা জাভা বিমূর্ত ক্লাস এবং বিমূর্ত পদ্ধতি উভয় নিয়েই আলোচনা করেছি, আমরা জাভাতে বিমূর্ততার একটি সম্পূর্ণ উদাহরণ অন্বেষণ করতে পারি। এটি করার জন্য, আমরা উপরের ব্যাঙ্ক অ্যাকাউন্টের উদাহরণগুলিতে আলোচনা করা সমস্ত কিছু একত্রিত করব।
ধরুন আমরা একটি ব্যাঙ্ক পরিচালনা করছি যেটি দুই ধরনের ব্যাঙ্ক অ্যাকাউন্ট অফার করে:চেকিং অ্যাকাউন্ট এবং সেভিংস অ্যাকাউন্ট। আমরা একটি প্রোগ্রাম লেখার সিদ্ধান্ত নিই যা ব্যাঙ্ক অ্যাকাউন্টধারীদের তাদের অ্যাকাউন্ট নম্বর চেক করতে দেয়৷
আমাদের ব্যাঙ্কে, যদি একটি ব্যাঙ্ক অ্যাকাউন্ট একটি চেকিং অ্যাকাউন্ট হয়, তাহলে অ্যাকাউন্ট নম্বরটি গ্রাহকের আইডি নম্বর দিয়ে শুরু হয় এবং 555-এ শেষ হয়। অ্যাকাউন্টটি যদি একটি সেভিংস অ্যাকাউন্ট হয়, তাহলে অ্যাকাউন্ট নম্বরটি 777-এ শেষ হয়।
আমরা এই প্রোগ্রামটি তৈরি করতে নিম্নলিখিত কোড ব্যবহার করতে পারি:
বিমূর্ত বর্গ BankAccount { abstract void viewAccountNumber();}ক্লাস CheckingAccount প্রসারিত করে BankAccount { public void viewAccountNumber() { System.out.println("চেকিং অ্যাকাউন্ট নম্বর:#1932042555"); }}শ্রেণীর SavingsAccount প্রসারিত করে BankAccount { public void viewAccountNumber() { System.out.println("সেভিংস অ্যাকাউন্ট নম্বর:#1932042777"); }}ক্লাস মেইন { পাবলিক স্ট্যাটিক ভ্যাইড মেইন(স্ট্রিং[] আর্গস) { চেকিং অ্যাকাউন্ট ellieCeckingAccount =নতুন CheckingAccount(); ellieCheckingAccount.viewAccountNumber() SavingsAccount ellieSavingsAccount =নতুন সঞ্চয় হিসাব(); ellieSavingsAccount.viewAccountNumber(); }}
আমাদের কোড রিটার্ন করে:
অ্যাকাউন্ট নম্বর চেক করা হচ্ছে:#1932042555 সেভিংস অ্যাকাউন্ট নম্বর:#1932042777
এই উদাহরণে, আমরা একটি ক্লাস তৈরি করেছি এবং এটিকে BankAccount বলে। এই ক্লাসে একটি বিমূর্ত পদ্ধতি ছিল, যার নাম viewAccountNumber()
.
প্রতিটি ধরনের অ্যাকাউন্ট আলাদাভাবে অ্যাকাউন্ট নম্বর নির্ধারণ করে, তাই আমরা viewAccountNumber()
বাস্তবায়ন করতে পারি না। ব্যাঙ্ক অ্যাকাউন্ট ক্লাসে পদ্ধতি। পরিবর্তে, BankAccount ক্লাসের প্রতিটি সাবক্লাস viewAccountNumber()
প্রয়োগ করে পদ্ধতি।
এই উদাহরণে, CheckingAccount ক্লাস একটি নম্বর হিসাবে অ্যাকাউন্ট নম্বরগুলিকে বরাদ্দ করে যা গ্রাহকের আইডি দিয়ে শুরু হয় এবং 555 দিয়ে শেষ হয়৷ SavingsAccount ক্লাসটি অ্যাকাউন্ট নম্বরগুলিকে একটি নম্বর হিসাবে বরাদ্দ করে যা গ্রাহকের ID দিয়ে শুরু হয় এবং 777 দিয়ে শেষ হয়৷
আমাদের কোডে, আমরা এলি নামক গ্রাহকের জন্য CheckingAccount ক্লাসের একটি উদাহরণ শুরু করি। এই উদাহরণটিকে ellieCheckingAccount নাম দেওয়া হয়েছে, এবং আমরা viewAccountNumber()
আহ্বান করি অ্যাকাউন্টের নম্বর দেখার পদ্ধতি। এটি ফিরে আসে:
অ্যাকাউন্ট নম্বর চেক করা হচ্ছে:#1932042555
আমরা SavingsAccount ক্লাসের একটি ইন্সট্যান্স শুরু করি, যাকে বলা হয় ellieSavingsAccount, এবং আমরা viewAccountNumber()
চালু করি। অ্যাকাউন্টের নম্বর দেখার পদ্ধতি। এটি ফিরে আসে:
সেভিংস অ্যাকাউন্ট নম্বর:#1932042777
উপসংহার
Abstraction
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। এটি আপনাকে একটি ক্লাস বা পদ্ধতিতে নির্দিষ্ট বিবরণ লুকিয়ে রাখতে এবং শুধুমাত্র প্রয়োজনীয় তথ্য প্রদর্শন করতে দেয়। জাভাতে বিমূর্ত ক্লাস এবং পদ্ধতি তৈরি করতে, abstract
ব্যবহার করুন কীওয়ার্ড।
এই টিউটোরিয়ালে উদাহরণ সহ আলোচনা করা হয়েছে, কীভাবে বিমূর্ততা কাজ করে, কেন বিমূর্তকরণ দরকারী এবং কীভাবে আপনি জাভাতে বিমূর্ত পদ্ধতি এবং ক্লাস তৈরি করতে পারেন। এখন আপনি একজন পেশাদার প্রোগ্রামারের মতো জাভাতে বিমূর্ত ক্লাস এবং পদ্ধতি নিয়ে কাজ শুরু করতে প্রস্তুত!