মডিউল পাঠ (2/2)
পদ্ধতি এবং ওভারলোডিং
পদ্ধতি একটি বস্তুর আচরণ সংজ্ঞায়িত. আমরা সেগুলিকে একটি ক্লাসের মধ্যে ঘোষিত ফাংশন হিসাবে ভাবতে পারি যা অবজেক্টের ইনস্ট্যান্স ক্ষেত্র বা ইনকামিং প্যারামিটারে কাজ করে।
একটি পদ্ধতি সংজ্ঞায়িত করা
জাভাতে একটি পদ্ধতির মধ্যে রয়েছে:
- অ্যাক্সেস মডিফায়ার (যেমন,
public,private)। - রিটার্ন টাইপ (যেমন,
int,String, অথবাvoidযদি এটি কিছু ফেরত না দেয়)। camelCaseএ পদ্ধতির নাম।- প্যারামিটার বন্ধনীতে আবদ্ধ।
- পদ্ধতি বডি কোঁকড়া ধনুর্বন্ধনীতে আবদ্ধ।
class Person {
String name;
public Person(String name) {
this.name = name;
}
// Method with return type String
public String greet() {
return "Ciao, mi chiamo " + name;
}
}একটি পদ্ধতি কলিং
একটি তৈরি বস্তুর উপর একটি পদ্ধতি চালু করতে, আমরা ডট নোটেশন ব্যবহার করি .:
public class Main {
public static void main(String[] args) {
Person p = new Person("Marco");
String message = p.greet(); // Calling the method
System.out.println(message);
}
}পদ্ধতি ওভারলোডিং
জাভাতে, একই ক্লাসের মধ্যে দুই বা ততোধিক পদ্ধতির একই নাম থাকতে পারে, যতক্ষণ না তাদের একটি ভিন্ন প্যারামিটার তালিকা থাকে (সংখ্যা, ক্রম বা প্যারামিটারের প্রকারে)। এই ধারণাটি ওভারলোডিং নামে পরিচিত।
কম্পাইলার কল চলাকালীন পাস করা আর্গুমেন্টগুলি বিশ্লেষণ করে কোন পদ্ধতি চালু করতে হবে তা নির্ধারণ করে।
class Printer {
// Method to print an integer
public void printValue(int number) {
System.out.println("Intero: " + number);
}
// Overloaded method to print a string
public void printValue(String text) {
System.out.println("Testo: " + text);
}
}মান দ্বারা প্যারামিটার পাসিং
জাভাতে, সমস্ত প্যারামিটার মূল্য দ্বারা (পাস-বাই-ভ্যালু) পাস করা হয়। এর মানে হল যে আপনি যখন একটি পদ্ধতিতে একটি আর্গুমেন্ট পাস করেন, জাভা ভেরিয়েবলের মানের একটি অনুলিপি তৈরি করে এবং এটি পদ্ধতিতে পাস করে।
- আদি প্রকারের জন্য, পদ্ধতির বাইরের আসল মান কখনই পরিবর্তিত হয় না, এমনকি যদি পদ্ধতির ভিতরে পরিবর্তিত হয়।
- অবজেক্ট/রেফারেন্স-এর জন্য, বস্তুর রেফারেন্স কপি করা হয়। এর মানে হল যে আমরা মেমরি ঠিকানা পরিবর্তন করতে না পারলেও মূল বস্তুর দিকে নির্দেশ করে, আমরা এর অভ্যন্তরীণ অবস্থা (যেমন, এর ক্ষেত্রগুলি) পরিবর্তন করতে পারি এবং সেই পরিবর্তনগুলি বাইরে দৃশ্যমান হবে।
ওভারলোডিং সীমাবদ্ধতা: রিটার্ন টাইপ
এটা মনে রাখা গুরুত্বপূর্ণ যে আপনি শুধুমাত্র রিটার্ন টাইপের উপর ভিত্তি করে একটি পদ্ধতিকে ওভারলোড করতে পারবেন না। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি একটি সংকলন ত্রুটি সৃষ্টি করবে:
class Example {
// ERROR: The signature of the two methods is considered identical
public int getNumber() { return 42; }
public double getNumber() { return 42.0; }
}কম্পাইলারকে শুধুমাত্র প্যারামিটারের উপর ভিত্তি করে পদ্ধতির মধ্যে পার্থক্য করতে হবে কম্পাইল-টাইমে কোন সংস্করণটি কল করা হবে তা নির্ধারণ করতে (ওভারলোডিং কম্পাইল-টাইমে সমাধান করা হয়)।
নিজে চেষ্টা করে দেখুন
ক্যালকুলেটর ক্লাসে একটি পাবলিক int add(int a, int b) পদ্ধতি যোগ করুন যা দুটি সংখ্যার যোগফল প্রদান করে। মূল পদ্ধতিতে, এই পদ্ধতিটিকে ক্যালক অবজেক্টে কল করুন এবং একটি পূর্ণসংখ্যা ভেরিয়েবলে ফলাফল নির্ধারণ করুন।
ইঙ্গিত দেখান
পদ্ধতিটিকে `public int add(int a, int b) হিসেবে ঘোষণা করুন { রিটার্ন a + b; }` এবং এটিকে প্রধান পদ্ধতিতে `int result = calc.add(5, 10);` হিসাবে ব্যবহার করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ক্যালকুলেটর ক্লাসে অ্যাড পদ্ধতি ওভারলোড করুন অন্য একটি পদ্ধতি তৈরি করে যা দুটি ডাবল প্যারামিটার গ্রহণ করে এবং তাদের যোগফল প্রদান করে।
ইঙ্গিত দেখান
লিখুন `পাবলিক ডবল অ্যাড(ডাবল এ, ডবল বি) { রিটার্ন এ + বি; }` সরাসরি প্রথম যোগ পদ্ধতির নীচে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ক্যালকুলেটর ক্লাসে একটি পাবলিক int গুন (int a, int b) পদ্ধতি যোগ করুন যা দুটি সংখ্যার গুণফল প্রদান করে। মূল পদ্ধতিতে, এই পদ্ধতিটিকে ক্যালক অবজেক্টে কল করুন এবং ফলাফলটি একটি পূর্ণসংখ্যা ভেরিয়েবলে বরাদ্দ করুন।
ইঙ্গিত দেখান
পদ্ধতিটিকে `public int multiply(int a, int b) হিসেবে ঘোষণা করুন { রিটার্ন a * b; }` এবং এটিকে প্রধান পদ্ধতিতে `int result = calc.multiply(5, 10);` হিসাবে ব্যবহার করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ