উত্তরাধিকার
একটি গাড়ি এবং একটি বাস বিবেচনা করুন। তারা দুটি ভিন্ন যানবাহন। তবুও তারা কিছু সাধারণ সম্পত্তি ভাগ করে নেয় যেমন তাদের স্টিয়ারিং, ব্রেক, গিয়ারস, ইঞ্জিন ইত্যাদি রয়েছে।
সুতরাং উত্তরাধিকারের ধারণার সাথে এটি নিম্নলিখিত হিসাবে প্রতিনিধিত্ব করা যেতে পারে ...
public class Vehicle {
private Driver driver;
private Seat[] seatArray; //In java and most of the Object Oriented Programming(OOP) languages, square brackets are used to denote arrays(Collections).
//You can define as many properties as you want here ...
}
এখন একটি সাইকেল ...
public class Bicycle extends Vehicle {
//You define properties which are unique to bicycles here ...
private Pedal pedal;
}
এবং একটি গাড়ী ...
public class Car extends Vehicle {
private Engine engine;
private Door[] doors;
}
উত্তরাধিকার সম্পর্কে এটাই । আমরা উপরে হিসাবে দেখেছি সহজ বেস ফর্ম এবং তাদের শিশুদের মধ্যে অবজেক্টগুলিকে শ্রেণিবদ্ধ করতে এগুলি ব্যবহার করি।
বিমূর্ত ক্লাস
বিমূর্ত শ্রেণি অসম্পূর্ণ বস্তু। এটি আরও বোঝার জন্য, আসুন গাড়িটির সাদৃশ্যটি আরও একবার বিবেচনা করি।
একটি গাড়ি চালানো যেতে পারে। রাইট? তবে বিভিন্ন যানবাহন বিভিন্ন উপায়ে চালিত হয় ... উদাহরণস্বরূপ, আপনি যেমন সাইকেল চালান তেমন আপনি গাড়ি চালাতে পারবেন না।
সুতরাং কিভাবে একটি গাড়ির ড্রাইভ ফাংশন উপস্থাপন? এটি কোন ধরণের যানবাহন তা যাচাই করা এবং এটি নিজের ফাংশন দিয়ে চালনা করা আরও শক্ত; নতুন ধরণের যানবাহন যুক্ত করার সময় আপনাকে ড্রাইভার ক্লাসটি বারবার পরিবর্তন করতে হবে।
এখানে বিমূর্ত শ্রেণি এবং পদ্ধতিগুলির ভূমিকা আসে। আপনি ড্রাইভ পদ্ধতিটি বিমূর্ত হিসাবে সংজ্ঞায়িত করতে পারেন যে উত্তরাধিকার সূত্রে প্রাপ্ত প্রতিটি শিশুকে এই ফাংশনটি বাস্তবায়ন করতে হবে।
সুতরাং আপনি যদি যানবাহনের ক্লাসটি পরিবর্তন করেন ...
//......Code of Vehicle Class
abstract public void drive();
//.....Code continues
সাইকেল এবং কারকে এটি কীভাবে চালনা করতে হবে তাও নির্দিষ্ট করতে হবে। অন্যথায়, কোডটি সংকলন করবে না এবং একটি ত্রুটি নিক্ষেপ করা হবে।
সংক্ষেপে .. একটি বিমূর্ত শ্রেণি কিছু অসম্পূর্ণ ফাংশন সহ একটি আংশিক অসম্পূর্ণ বর্গ, যা উত্তরাধিকার সূত্রে প্রাপ্ত শিশুদের তাদের নিজস্ব নির্দিষ্ট করতে হবে।
ইন্টারফেস
ইন্টারফেস সম্পূর্ণ অসম্পূর্ণ। তাদের কোনও সম্পত্তি নেই। তারা কেবল ইঙ্গিত দেয় যে উত্তরাধিকারসূত্রে প্রাপ্ত শিশুরা কিছু করতে সক্ষম ... মনে
করুন আপনার সাথে বিভিন্ন ধরণের মোবাইল ফোন রয়েছে। তাদের প্রত্যেকের বিভিন্ন কাজ করার বিভিন্ন উপায় রয়েছে; যেমন: একজনকে ফোন করুন। ফোনটির নির্মাতা এটি কীভাবে করবেন তা নির্দিষ্ট করে। এখানে মোবাইল ফোনগুলি একটি নম্বর ডায়াল করতে পারে - এটি ডায়াল-সক্ষম is এর একটি ইন্টারফেস হিসাবে প্রতিনিধিত্ব করা যাক।
public interface Dialable {
public void dial(Number n);
}
এখানে ডায়ালবলের নির্মাতা সংখ্যার ডায়াল কীভাবে করবেন তা নির্ধারণ করে। আপনাকে ডায়াল করার জন্য কেবল এটির একটি নম্বর দেওয়া দরকার।
// Makers define how exactly dialable work inside.
Dialable PHONE1 = new Dialable() {
public void dial(Number n) {
//Do the phone1's own way to dial a number
}
}
Dialable PHONE2 = new Dialable() {
public void dial(Number n) {
//Do the phone2's own way to dial a number
}
}
//Suppose there is a function written by someone else, which expects a Dialable
......
public static void main(String[] args) {
Dialable myDialable = SomeLibrary.PHONE1;
SomeOtherLibrary.doSomethingUsingADialable(myDialable);
}
.....
এর দ্বারা বিমূর্ত শ্রেণীর পরিবর্তে ইন্টারফেস ব্যবহার করে, ডায়ালবল ব্যবহার করে এমন ফাংশনের লেখককে এর বৈশিষ্ট্যগুলি নিয়ে চিন্তা করার দরকার নেই। উদাহরণস্বরূপ: এটির কোনও টাচ-স্ক্রিন বা ডায়াল প্যাড রয়েছে কি এটি একটি স্থির ল্যান্ডলাইন ফোন বা মোবাইল ফোন। আপনার কেবল এটি ডায়ালযোগ্য কিনা তা জানতে হবে; এটি ডায়ালযোগ্য ইন্টারফেসের উত্তরাধিকারী (বা প্রয়োগ) করে।
এবং আরও গুরুত্বপূর্ণ , যদি কোনও দিন আপনি ডায়ালবেলটিকে অন্য কোনও দিয়ে স্যুইচ করেন
......
public static void main(String[] args) {
Dialable myDialable = SomeLibrary.PHONE2; // <-- changed from PHONE1 to PHONE2
SomeOtherLibrary.doSomethingUsingADialable(myDialable);
}
.....
আপনি নিশ্চিত হতে পারেন যে কোডটি এখনও নিখুঁতভাবে কাজ করে কারণ ডায়ালবল ব্যবহার করে এমন ফাংশন ডায়ালযোগ্য ইন্টারফেসে উল্লিখিত বিবরণ ব্যতীত অন্যান্য তথ্যের উপর নির্ভর করে না (এবং করতে পারে না)। তারা উভয় একটি ডায়ালযোগ্য ইন্টারফেস প্রয়োগ করে এবং এটিই ফাংশনটি যত্ন করে।
ইন্টারফেসগুলি সাধারণত বিকাশকারীরা অবজেক্টগুলির মধ্যে আন্তঃআরক্ষীয়তা (আন্ত: বিনিময় ব্যবহার) নিশ্চিত করতে ব্যবহৃত হয়, যতক্ষণ না তারা একটি সাধারণ ফাংশন ভাগ করে নেয় (ঠিক যেমন আপনি কোনও ল্যান্ডলাইন বা মোবাইল ফোনে বদলে যেতে পারেন, যতক্ষণ আপনার কেবল একটি নম্বর ডায়াল করার প্রয়োজন রয়েছে)। সংক্ষেপে, ইন্টারফেসগুলি কোনও বৈশিষ্ট্য ছাড়াই বিমূর্ত শ্রেণীর অনেক সহজ সংস্করণ।
এছাড়াও, নোট করুন যে আপনি চান যতটা ইন্টারফেস বাস্তবায়িত (উত্তরাধিকারী) করতে পারেন তবে আপনি কেবলমাত্র একটি একক পিতাম শ্রেণীর প্রসারিত (উত্তরাধিকারী) করতে পারেন।
আরও তথ্য
বিমূর্ত শ্রেণি বনাম ইন্টারফেস