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 কীওয়ার্ড ব্যবহারের মাধ্যমে আরও উন্নত কার্যকারিতা প্রদান করে।
Read more