MetaClass এবং Runtime Modifications

Computer Programming - গ্রুভি (Groovy) Meta-Programming in Groovy (মেটাপ্রোগ্রামিং) |
195
195

Groovy তে MetaClass এবং Runtime Modifications

Groovy তে MetaClass এবং Runtime Modifications হলো এমন কিছু বৈশিষ্ট্য যা Class এবং Object এর আচরণ পরিবর্তন করার ক্ষমতা প্রদান করে, বিশেষত Runtime এ। MetaClass এর মাধ্যমে Groovy তে ডায়নামিক মেথড, প্রপার্টি সংযোজন এবং Class এর আচরণ পরিবর্তন করা যায়। এই ক্ষমতা প্রোগ্রামিংকে আরও নমনীয় এবং ডায়নামিক করে তোলে এবং এটি বিশেষত গ্রোভির মেটাপ্রোগ্রামিং বৈশিষ্ট্যের অন্তর্গত।


MetaClass এর ধারণা

MetaClass হলো Groovy তে একটি বিশেষ ধরনের ক্লাস যা প্রতিটি Groovy ক্লাসের সাথে যুক্ত থাকে এবং এটি ক্লাসের প্রপার্টি ও মেথডগুলোর বিবরণ ধারণ করে। MetaClass ব্যবহার করে আমরা রানটাইমে কোনো ক্লাস বা অবজেক্টের আচরণ পরিবর্তন করতে পারি, যেমন নতুন মেথড যোগ করা, বিদ্যমান মেথড ওভাররাইড করা ইত্যাদি।


1. Runtime এ নতুন Method যোগ করা

MetaClass ব্যবহার করে Runtime এ কোনো Class এ নতুন মেথড যোগ করা যায়।

class Person {
    String name
}

// Runtime এ নতুন মেথড যোগ করা
Person.metaClass.sayHello = { -> "Hello, my name is $name" }

def person = new Person(name: "Alice")
println person.sayHello()  // Output: Hello, my name is Alice

এখানে Person ক্লাসে sayHello নামে একটি নতুন মেথড যোগ করা হয়েছে MetaClass এর মাধ্যমে, যা রানটাইমে ব্যবহার করা সম্ভব।


2. বিদ্যমান Method ওভাররাইড করা

MetaClass ব্যবহার করে রানটাইমে বিদ্যমান মেথড ওভাররাইড করা সম্ভব।

class Calculator {
    def add(int a, int b) {
        return a + b
    }
}

// Runtime এ add() মেথড ওভাররাইড করা
Calculator.metaClass.add = { int a, int b -> a * b }

def calculator = new Calculator()
println calculator.add(5, 3)  // Output: 15

এখানে Calculator ক্লাসের add() মেথডকে Runtime এ ওভাররাইড করে নতুন মেথড হিসাবে ব্যবহার করা হয়েছে, যা এখন যোগের পরিবর্তে গুণ করছে।


3. Property যোগ করা বা পরিবর্তন করা

MetaClass ব্যবহার করে একটি Object এ নতুন Property যোগ করা যায় বা বিদ্যমান Property পরিবর্তন করা যায়।

class Person {
    String name
}

// Runtime এ age নামে একটি নতুন Property যোগ করা
Person.metaClass.age = 25

def person = new Person(name: "Bob")
println "${person.name} is ${person.age} years old"  // Output: Bob is 25 years old

এখানে Person ক্লাসে age নামে নতুন একটি Property যোগ করা হয়েছে MetaClass এর মাধ্যমে, যা রানটাইমে ব্যবহার করা সম্ভব।


4. Method Missing এবং Property Missing ব্যবহার

Groovy তে methodMissing এবং propertyMissing নামের মেথড দুটি ব্যবহৃত হয় অজানা মেথড বা প্রপার্টি কল করার জন্য। এগুলোর মাধ্যমে ডায়নামিক মেথড এবং প্রপার্টি তৈরি করা যায়।

class DynamicPerson {
    def methodMissing(String name, args) {
        return "Called method $name with arguments $args"
    }
}

def person = new DynamicPerson()
println person.sayHello("Alice")  // Output: Called method sayHello with arguments [Alice]

এখানে sayHello মেথড DynamicPerson ক্লাসে সংজ্ঞায়িত না থাকলেও, methodMissing মেথড ব্যবহার করে এটি ডায়নামিকভাবে একটি মেসেজ রিটার্ন করছে।


5. ExpandoMetaClass

Groovy তে ExpandoMetaClass ব্যবহার করে আরও সহজে এবং সরাসরি ক্লাস মডিফিকেশন করা যায়। এটি MetaClass এর মতোই কাজ করে তবে বেশি নমনীয় এবং দ্রুত।

class Person {
    String name
}

// ExpandoMetaClass ব্যবহার করে মেথড যোগ করা
Person.metaClass.sayGoodbye = { -> "Goodbye, $name" }

def person = new Person(name: "Alice")
println person.sayGoodbye()  // Output: Goodbye, Alice

ExpandoMetaClass ব্যবহারে MetaClass এর মতোই নতুন মেথড বা প্রপার্টি যোগ করা যায়।


6. Category Class ব্যবহার

Groovy তে Category Class ব্যবহার করে একটি নির্দিষ্ট Block এর জন্য রানটাইমে মেথড বা প্রপার্টি যোগ করা যায়। এটি Temporary Runtime Modifications করার জন্য ব্যবহার করা হয়।

class StringCategory {
    static String shout(String str) {
        return str.toUpperCase()
    }
}

use(StringCategory) {
    println "hello".shout()  // Output: HELLO
}

এখানে StringCategory নামের একটি ক্যাটাগরি ক্লাস ব্যবহার করে String ক্লাসে shout নামে একটি মেথড যোগ করা হয়েছে, যা শুধুমাত্র use ব্লকের মধ্যে কার্যকর থাকবে।


সারসংক্ষেপ

  • MetaClass: MetaClass এর মাধ্যমে Groovy তে Class বা Object এর প্রপার্টি ও মেথড রানটাইমে পরিবর্তন করা যায়।
  • ExpandoMetaClass: MetaClass এর আরও উন্নত সংস্করণ যা দ্রুত এবং সরাসরি মডিফিকেশনের জন্য ব্যবহৃত হয়।
  • Method Missing এবং Property Missing: ডায়নামিক মেথড এবং প্রপার্টি কলের জন্য ব্যবহৃত হয়।
  • Category Class: নির্দিষ্ট Block এর মধ্যে Class এ সাময়িক পরিবর্তন আনার জন্য ব্যবহার করা হয়।

MetaClass এবং Runtime Modifications এর মাধ্যমে Groovy তে ডায়নামিক এবং নমনীয় প্রোগ্রামিং করা সহজ হয়, যা প্রোগ্রামারদের দ্রুত এবং ডায়নামিক কোড তৈরি করতে সাহায্য করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion