Solidity তে Contract Inheritance এর ধারণা

Inheritance এবং Interfaces (ইনহেরিটেন্স এবং ইন্টারফেসেস) - সলিডিটি (Solidity) - Computer Programming

331

Contract Inheritance হল একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং কনসেপ্ট যা স্মার্ট কন্ট্রাক্টের মধ্যে কোড পুনঃব্যবহার এবং ফাংশনালিটির শেয়ারিং সম্ভব করে। Solidity তে inheritance এর মাধ্যমে একটি কন্ট্রাক্ট (child contract) অন্য কন্ট্রাক্ট (parent contract) থেকে ফাংশন এবং প্রপার্টি গ্রহণ করতে পারে। এটি কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে এবং কন্ট্রাক্টগুলোর মধ্যে কার্যকারিতা ভাগ করে নিয়ে আসতে সাহায্য করে।

Solidity তে ইনহেরিটেন্স ব্যবহার করে, আপনি একটি কন্ট্রাক্টের বৈশিষ্ট্য এবং আচরণ অন্য কন্ট্রাক্টে উত্তরাধিকারসূত্রে গ্রহণ করতে পারেন। এটি আপনাকে একটি বড়, জটিল প্রোগ্রাম বা অ্যাপ্লিকেশন তৈরি করার সময় কোডের পরিমাণ কমিয়ে আনতে এবং কোডের কাঠামোকে আরও সুষম এবং সুসংগঠিত করতে সহায়তা করে।

1. Solidity তে Inheritance এর কাজ

Solidity তে ইনহেরিটেন্সের মাধ্যমে আপনি এক কন্ট্রাক্টের ফাংশন এবং প্রপার্টি অন্য কন্ট্রাক্টে গ্রহণ করতে পারেন। এর মাধ্যমে আপনি পুনরায় একই কোড না লিখে পূর্বের কন্ট্রাক্টের বৈশিষ্ট্য এবং আচরণ ব্যবহার করতে পারেন।

  • Single Inheritance: একটি কন্ট্রাক্ট অন্য একটি কন্ট্রাক্ট থেকে ফাংশন এবং প্রপার্টি গ্রহণ করবে।
  • Multiple Inheritance: একটি কন্ট্রাক্ট একাধিক কন্ট্রাক্ট থেকে ফাংশন এবং প্রপার্টি গ্রহণ করতে পারে।

2. Single Inheritance Example

pragma solidity ^0.8.0;

contract Parent {
    uint public value;

    constructor(uint _value) {
        value = _value;
    }

    function setValue(uint _value) public {
        value = _value;
    }
}

contract Child is Parent {
    string public name;

    constructor(uint _value, string memory _name) Parent(_value) {
        name = _name;
    }

    function getName() public view returns (string memory) {
        return name;
    }
}

ব্যাখ্যা:

  • Parent কন্ট্রাক্ট একটি value প্রপার্টি ধারণ করে এবং সেটি আপডেট করার জন্য একটি setValue ফাংশন প্রদান করে।
  • Child কন্ট্রাক্ট Parent কন্ট্রাক্ট থেকে ইনহেরিট করছে এবং এর value প্রপার্টি এবং setValue ফাংশন পেয়ে যাচ্ছে।
  • Child কন্ট্রাক্টের কনস্ট্রাক্টর Parent কন্ট্রাক্টের কনস্ট্রাক্টরও কল করছে।

3. Multiple Inheritance Example

Solidity তে মাল্টিপল ইনহেরিটেন্সে একাধিক কন্ট্রাক্ট থেকে ফাংশন এবং প্রপার্টি গ্রহণ করা যেতে পারে।

pragma solidity ^0.8.0;

contract A {
    function functionA() public pure returns (string memory) {
        return "Function A from Contract A";
    }
}

contract B {
    function functionB() public pure returns (string memory) {
        return "Function B from Contract B";
    }
}

contract C is A, B {
    function functionC() public pure returns (string memory) {
        return "Function C from Contract C";
    }
}

ব্যাখ্যা:

  • Contract C দুইটি কন্ট্রাক্ট A এবং B থেকে ইনহেরিট করছে।
  • এটি functionA এবং functionB ফাংশনগুলি ব্যবহার করতে পারবে, যেগুলি Contract A এবং Contract B থেকে ইনহেরিট করা হয়েছে।
  • Contract C নিজের একটি নতুন ফাংশন functionC প্রদান করেছে।

4. Visibility and Overriding Functions

Solidity তে ইনহেরিটেড ফাংশন এবং প্রপার্টির visibility (public, private, internal) এবং overriding (একই নামের ফাংশন পরিবর্তন) নিয়েও কাজ করা যায়।

Function Overriding Example:
pragma solidity ^0.8.0;

contract Parent {
    function greet() public pure returns (string memory) {
        return "Hello from Parent!";
    }
}

contract Child is Parent {
    // greet() ফাংশনকে override করা হচ্ছে
    function greet() public pure override returns (string memory) {
        return "Hello from Child!";
    }
}

ব্যাখ্যা:

  • Child কন্ট্রাক্টে greet() ফাংশনটি Parent কন্ট্রাক্ট থেকে ইনহেরিট করা হয়েছে, তবে এটি override করা হয়েছে এবং Child কন্ট্রাক্টে নতুন আচরণ দেওয়া হয়েছে।

5. Constructor Inheritance

Solidity তে, কনস্ট্রাক্টর ইনহেরিট করতে হলে, চাইল্ড কন্ট্রাক্টের কনস্ট্রাক্টরকে প্যারেন্ট কন্ট্রাক্টের কনস্ট্রাক্টর কল করতে হবে। এটি প্যারেন্ট কন্ট্রাক্টের প্রপার্টি বা ইনিশিয়াল মান সেট করার জন্য প্রয়োজনীয়।

pragma solidity ^0.8.0;

contract Parent {
    uint public value;

    constructor(uint _value) {
        value = _value;
    }
}

contract Child is Parent {
    string public name;

    constructor(uint _value, string memory _name) Parent(_value) {
        name = _name;
    }
}

ব্যাখ্যা:

  • Child কন্ট্রাক্ট Parent কন্ট্রাক্টের কনস্ট্রাক্টরকে কল করেছে, যেটি value প্রপার্টি ইনিশিয়ালাইজ করার জন্য ব্যবহার করা হয়েছে।

6. Super Keyword

Solidity তে super কীওয়ার্ড ব্যবহার করে আপনি প্যারেন্ট কন্ট্রাক্টের একটি ফাংশন বা প্রপার্টি কল করতে পারেন, যদি সেটি ইনহেরিটেড বা ওভাররাইড করা হয়।

pragma solidity ^0.8.0;

contract Parent {
    function greet() public pure returns (string memory) {
        return "Hello from Parent!";
    }
}

contract Child is Parent {
    function greet() public pure override returns (string memory) {
        return string(abi.encodePacked(super.greet(), " and Child!"));
    }
}

ব্যাখ্যা:

  • এখানে super.greet() প্যারেন্ট কন্ট্রাক্টের greet() ফাংশনটি কল করছে এবং তার পরে Child কন্ট্রাক্টের নিজস্ব টেক্সট যুক্ত করছে।

সারাংশ

Solidity তে Contract Inheritance একটি গুরুত্বপূর্ণ ফিচার যা স্মার্ট কন্ট্রাক্টের কোড পুনঃব্যবহার এবং কার্যকারিতা ভাগ করে নেওয়ার জন্য ব্যবহৃত হয়। এটি এক কন্ট্রাক্টের ফাংশন, প্রপার্টি, এবং কনস্ট্রাক্টর অন্য কন্ট্রাক্টে ইনহেরিট করতে সাহায্য করে। Solidity তে ইনহেরিটেন্সের মাধ্যমে single inheritance এবং multiple inheritance করা সম্ভব, এবং এটি ফাংশন ওভাররাইডিং, visibility নিয়ন্ত্রণ, এবং super কীওয়ার্ড ব্যবহারের মাধ্যমে আরও উন্নত কার্যকারিতা প্রদান করে।

Content added By
Promotion

Are you sure to start over?

Loading...