Object-Oriented Programming (OOP) হল একটি প্রোগ্রামিং প্যারাডাইম যা ডেটা এবং মেথডকে একত্রে একটি একক ইউনিট হিসেবে "অবজেক্ট" তৈরি করতে ব্যবহৃত হয়। Java একটি সম্পূর্ণ OOP ভিত্তিক ভাষা, যেখানে ক্লাস, অবজেক্ট, ইনহেরিট্যান্স, পলিমরফিজম, অ্যাবস্ট্রাকশন এবং এনক্যাপসুলেশন ব্যবহার করা হয়। OOP কনসেপ্টের মাধ্যমে কোডকে আরও বেশি মডুলার, রিইউজেবল এবং সিস্টেমকে আরও ভালভাবে ম্যানেজ করা যায়।
Class হলো একটি ব্লুপ্রিন্ট বা টেমপ্লেট, যেখানে অবজেক্ট তৈরি করার জন্য সমস্ত প্রোপার্টি (অ্যাট্রিবিউট) এবং মেথড ডিফাইন করা হয়। Object হলো ক্লাসের একটি ইন্সট্যান্স (অথবা কপি)।
// Class Definition
class Car {
// Attributes
String make;
String model;
int year;
// Method to display car info
void displayInfo() {
System.out.println("Make: " + make);
System.out.println("Model: " + model);
System.out.println("Year: " + year);
}
}
public class Main {
public static void main(String[] args) {
// Creating objects of the class
Car car1 = new Car();
car1.make = "Toyota";
car1.model = "Corolla";
car1.year = 2020;
Car car2 = new Car();
car2.make = "Honda";
car2.model = "Civic";
car2.year = 2022;
// Calling method
car1.displayInfo();
car2.displayInfo();
}
}
Output:
Make: Toyota
Model: Corolla
Year: 2020
Make: Honda
Model: Civic
Year: 2022
Inheritance একটি OOP কনসেপ্ট যা একটি ক্লাসের বৈশিষ্ট্য এবং আচরণ (অ্যাট্রিবিউট এবং মেথড) অন্য ক্লাসে উত্তরাধিকারী হিসেবে প্রাপ্তি। এর মাধ্যমে কোড পুনঃব্যবহারযোগ্য হয়।
// Parent Class
class Animal {
void sound() {
System.out.println("Animals make sounds");
}
}
// Child Class inheriting Animal
class Dog extends Animal {
// Overriding the method
void sound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
// Creating an object of Dog class
Dog dog = new Dog();
dog.sound(); // Will call the overridden method
}
}
Output:
Dog barks
Explanation: Dog
ক্লাস Animal
ক্লাস থেকে বৈশিষ্ট্য (method sound()
) গ্রহণ করেছে এবং সেটা পুনরায় সংজ্ঞায়িত (override) করেছে।
Polymorphism হল OOP-এর একটি শক্তিশালী বৈশিষ্ট্য যেখানে একটি মেথড বা অপারেশন বিভিন্ন উপায়ে আচরণ করতে পারে।
// Parent Class
class Animal {
void sound() {
System.out.println("Animals make sounds");
}
}
// Child Class 1
class Dog extends Animal {
void sound() {
System.out.println("Dog barks");
}
}
// Child Class 2
class Cat extends Animal {
void sound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog(); // Upcasting
Animal animal2 = new Cat(); // Upcasting
// Polymorphism - Method Overriding
animal1.sound(); // Will call Dog's sound method
animal2.sound(); // Will call Cat's sound method
}
}
Output:
Dog barks
Cat meows
Explanation: এখানে Method Overriding এর মাধ্যমে, একই নামের sound()
মেথড বিভিন্ন ক্লাসে ভিন্ন ভিন্ন আচরণ প্রদর্শন করছে।
Abstraction হল একটি কনসেপ্ট যেখানে আপনি শুধুমাত্র একটি অবজেক্টের গুরুত্বপূর্ণ বৈশিষ্ট্য প্রকাশ করেন এবং অন্যান্য অপ্রয়োজনীয় তথ্য লুকিয়ে রাখেন।
// Abstract Class
abstract class Animal {
// Abstract method (does not have a body)
abstract void sound();
// Regular method
void sleep() {
System.out.println("This animal is sleeping");
}
}
// Concrete class (inherits Animal)
class Dog extends Animal {
// Implementing the abstract method
void sound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.sound(); // Calls Dog's sound method
myDog.sleep(); // Calls the regular method from Animal
}
}
Output:
Dog barks
This animal is sleeping
Explanation: এখানে Animal
ক্লাসটি অ্যাবস্ট্রাক্ট (abstract) এবং এটি sound()
মেথডের একটি সাধারণ ইন্টারফেস প্রদান করেছে, যা Dog
ক্লাসে পূর্ণরূপে বাস্তবায়িত (implemented) হয়েছে।
Encapsulation হল OOP-এর একটি মূল ধারণা যেখানে অবজেক্টের ভিতরের স্টেট (অ্যাট্রিবিউট) এবং আচরণ (মেথড) একত্রে থাকে, এবং স্টেট অ্যাক্সেস করার জন্য শুধুমাত্র নির্দিষ্ট মেথড দেওয়া হয়। এটি ডেটার সুরক্ষা নিশ্চিত করে।
class Account {
// Private attribute (encapsulated)
private double balance;
// Public method to access the private attribute
public double getBalance() {
return balance;
}
// Public method to modify the private attribute
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
// Public method to modify the private attribute
public void withdraw(double amount) {
if (amount <= balance) {
balance -= amount;
} else {
System.out.println("Insufficient funds");
}
}
}
public class Main {
public static void main(String[] args) {
Account account = new Account();
account.deposit(500); // Deposit money
System.out.println("Balance: " + account.getBalance());
account.withdraw(200); // Withdraw money
System.out.println("Balance after withdrawal: " + account.getBalance());
account.withdraw(400); // Insufficient funds
}
}
Output:
Balance: 500.0
Balance after withdrawal: 300.0
Insufficient funds
Explanation: balance
অ্যাট্রিবিউটটি private
দিয়ে এনক্যাপসুলেট করা হয়েছে এবং এই অ্যাট্রিবিউটটি পরিবর্তন করতে deposit()
এবং withdraw()
মেথড ব্যবহার করা হচ্ছে। এটি ডেটার সুরক্ষা নিশ্চিত করে, এবং অবজেক্টের ভিতরের ডেটা শুধুমাত্র নির্দিষ্ট মেথড দ্বারা অ্যাক্সেসযোগ্য হয়।
Object-Oriented Programming (OOP) এর মূল ধারণাগুলি - Encapsulation, Abstraction, Inheritance, Polymorphism - Java তে খুবই শক্তিশালী এবং কার্যকরী। এই ধারণাগুলি ব্যবহার করে আপনি প্রোগ্রামিং কোডকে আরো modular, maintainable, এবং scalable তৈরি করতে পারেন।
Java তে OOP ব্যবহার করলে কোড আরো পরিষ্কার, সুরক্ষিত এবং ব্যবস্থাপনাযোগ্য হয়ে ওঠে।
Java Class এবং Object হল Object-Oriented Programming (OOP) এর দুটি মৌলিক উপাদান। Class হল একটি ব্লুপ্রিন্ট বা টেমপ্লেট যা Object তৈরি করতে ব্যবহৃত হয়। একে সাধারণত ডেটা এবং কার্যাবলী (methods) একত্রিত করার জন্য ব্যবহার করা হয়।
এই উদাহরণে একটি Class তৈরি করা হবে এবং তার পর একটি Object এর মাধ্যমে সেই Class এর মেথড এবং ফিল্ড অ্যাক্সেস করা হবে।
// Person.java - A simple class with fields and methods
public class Person {
// Fields (Attributes)
String name;
int age;
// Constructor to initialize the object
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Method to display person's information
public void introduce() {
System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}
// Method to get the age of the person
public int getAge() {
return age;
}
// Method to set a new age
public void setAge(int newAge) {
age = newAge;
}
}
public class Main {
public static void main(String[] args) {
// Creating an object of the Person class
Person person1 = new Person("John", 25);
// Accessing object's method and field
person1.introduce(); // Calling the introduce method
// Modifying the person's age using setAge method
person1.setAge(30);
// Displaying the updated information
System.out.println("Updated age: " + person1.getAge()); // Calling the getAge method
// Creating another object of the Person class
Person person2 = new Person("Alice", 28);
person2.introduce(); // Calling the introduce method for the second object
}
}
Person
নামক একটি ক্লাস তৈরি করা হয়েছে, যেখানে দুটি ফিল্ড (fields) আছে:String name
: ব্যক্তির নামint age
: ব্যক্তির বয়সPerson(String name, int age)
তৈরি করা হয়েছে যা object initialization এর সময় name এবং age ফিল্ডকে ইনিশিয়ালাইজ করে।introduce()
: এটি ব্যক্তির নাম এবং বয়স প্রিন্ট করে।getAge()
: এটি ব্যক্তির বয়স রিটার্ন করে।setAge(int newAge)
: এটি ব্যক্তির বয়স আপডেট করে।Person person1 = new Person("John", 25);
এখানে person1
নামক একটি object তৈরি হয়েছে, এবং এটি Person
ক্লাসের ইনস্ট্যান্স।person1.introduce();
এই লাইনটি person1
অবজেক্টের introduce()
মেথডকে কল করে, যা ব্যক্তির নাম এবং বয়স প্রিন্ট করবে।person1.setAge(30);
এই লাইনটি person1
অবজেক্টের বয়স আপডেট করবে।person2
নামে আরেকটি object তৈরি করা হয়েছে এবং introduce()
মেথডটি ব্যবহার করা হয়েছে।Hello, my name is John and I am 25 years old.
Updated age: 30
Hello, my name is Alice and I am 28 years old.
person1
এবং person2
দুটি আলাদা object যা Person ক্লাসের ইনস্ট্যান্স।person1.introduce()
এবং person2.introduce()
উভয় ক্ষেত্রেই আলাদা আলাদা অবজেক্টের জন্য মেথড কল করা হয়েছে।Java তে Class এবং Object হল Object-Oriented Programming (OOP) এর দুটি প্রধান উপাদান। একটি class ডেটা এবং কার্যাবলীকে একত্রিত করে এবং objects সেই class এর বাস্তব ইন্সট্যান্স। এই প্রোগ্রামটি Java তে একটি ক্লাস তৈরি করা এবং তার অবজেক্টের মাধ্যমে ক্লাসের মেথড ও ডেটা অ্যাক্সেস করার প্রাথমিক ধারণা প্রদান করে।
Constructor একটি বিশেষ ধরনের মেথড যা একটি ক্লাসের নতুন অবজেক্ট তৈরি করার সময় স্বয়ংক্রিয়ভাবে কল হয়। এটি সাধারণত অবজেক্টের প্রাথমিক অবস্থা সেট করার জন্য ব্যবহৃত হয়। Java তে দুটি ধরনের কনস্ট্রাক্টর থাকে:
class Car {
String model;
int year;
// Default Constructor
public Car() {
model = "Unknown";
year = 2020;
}
public void display() {
System.out.println("Model: " + model);
System.out.println("Year: " + year);
}
}
public class DefaultConstructorExample {
public static void main(String[] args) {
// Creating an object using the default constructor
Car myCar = new Car();
myCar.display();
}
}
public Car()
এই কনস্ট্রাক্টরটি প্যারামিটার ছাড়া কনস্ট্রাক্টর এবং এটি ফিল্ড model
এবং year
এর ডিফল্ট মান সেট করে।model = "Unknown"
এবং year = 2020
দিয়ে ডিফল্ট মান দেওয়া হয়েছে।Model: Unknown
Year: 2020
class Car {
String model;
int year;
// Parameterized Constructor
public Car(String model, int year) {
this.model = model;
this.year = year;
}
public void display() {
System.out.println("Model: " + model);
System.out.println("Year: " + year);
}
}
public class ParameterizedConstructorExample {
public static void main(String[] args) {
// Creating an object using the parameterized constructor
Car myCar = new Car("Toyota Corolla", 2022);
myCar.display();
// Another object with different values
Car anotherCar = new Car("Honda Civic", 2021);
anotherCar.display();
}
}
public Car(String model, int year)
এই কনস্ট্রাক্টরটি দুটি প্যারামিটার নেয় (মডেল এবং বছর) এবং অবজেক্ট তৈরির সময় এই মানগুলি সেট করে।this.model
এবং this.year
: এই কনস্ট্রাক্টরের মধ্যে this
কিওয়ার্ড ব্যবহার করে বর্তমান অবজেক্টের ফিল্ডের মান সেট করা হয়েছে।Model: Toyota Corolla
Year: 2022
Model: Honda Civic
Year: 2021
Java তে আপনি Constructor Overloading করতে পারেন, যেখানে একাধিক কনস্ট্রাক্টর একই ক্লাসে থাকে কিন্তু তাদের প্যারামিটার সংখ্যা বা টাইপ ভিন্ন হয়।
class Car {
String model;
int year;
// Default Constructor
public Car() {
model = "Unknown";
year = 2020;
}
// Parameterized Constructor
public Car(String model, int year) {
this.model = model;
this.year = year;
}
public void display() {
System.out.println("Model: " + model);
System.out.println("Year: " + year);
}
}
public class ConstructorOverloadingExample {
public static void main(String[] args) {
// Calling the default constructor
Car myCar1 = new Car();
myCar1.display();
// Calling the parameterized constructor
Car myCar2 = new Car("BMW X5", 2023);
myCar2.display();
}
}
Model: Unknown
Year: 2020
Model: BMW X5
Year: 2023
Java তে কনস্ট্রাক্টর দুটি প্রধানভাবে ব্যবহৃত হয়: Default Constructor এবং Parameterized Constructor। প্রথমটি অবজেক্ট তৈরি করার সময় ডিফল্ট মান প্রদান করে, এবং দ্বিতীয়টি আপনার প্রদত্ত মান অনুযায়ী অবজেক্ট তৈরি করে। Constructor Overloading এর মাধ্যমে একাধিক কনস্ট্রাক্টর ব্যবহার করা সম্ভব, যাতে আপনি বিভিন্ন ধরনের অবজেক্ট ইনিশিয়ালাইজ করতে পারেন।
Inheritance (উত্তরাধিকার) হল একটি অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণা, যেখানে একটি ক্লাস অন্য একটি ক্লাসের বৈশিষ্ট্য (প্রপার্টি এবং মেথড) অর্জন করে। Java তে ইনহেরিটেন্স দুটি ধরনের হতে পারে: Single Inheritance এবং Multilevel Inheritance। নিচে এই দুই ধরনের ইনহেরিটেন্সের উদাহরণ দেওয়া হলো।
Single Inheritance হল এমন একটি ইনহেরিটেন্স যেখানে একটি ক্লাস অন্য একটি ক্লাস থেকে বৈশিষ্ট্য (প্রপার্টি এবং মেথড) অর্জন করে।
// Superclass (Parent Class)
class Animal {
// সাধারণ বৈশিষ্ট্য (Property)
String name;
// সাধারণ মেথড (Method)
void eat() {
System.out.println("This animal eats food.");
}
}
// Subclass (Child Class)
class Dog extends Animal {
// বাচ্চা ক্লাসে নতুন বৈশিষ্ট্য এবং মেথড
void bark() {
System.out.println("The dog barks.");
}
}
public class SingleInheritanceExample {
public static void main(String[] args) {
// বাচ্চা ক্লাসের অবজেক্ট তৈরি করা
Dog dog = new Dog();
// Superclass (Parent) এর মেথড ব্যবহার
dog.eat();
// Subclass (Child) এর মেথড ব্যবহার
dog.bark();
}
}
আউটপুট:
This animal eats food.
The dog barks.
ব্যাখ্যা:
Animal
হল সুপার ক্লাস (প্যারেন্ট ক্লাস), যার মধ্যে eat()
মেথড রয়েছে।Dog
হল সাব ক্লাস (চাইল্ড ক্লাস), যা Animal
থেকে eat()
মেথড এবং name
প্রপার্টি ইনহেরিট করেছে এবং নিজের একটি নতুন মেথড bark()
যুক্ত করেছে।Dog
ক্লাস একটি ইনস্ট্যান্স তৈরি করেছে এবং প্যারেন্ট ক্লাসের বৈশিষ্ট্য এবং মেথড ব্যবহার করেছে।Multilevel Inheritance হল এমন একটি ইনহেরিটেন্স যেখানে একটি ক্লাস অন্য ক্লাস থেকে ইনহেরিট করে, এবং সেই ইনহেরিট করা ক্লাস আবার অন্য ক্লাস থেকে ইনহেরিট করে। অর্থাৎ, এটি একাধিক স্তরের ইনহেরিটেন্স।
// Superclass (Grandparent Class)
class Animal {
void eat() {
System.out.println("This animal eats food.");
}
}
// Intermediate class (Parent Class)
class Dog extends Animal {
void bark() {
System.out.println("The dog barks.");
}
}
// Subclass (Child Class)
class Puppy extends Dog {
void sleep() {
System.out.println("The puppy sleeps.");
}
}
public class MultilevelInheritanceExample {
public static void main(String[] args) {
// Puppy ক্লাসের অবজেক্ট তৈরি করা
Puppy puppy = new Puppy();
// Grandparent, Parent, এবং Child ক্লাসের মেথড ব্যবহার
puppy.eat(); // Animal ক্লাস থেকে ইনহেরিট করা মেথড
puppy.bark(); // Dog ক্লাস থেকে ইনহেরিট করা মেথড
puppy.sleep(); // Puppy ক্লাসের মেথড
}
}
আউটপুট:
This animal eats food.
The dog barks.
The puppy sleeps.
ব্যাখ্যা:
Animal
হল সুপার ক্লাস (গ্র্যান্ডপ্যারেন্ট ক্লাস), যার মধ্যে eat()
মেথড রয়েছে।Dog
হল ইন্টারমিডিয়েট ক্লাস (প্যারেন্ট ক্লাস), যা Animal
থেকে eat()
মেথড ইনহেরিট করেছে এবং নিজের একটি নতুন মেথড bark()
যোগ করেছে।Puppy
হল সাব ক্লাস (চাইল্ড ক্লাস), যা Dog
থেকে bark()
মেথড ইনহেরিট করেছে এবং নিজের নতুন মেথড sleep()
যোগ করেছে।Puppy
ক্লাসের অবজেক্টটি eat()
, bark()
, এবং sleep()
মেথডগুলো ব্যবহার করতে পারছে।class Dog extends Animal {}
class Puppy extends Dog {}
এই দুই ধরনের ইনহেরিটেন্স Java-তে কোড পুনঃব্যবহার এবং ওভারলোডিংয়ের ক্ষেত্রে বেশ গুরুত্বপূর্ণ এবং সহজে কোড পরিচালনা করতে সাহায্য করে।
Method Overloading এবং Method Overriding হল দুইটি গুরুত্বপূর্ণ কনসেপ্ট যা Polymorphism এর অধীনে কাজ করে।
Method Overloading হল একই মেথড নামের জন্য ভিন্ন ভিন্ন প্যারামিটার ব্যবহার করা। এটি রানটাইমের আগে কম্পাইল টাইমে ঘটে।
class Calculator {
// মেথড ওভারলোডিং - দুটি পূর্ণসংখ্যার যোগফল
public int add(int a, int b) {
return a + b;
}
// মেথড ওভারলোডিং - তিনটি পূর্ণসংখ্যার যোগফল
public int add(int a, int b, int c) {
return a + b + c;
}
// মেথড ওভারলোডিং - দুটি দশমিক মানের যোগফল
public double add(double a, double b) {
return a + b;
}
}
public class MethodOverloadingExample {
public static void main(String[] args) {
Calculator calc = new Calculator();
// মেথড ওভারলোডিং কল
System.out.println("Sum of 2 numbers: " + calc.add(10, 20)); // প্যারামিটার (int, int)
System.out.println("Sum of 3 numbers: " + calc.add(10, 20, 30)); // প্যারামিটার (int, int, int)
System.out.println("Sum of 2 decimal numbers: " + calc.add(10.5, 20.5)); // প্যারামিটার (double, double)
}
}
আউটপুট:
Sum of 2 numbers: 30
Sum of 3 numbers: 60
Sum of 2 decimal numbers: 31.0
add
নামক একাধিক মেথড রয়েছে, কিন্তু তাদের প্যারামিটার ভিন্ন।Method Overriding হল inheritance এর মধ্যে যেখানে subclass (পর্ণপ্রাপ্ত ক্লাস) তার superclass এর মেথডের আচরণ পরিবর্তন করে (redefine)।
class Animal {
// Superclass মেথড
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
// Method Overriding: Subclass মেথড
@Override
public void sound() {
System.out.println("Dog barks");
}
}
public class MethodOverridingExample {
public static void main(String[] args) {
Animal animal = new Animal();
animal.sound(); // Animal এর মেথড কল হবে
Dog dog = new Dog();
dog.sound(); // Dog এর মেথড কল হবে
}
}
আউটপুট:
Animal makes a sound
Dog barks
Animal
ক্লাসে একটি sound()
মেথড রয়েছে, যা Dog
ক্লাসে override করা হয়েছে।@Override
অ্যানোটেশনটি ব্যবহার করা হয়েছে যা নিশ্চিত করে যে মেথডটি সঠিকভাবে override করা হচ্ছে।animal.sound();
এ Animal
ক্লাসের sound()
মেথড কল হচ্ছে, এবং dog.sound();
এ Dog
ক্লাসের sound()
মেথড কল হচ্ছে।বিষয় | Method Overloading | Method Overriding |
---|---|---|
অবস্থান | একই ক্লাসে (Same Class) | superclass এবং subclass এর মধ্যে (Superclass and Subclass) |
মেথড সিগনেচার | প্যারামিটার ভিন্ন হতে হবে (parameters must be different) | প্যারামিটার এবং রিটার্ন টাইপ একই থাকতে হবে (must have same parameters and return type) |
কখন ঘটে | কম্পাইল টাইমে (Compile-time polymorphism) | রানটাইম টাইমে (Runtime polymorphism) |
কিভাবে কাজ করে | একই নামের একাধিক মেথড, কিন্তু প্যারামিটার ভিন্ন (Same method name but different parameters) | superclass এর মেথডকে subclass এ override (Redefine the superclass method in subclass) |
এই কনসেপ্টগুলি Java প্রোগ্রামিং এর গুরুত্বপূর্ণ অংশ এবং এগুলি ব্যবহার করে আরও শক্তিশালী এবং নমনীয় কোড লিখতে সাহায্য পাওয়া যায়।
Encapsulation (এনক্যাপসুলেশন) হল একটি অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং (OOP) কনসেপ্ট যেখানে ক্লাসের ভেরিয়েবলগুলিকে private ঘোষণা করা হয় এবং তাদের মান নির্ধারণ বা পুনরুদ্ধার করার জন্য getter এবং setter মেথড তৈরি করা হয়। এটি data hiding এর একটি অংশ, যেখানে ক্লাসের অভ্যন্তরীণ ডেটা বাইরে থেকে সরাসরি অ্যাক্সেস করা সম্ভব হয় না। এই পদ্ধতি ডেটাকে সুরক্ষিত এবং নিয়ন্ত্রিত উপায়ে অ্যাক্সেস করতে সাহায্য করে।
// Class that demonstrates Encapsulation
public class Person {
// Private fields (Data Hiding)
private String name;
private int age;
// Getter method for name
public String getName() {
return name;
}
// Setter method for name
public void setName(String name) {
this.name = name;
}
// Getter method for age
public int getAge() {
return age;
}
// Setter method for age
public void setAge(int age) {
if (age > 0) { // Validation check
this.age = age;
} else {
System.out.println("Age cannot be negative or zero.");
}
}
// Method to display Person's details
public void displayPersonInfo() {
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
}
public class EncapsulationExample {
public static void main(String[] args) {
// Create a Person object
Person person = new Person();
// Using setter methods to set values
person.setName("John Doe");
person.setAge(30);
// Using getter methods to access values
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
// Displaying the Person info using a method
person.displayPersonInfo();
// Invalid age (negative value) - Demonstrates validation in setter
person.setAge(-5); // This will not change the age as it's invalid
}
}
name
এবং age
ফিল্ডগুলো private হিসেবে ডিক্লেয়ার করা হয়েছে, যা বাইরের কোড থেকে সরাসরি অ্যাক্সেস করা যাবে না। এটি data hiding নিশ্চিত করে।getName()
এবং getAge()
মেথডগুলো ব্যবহার করে আমরা name
এবং age
ফিল্ডের মান পেতে পারি। এই মেথডগুলি public হওয়ায় বাইরের কোড থেকে ডেটা অ্যাক্সেস করা সম্ভব হয়, তবে direct access করা যায় না।setName()
এবং setAge()
মেথডগুলো ব্যবহার করে name
এবং age
ফিল্ডের মান সেট করা যায়। setAge()
মেথডে একটি validation চেক রয়েছে, যা নিশ্চিত করে যে বয়স নেতিবাচক বা শূন্য হতে পারে না।setAge()
মেথডের মধ্যে validation চেক করা হয়েছে, যাতে কোনো অবৈধ মান (যেমন নেতিবাচক বয়স) সেট করা না হয়।Name: John Doe
Age: 30
Name: John Doe
Age: 30
Name: John Doe
Age: 30
Age cannot be negative or zero.
Read more