Groovy একটি ডাইনামিক প্রোগ্রামিং ভাষা যা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণার উপর ভিত্তি করে তৈরি। Groovy তে OOP এর মূল নীতিগুলি যেমন ইনক্যাপসুলেশন, এবস্ট্রাকশন, পলিমরফিজম, এবং ইনহেরিটেন্স সহজেই প্রয়োগ করা যায়। Groovy তে অবজেক্ট-ওরিয়েন্টেড ধারণাগুলি Java এর মতোই কাজ করে, তবে Groovy এর সিনট্যাক্স অনেক সহজ এবং কোডের লেখা আরও সংক্ষিপ্ত ও পড়তে সহজ।
এখানে Groovy তে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর মূল ধারণাগুলি আলোচনা করা হয়েছে।
Groovy তে ক্লাস তৈরি করা খুবই সহজ। একটি ক্লাস একটি টেমপ্লেট বা ব্লুপ্রিন্ট হিসেবে কাজ করে, যা অবজেক্ট তৈরি করতে ব্যবহৃত হয়। Groovy তে ক্লাসের মধ্যে মেথড, প্রপার্টি এবং কন্সট্রাক্টর থাকতে পারে।
Groovy তে ক্লাস ডিফাইন করার জন্য class
কীওয়ার্ড ব্যবহার করা হয়।
class Person {
String name
int age
// Constructor
Person(String name, int age) {
this.name = name
this.age = age
}
// Method
def greet() {
println "Hello, my name is $name and I am $age years old."
}
}
এখানে, Person
নামে একটি ক্লাস তৈরি করা হয়েছে, যার মধ্যে দুটি প্রপার্টি (name
এবং age
) এবং একটি মেথড (greet
) রয়েছে।
একবার ক্লাস তৈরি হলে, আপনি সেই ক্লাসের অবজেক্ট তৈরি করতে পারেন।
def person = new Person("John", 30)
person.greet() // Output: Hello, my name is John and I am 30 years old.
এখানে, Person
ক্লাসের একটি অবজেক্ট person
তৈরি করা হয়েছে এবং greet()
মেথড কল করা হয়েছে।
Groovy তে ইনহেরিটেন্স ব্যবহার করে একটি ক্লাস অন্য একটি ক্লাস থেকে প্রপার্টি এবং মেথড উত্তরাধিকারসূত্রে পেতে পারে। এটি কোড পুনঃব্যবহার এবং মডুলার ডিজাইন তৈরি করতে সহায়তা করে।
class Animal {
String name
def speak() {
println "The animal speaks."
}
}
class Dog extends Animal {
def speak() {
println "The dog barks."
}
}
def dog = new Dog(name: "Rex")
dog.speak() // Output: The dog barks.
এখানে, Dog
ক্লাস Animal
ক্লাস থেকে ইনহেরিট করেছে। Dog
ক্লাসে speak()
মেথডটি ওভাররাইড করা হয়েছে।
Groovy তে আপনি super
কিওয়ার্ড ব্যবহার করে সুপার ক্লাসের মেথড বা কন্সট্রাক্টর কল করতে পারেন।
class Dog extends Animal {
Dog(String name) {
super(name)
}
def speak() {
super.speak() // Calling the speak method of Animal class
println "The dog barks."
}
}
def dog = new Dog("Rex")
dog.speak()
এখানে, Dog
ক্লাসের speak()
মেথডে super.speak()
ব্যবহার করে সুপার ক্লাস Animal
এর speak()
মেথড কল করা হয়েছে।
পলিমরফিজম হল এমন একটি ধারণা, যার মাধ্যমে একাধিক ক্লাস একই নামের মেথড ব্যবহার করতে পারে, তবে তাদের কার্যকারিতা ভিন্ন হতে পারে। Groovy তে পলিমরফিজম মেথড ওভারলোডিং এবং মেথড ওভাররাইডিং এর মাধ্যমে অর্জিত হয়।
class Animal {
def sound() {
println "Animal makes a sound."
}
}
class Dog extends Animal {
@Override
def sound() {
println "Dog barks."
}
}
class Cat extends Animal {
@Override
def sound() {
println "Cat meows."
}
}
def animal = new Dog()
animal.sound() // Output: Dog barks.
animal = new Cat()
animal.sound() // Output: Cat meows.
এখানে, Dog
এবং Cat
ক্লাস দুটি sound()
মেথডকে ওভাররাইড করেছে। যদিও sound()
মেথডের নাম একই, তাদের কার্যকারিতা ভিন্ন।
ইনক্যাপসুলেশন হল একটি ধারণা যেখানে ডেটা (প্রপার্টি) এবং কার্যক্রম (মেথড) একসাথে গ্রুপ করা হয় এবং বাইরের কোড থেকে ডেটা অ্যাক্সেস সীমিত করা হয়। Groovy তে আপনি private
, protected
, এবং public
অ্যাক্সেস মডিফায়ার ব্যবহার করে ইনক্যাপসুলেশন প্রয়োগ করতে পারেন।
class BankAccount {
private double balance = 0.0 // Private variable
def deposit(double amount) {
if (amount > 0) {
balance += amount
}
}
def getBalance() {
return balance
}
}
def account = new BankAccount()
account.deposit(100)
println account.getBalance() // Output: 100.0
এখানে, balance
প্রপার্টি private
রাখা হয়েছে, যার মানে হলো বাইরের কোড থেকে এটি সরাসরি অ্যাক্সেস করা যাবে না। তবে, আমরা deposit()
এবং getBalance()
মেথডের মাধ্যমে এর মান পরিবর্তন এবং অ্যাক্সেস করতে পারি।
অ্যাবস্ট্রাকশন হল এমন একটি ধারণা যার মাধ্যমে আপনি একটি ক্লাসের অপ্রয়োজনীয় অংশ লুকিয়ে রাখেন এবং কেবলমাত্র প্রয়োজনীয় বৈশিষ্ট্যগুলো প্রদর্শন করেন। Groovy তে এটি সাধারণত অ্যাবস্ট্রাক্ট ক্লাস বা ইন্টারফেস ব্যবহার করে অর্জন করা হয়।
abstract class Animal {
abstract def sound()
def sleep() {
println "Sleeping..."
}
}
class Dog extends Animal {
def sound() {
println "Bark"
}
}
def dog = new Dog()
dog.sound() // Output: Bark
dog.sleep() // Output: Sleeping...
এখানে, Animal
একটি অ্যাবস্ট্রাক্ট ক্লাস যা sound()
মেথডের একটি সিগনেচার সংরক্ষণ করে। Dog
ক্লাস এই মেথডটি ওভাররাইড করে তার বাস্তবায়ন প্রদান করেছে।
Groovy তে কন্সট্রাক্টর তৈরি করা খুবই সহজ। সাধারণত কন্সট্রাক্টর ব্যবহার করা হয় অবজেক্ট তৈরির সময় প্রপার্টি ইনিশিয়ালাইজ করতে।
class Person {
String name
int age
// Constructor
Person(String name, int age) {
this.name = name
this.age = age
}
def introduce() {
println "My name is $name and I am $age years old."
}
}
def person = new Person("John", 30)
person.introduce() // Output: My name is John and I am 30 years old.
এখানে, Person
ক্লাসের কন্সট্রাক্টরটি দুটি আর্গুমেন্ট গ্রহণ করে এবং ক্লাসের প্রপার্টি ইনিশিয়ালাইজ করে।
Groovy তে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) সম্পূর্ণভাবে সমর্থিত। ক্লাস এবং অবজেক্ট এর মাধ্যমে আপনি ডেটা এবং কার্যক্রম ম্যানেজ করতে পারেন, ইনহেরিটেন্স এবং পলিমরফিজম এর মাধ্যমে কোড পুন
ঃব্যবহারযোগ্য ও নমনীয় করতে পারেন, এবং ইনক্যাপসুলেশন এবং অ্যাবস্ট্রাকশন এর মাধ্যমে ডেটা নিরাপত্তা এবং সহজ ব্যবহারের সুবিধা পেতে পারেন। Groovy তে OOP এর সুবিধাগুলি সহজ এবং কার্যকরীভাবে প্রয়োগ করা যায়, যা Java এর তুলনায় আরও সহজ ও শক্তিশালী।
Groovy তে Class এবং Object এর ধারণা মূলত Object-Oriented Programming (OOP) এর উপর ভিত্তি করে। Class এবং Object ব্যবহার করে আমরা বাস্তব জীবনের বিভিন্ন বিষয় বা ধারণাকে কোডের মাধ্যমে মডেল করতে পারি।
Class হলো একটি ব্লুপ্রিন্ট বা কাঠামো যা কোনো বস্তু বা বিষয়ের বৈশিষ্ট্য এবং আচরণ সংজ্ঞায়িত করে। Class এর মধ্যে properties (অর্থাৎ ভেরিয়েবল) এবং methods (অর্থাৎ ফাংশন) থাকতে পারে, যা একটি নির্দিষ্ট ধরনের অবজেক্টকে নির্দেশ করে।
Groovy তে একটি Class ডিক্লার করতে class
কীওয়ার্ড ব্যবহার করা হয়। Class এর ভেতরে properties এবং methods ডিক্লার করা হয়।
class Person {
String name
int age
def introduce() {
println "Hello, my name is $name and I am $age years old."
}
}
উপরে Person
নামে একটি Class তৈরি করা হয়েছে, যেখানে name
এবং age
নামে দুইটি properties আছে এবং introduce()
নামে একটি method রয়েছে।
Object হলো Class এর একটি নির্দিষ্ট উদাহরণ বা instance। অর্থাৎ, Object হল একটি বাস্তবজীবনের কোনো নির্দিষ্ট বিষয় বা বস্তু যা Class দ্বারা মডেল করা হয়। Object তৈরি করতে new
কীওয়ার্ড ব্যবহার করা হয়।
def person1 = new Person(name: "Alice", age: 25)
def person2 = new Person(name: "Bob", age: 30)
person1.introduce() // Output: Hello, my name is Alice and I am 25 years old.
person2.introduce() // Output: Hello, my name is Bob and I am 30 years old.
এখানে person1
এবং person2
হল Person
Class এর Object, যেখানে name
এবং age
প্রপার্টিগুলির মান সেট করা হয়েছে এবং introduce()
মেথড কল করা হয়েছে।
Constructor হলো একটি বিশেষ মেথড যা Object তৈরি করার সময় প্রাথমিক মান সেট করতে সাহায্য করে। Groovy তে Constructor ডিফাইন করা ঐচ্ছিক, কারণ Groovy Class এর জন্য একটি ডিফল্ট কন্সট্রাক্টর তৈরি করে। তবে, আপনি চাইলে নিজস্ব Constructor ও তৈরি করতে পারেন।
class Person {
String name
int age
// Custom Constructor
Person(String name, int age) {
this.name = name
this.age = age
}
def introduce() {
println "Hello, my name is $name and I am $age years old."
}
}
def person = new Person("Charlie", 35)
person.introduce() // Output: Hello, my name is Charlie and I am 35 years old.
এখানে Person
Class এ একটি Custom Constructor তৈরি করা হয়েছে যা name
এবং age
প্রপার্টি সেট করে।
Properties হল একটি Class এর ভেরিয়েবল যা Object এর বৈশিষ্ট্য ধারণ করে। Methods হলো ফাংশন যা Class এর আচরণ নির্দেশ করে। Groovy তে Properties এবং Methods সহজেই ডিক্লার করা যায়।
class Car {
String brand
int year
def start() {
println "$brand car started."
}
}
def car = new Car(brand: "Toyota", year: 2022)
car.start() // Output: Toyota car started.
Encapsulation হলো Object Oriented Programming এর একটি মূলনীতি যা Class এর properties এবং methods কে প্যাকেজ আকারে রাখে এবং তাদেরকে সরাসরি access না করে method এর মাধ্যমে access করতে উৎসাহিত করে। Groovy তে private access modifier দিয়ে properties কে encapsulate করা হয়।
class BankAccount {
private double balance = 0.0
def deposit(double amount) {
balance += amount
}
def getBalance() {
return balance
}
}
def account = new BankAccount()
account.deposit(500)
println account.getBalance() // Output: 500.0
এখানে balance
প্রপার্টিকে private
করে রাখা হয়েছে এবং deposit
এবং getBalance
মেথডের মাধ্যমে এক্সেস করা হচ্ছে।
Groovy তে Inheritance ব্যবহার করে একটি Class অন্য একটি Class এর বৈশিষ্ট্য এবং আচরণ উত্তরাধিকারসূত্রে পেতে পারে। এটি OOP এর একটি মূলনীতি, যা কোডের পুনঃব্যবহারকে উৎসাহিত করে।
class Animal {
def eat() {
println "Eating..."
}
}
class Dog extends Animal {
def bark() {
println "Barking..."
}
}
def dog = new Dog()
dog.eat() // Output: Eating...
dog.bark() // Output: Barking...
এখানে Dog
Class Animal
Class কে extends করেছে, তাই Dog
Class Animal
এর মেথড eat()
ব্যবহার করতে পারছে।
Groovy তে Class এবং Object এর মাধ্যমে OOP এর ধারণাগুলি সহজে প্রয়োগ করা যায়। Groovy তে Class তৈরি করে তার প্রোপার্টি এবং মেথড সংজ্ঞায়িত করা হয় এবং Object এর মাধ্যমে তাদের ব্যবহার করা হয়। Class এবং Object ব্যবহার করে Encapsulation, Inheritance এর মতো OOP এর মূলনীতিগুলি সহজেই বাস্তবায়ন করা যায়।
Groovy তে properties এবং methods ডিফাইন করা এবং ব্যবহার করা খুবই সহজ এবং সাধারণ। Groovy তে getter এবং setter মেথডগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়, তাই আপনি সহজেই প্রপার্টি ডিক্লেয়ার করতে পারেন এবং মেথড ডিফাইন করতে পারেন। এখানে properties এবং methods কীভাবে ডিক্লেয়ার এবং ব্যবহার করা হয় তা বিস্তারিতভাবে আলোচনা করা হলো।
Properties হল সেই সদস্য ভেরিয়েবলগুলি (fields) যা ক্লাসের অংশ এবং তার মান সরাসরি অ্যাক্সেস করা যায়। Groovy তে, প্রপার্টি ডিক্লেয়ার করার সময় getter এবং setter মেথডগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়।
Groovy তে একটি প্রপার্টি সাধারণত def
কীওয়ার্ড দিয়ে ডিফাইন করা হয় এবং এর জন্য getter এবং setter স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়।
Property Declaration এর উদাহরণ:
class Person {
def name // প্রপার্টি ডিক্লেয়ারেশন
def age
}
def person = new Person(name: "Alice", age: 25)
println person.name // আউটপুট: Alice
println person.age // আউটপুট: 25
এখানে:
name
এবং age
হল Person
ক্লাসের প্রপার্টি।new Person(name: "Alice", age: 25)
দিয়ে একটি অবজেক্ট তৈরি করেছি এবং প্রপার্টির মান অ্যাক্সেস করেছি।Groovy তে প্রপার্টি ডিফাইন করার সময় getter এবং setter মেথডগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়, তাই আপনি সরাসরি প্রপার্টির মান অ্যাসাইন বা অ্যাক্সেস করতে পারেন।
class Person {
private String name
// Getter
String getName() {
return name
}
// Setter
void setName(String name) {
this.name = name
}
}
def person = new Person()
person.setName("John")
println person.getName() // আউটপুট: John
এখানে, getName()
এবং setName()
মেথডগুলো প্রপার্টি name
এর জন্য getter এবং setter হিসেবে কাজ করছে।
Methods হল ক্লাসের মধ্যে ডিফাইন করা ফাংশন যা এক বা একাধিক কাজ সম্পন্ন করে। Groovy তে মেথড ডিফাইন করার জন্য def
কীওয়ার্ড ব্যবহৃত হয় এবং তারপরে মেথডের নাম, প্যারামিটার এবং কোডের ব্লক থাকে।
Groovy তে মেথড ডিফাইন করার জন্য সাধারণত def
কীওয়ার্ড ব্যবহৃত হয়, এবং তারপরে মেথডের নাম ও প্যারামিটার দেওয়া হয়।
Method Declaration এর উদাহরণ:
class Person {
def name
def age
// মেথড ডিক্লেয়ার করা
def greet() {
println "Hello, my name is $name and I am $age years old."
}
}
def person = new Person(name: "Alice", age: 30)
person.greet() // আউটপুট: Hello, my name is Alice and I am 30 years old.
এখানে:
greet()
একটি মেথড যা name
এবং age
প্রপার্টি থেকে মান নিয়ে একটি গ্রীটিং বার্তা প্রিন্ট করে।greet()
মেথডকে কল করার মাধ্যমে প্রপার্টির মান প্রদর্শন করা হয়েছে।class Calculator {
// দুটি সংখ্যার যোগফল বের করার মেথড
def add(a, b) {
return a + b
}
}
def calc = new Calculator()
def result = calc.add(5, 3)
println result // আউটপুট: 8
এখানে:
add(a, b)
একটি মেথড যা দুটি প্যারামিটার নিয়ে তাদের যোগফল রিটার্ন করে।class Calculator {
// দুটি সংখ্যার গুণফল বের করার মেথড
def multiply(a, b) {
return a * b
}
}
def calc = new Calculator()
def result = calc.multiply(4, 3)
println result // আউটপুট: 12
এখানে:
multiply(a, b)
মেথড দুটি প্যারামিটার নেয় এবং তাদের গুণফল রিটার্ন করে।বৈশিষ্ট্য | Properties | Methods |
---|---|---|
ডিফাইনেশন | ভেরিয়েবল হিসাবে ডিফাইন করা হয় | ফাংশন হিসাবে ডিফাইন করা হয় |
অ্যাক্সেস | সরাসরি মান অ্যাক্সেস করা যায় | ফাংশন কল করে কাজ সম্পাদন করা হয় |
টাইপ | প্রপার্টি সাধারণত ভেরিয়েবল | মেথড সাধারণত ফাংশন |
Getter / Setter | স্বয়ংক্রিয়ভাবে তৈরি হয় | মেথডের মধ্যে ডিফাইন করা হয় |
উদাহরণ | def name | def greet() |
def
ব্যবহার করা হয় এবং মেথডের মধ্যে এক বা একাধিক প্যারামিটার ব্যবহার করা যেতে পারে।Groovy তে প্রপার্টি এবং মেথডের ব্যবহার খুবই সহজ এবং কার্যকর, যা কোড লেখাকে আরও পরিষ্কার ও দ্রুততর করে।
Constructors এবং Default Parameters দুটি গুরুত্বপূর্ণ ধারণা যা Groovy তে ক্লাস এবং অবজেক্ট তৈরি করার সময় ব্যবহৃত হয়। এগুলি কোড লেখার সময় লজিকালভাবে সুবিধাজনক হয় এবং কোডের পুনঃব্যবহারযোগ্যতা এবং নমনীয়তা বৃদ্ধি করে।
Constructor একটি বিশেষ ধরনের মেথড যা একটি ক্লাসের নতুন অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়। এটি সাধারণত ক্লাসের নামের সাথে মিল হয় এবং কোন ভ্যালু বা প্যারামিটার ছাড়া অবজেক্ট তৈরি করা হলে ডিফল্ট কন্সট্রাক্টর ব্যবহার করা হয়। Groovy তে কন্সট্রাক্টরের ব্যবহার Java এর মতোই, তবে Groovy এর বৈশিষ্ট্য অনুযায়ী এটি আরও সহজ এবং সংক্ষিপ্ত।
Groovy তে, আপনি কন্সট্রাক্টর ডিফাইন করতে পারেন যেটি প্যারামিটার গ্রহণ করে এবং অবজেক্ট ইনিশিয়ালাইজ করে। যদি আপনি কন্সট্রাক্টর ডিফাইন না করেন, Groovy স্বয়ংক্রিয়ভাবে একটি ডিফল্ট কন্সট্রাক্টর প্রদান করে।
class Person {
String name
int age
// Constructor
Person(String name, int age) {
this.name = name
this.age = age
}
// Method to display details
void displayDetails() {
println "Name: $name, Age: $age"
}
}
def person = new Person("John", 30)
person.displayDetails() // Output: Name: John, Age: 30
এখানে Person
ক্লাসে একটি কন্সট্রাক্টর রয়েছে যা name
এবং age
প্যারামিটার গ্রহণ করে। যখন new Person("John", 30)
কল করা হয়, তখন এই কন্সট্রাক্টর ব্যবহার করে অবজেক্ট তৈরি হয়।
যদি আপনি কন্সট্রাক্টর না দেন, তবে Groovy স্বয়ংক্রিয়ভাবে একটি ডিফল্ট কন্সট্রাক্টর প্রদান করবে যা কোনো প্যারামিটার গ্রহণ করবে না।
class Person {
String name
int age
// Default constructor
}
def person = new Person() // No parameters, default constructor used
person.name = "Alice"
person.age = 25
println "Name: $person.name, Age: $person.age" // Output: Name: Alice, Age: 25
এখানে, Person
ক্লাসে কোনো কন্সট্রাক্টর ডিফাইন না করায় Groovy একটি ডিফল্ট কন্সট্রাক্টর ব্যবহার করেছে এবং পরে ভেরিয়েবলগুলির মান সেট করা হয়েছে।
Groovy তে আপনি default parameters ব্যবহার করতে পারেন, যা ফাংশন বা কন্সট্রাক্টরের প্যারামিটারগুলির জন্য ডিফল্ট মান প্রদান করে। যদি কোনো প্যারামিটার ফাংশন বা কন্সট্রাক্টর কল করার সময় প্রদান না করা হয়, তাহলে ডিফল্ট মানটি ব্যবহার করা হবে।
class Person {
String name
int age
// Constructor with default parameters
Person(String name = "Unknown", int age = 18) {
this.name = name
this.age = age
}
void displayDetails() {
println "Name: $name, Age: $age"
}
}
def person1 = new Person("John", 30)
def person2 = new Person()
person1.displayDetails() // Output: Name: John, Age: 30
person2.displayDetails() // Output: Name: Unknown, Age: 18
এখানে, Person
ক্লাসের কন্সট্রাক্টরে ডিফল্ট মান দেওয়া হয়েছে:
name
এর ডিফল্ট মান "Unknown"
age
এর ডিফল্ট মান 18
যখন new Person()
কল করা হয়, কোনো প্যারামিটার না দেয়ার কারণে ডিফল্ট মানগুলি ব্যবহার করা হয়। আর যখন new Person("John", 30)
কল করা হয়, তখন প্রদত্ত মানগুলোই ব্যবহার করা হয়।
Groovy তে ফাংশনেও আপনি ডিফল্ট প্যারামিটার ব্যবহার করতে পারেন। এর ফলে ফাংশনে কোনো প্যারামিটার না দেওয়া হলে ডিফল্ট মান ব্যবহার করা হবে।
def greet(String name = "Guest") {
println "Hello, $name!"
}
greet("John") // Output: Hello, John!
greet() // Output: Hello, Guest!
এখানে, greet
ফাংশনে name
প্যারামিটারের জন্য একটি ডিফল্ট মান "Guest"
দেওয়া হয়েছে। যদি ফাংশন কল করার সময় name
প্রদান করা না হয়, তাহলে "Guest"
ব্যবহার হবে।
Groovy তে, যেমন Java তে, কন্সট্রাক্টর ওভারলোডিং সম্ভব। আপনি একাধিক কন্সট্রাক্টর ডিফাইন করতে পারেন যা ভিন্ন ভিন্ন প্যারামিটার সংখ্যা বা টাইপ গ্রহণ করবে। তবে, Groovy তে এটি Java এর মতো কঠিন নয়, কারণ Groovy স্বয়ংক্রিয়ভাবে কমপ্লেক্স কন্সট্রাক্টরও পরিচালনা করতে পারে।
class Person {
String name
int age
// First constructor
Person(String name) {
this.name = name
this.age = 18 // Default age
}
// Second constructor
Person(String name, int age) {
this.name = name
this.age = age
}
void displayDetails() {
println "Name: $name, Age: $age"
}
}
def person1 = new Person("John")
def person2 = new Person("Alice", 30)
person1.displayDetails() // Output: Name: John, Age: 18
person2.displayDetails() // Output: Name: Alice, Age: 30
এখানে, Person
ক্লাসে দুটি কন্সট্রাক্টর রয়েছে:
name
গ্রহণ করে এবং age
এর ডিফল্ট মান প্রদান করে।name
এবং age
উভয়ই গ্রহণ করে।এভাবে Groovy তে constructors এবং default parameters ব্যবহার করে কোডকে আরও নমনীয়, সহজ এবং পুনঃব্যবহারযোগ্য করা যায়।
Groovy তে Inheritance, Polymorphism, এবং Interfaces অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর মূল নীতি যা কোড পুনঃব্যবহারযোগ্য, মডুলার এবং ডায়নামিক প্রোগ্রামিংয়ের জন্য সহায়ক। Groovy তে এই ধারণাগুলি Java এর মতো কাজ করে, তবে এর সিনট্যাক্স অনেকটা সহজ ও সংক্ষিপ্ত।
এখানে Inheritance, Polymorphism, এবং Interfaces সম্পর্কে বিস্তারিত আলোচনা করা হলো।
ইনহেরিটেন্স হল একটি অবজেক্ট-ওরিয়েন্টেড ধারণা যেখানে একটি ক্লাস অন্য ক্লাসের বৈশিষ্ট্য (প্রপার্টি এবং মেথড) উত্তরাধিকারসূত্রে পায়। এটি কোড পুনঃব্যবহারযোগ্যতার জন্য সহায়ক, কারণ আমরা বিদ্যমান কোডের উপর নতুন বৈশিষ্ট্য বা ফাংশনালিটি যোগ করতে পারি।
// Superclass
class Animal {
String name
def speak() {
println "$name makes a sound"
}
}
// Subclass
class Dog extends Animal {
def speak() {
println "$name barks"
}
}
def dog = new Dog(name: "Rex")
dog.speak() // Output: Rex barks
এখানে, Dog
ক্লাস Animal
ক্লাস থেকে ইনহেরিট করেছে এবং speak()
মেথডটি ওভাররাইড করেছে।
আপনি super
কিওয়ার্ড ব্যবহার করে সুপার ক্লাসের মেথড অথবা কন্সট্রাক্টর কল করতে পারেন।
class Animal {
String name
Animal(String name) {
this.name = name
}
def speak() {
println "$name makes a sound"
}
}
class Dog extends Animal {
Dog(String name) {
super(name)
}
def speak() {
super.speak() // Calling the speak method of Animal class
println "$name barks"
}
}
def dog = new Dog("Rex")
dog.speak()
এখানে, Dog
ক্লাসে super.speak()
ব্যবহার করে Animal
ক্লাসের speak()
মেথড কল করা হয়েছে।
পলিমরফিজম হল এমন একটি ধারণা যেখানে একাধিক ক্লাস একই নামের মেথড ব্যবহার করতে পারে, তবে তাদের কার্যকারিতা ভিন্ন হতে পারে। Groovy তে পলিমরফিজম মেথড ওভাররাইডিং এবং ওভারলোডিং এর মাধ্যমে অর্জিত হয়।
class Animal {
def sound() {
println "Animal makes a sound"
}
}
class Dog extends Animal {
@Override
def sound() {
println "Dog barks"
}
}
class Cat extends Animal {
@Override
def sound() {
println "Cat meows"
}
}
def dog = new Dog()
dog.sound() // Output: Dog barks
def cat = new Cat()
cat.sound() // Output: Cat meows
এখানে, Dog
এবং Cat
ক্লাস দুটি sound()
মেথডের কার্যকারিতা ভিন্নভাবে বাস্তবায়ন করেছে, যদিও মেথডের নাম এক। এটি পলিমরফিজম।
Groovy তে আপনি একই ক্লাসের অবজেক্ট ব্যবহার করে বিভিন্ন আচরণ দেখতে পারেন:
def animal = new Dog()
animal.sound() // Output: Dog barks
animal = new Cat()
animal.sound() // Output: Cat meows
এখানে, animal
অবজেক্টের রেফারেন্স আলাদা আলাদা ক্লাসের (Dog এবং Cat) উপর নির্ভর করে ভিন্ন ভিন্ন আচরণ প্রদর্শন করছে।
Groovy তে ইন্টারফেস একটি সংজ্ঞায়িত চুক্তি যা কোন ক্লাসের মেথডের সিগনেচার সংরক্ষণ করে। একটি ক্লাস একাধিক ইন্টারফেস ইমপ্লিমেন্ট (অথবা বাস্তবায়ন) করতে পারে এবং এতে থাকা মেথডগুলির বাস্তবায়ন প্রদান করতে পারে। Groovy তে ইন্টারফেসের মাধ্যমে ক্লাসগুলির মধ্যে কম্পোজিশন এবং নমনীয়তা বৃদ্ধি করা হয়।
interface Animal {
def speak()
}
class Dog implements Animal {
def speak() {
println "The dog barks"
}
}
class Cat implements Animal {
def speak() {
println "The cat meows"
}
}
def dog = new Dog()
dog.speak() // Output: The dog barks
def cat = new Cat()
cat.speak() // Output: The cat meows
এখানে, Animal
একটি ইন্টারফেস এবং Dog
ও Cat
ক্লাস গুলি এই ইন্টারফেস ইমপ্লিমেন্ট করেছে। প্রতিটি ক্লাস তাদের নিজস্ব speak()
মেথডের বাস্তবায়ন দিয়েছে।
Groovy তে একটি ক্লাস একাধিক ইন্টারফেসও ইমপ্লিমেন্ট করতে পারে:
interface Animal {
def speak()
}
interface Pet {
def play()
}
class Dog implements Animal, Pet {
def speak() {
println "The dog barks"
}
def play() {
println "The dog plays"
}
}
def dog = new Dog()
dog.speak() // Output: The dog barks
dog.play() // Output: The dog plays
এখানে, Dog
ক্লাস দুটি ইন্টারফেস (Animal
এবং Pet
) ইমপ্লিমেন্ট করেছে এবং তাদের মেথডগুলির বাস্তবায়ন প্রদান করেছে।
Groovy তে Inheritance, Polymorphism, এবং Interfaces এর সহজ সিনট্যাক্স এবং শক্তিশালী ব্যবহারের মাধ্যমে কোড পুনঃব্যবহার, নমনীয়তা এবং মডুলারিটি সহজতর হয়।
common.read_more