وراثت در سالیدیتی

وراثت در سالیدیتی
سالیدیتی

وراثت در سالیدیتی

وراثت یکی از مهم ترین ویژگی های زبان برنامه نویسی شی گرا است. این روشی برای گسترش عملکرد یک برنامه است که برای جدا کردن کد استفاده می شود، وابستگی را کاهش می دهد و قابلیت استفاده مجدد از کد موجود را افزایش می دهد.​از مهم ترین مزایای اصلی استفاده از وراثت در سالیدیتی قابلیت استفاده مجدد از کدها ، جلوگیری از افزونگی و کاهش پیچیدگی زمان قطعه کد ما می شود.در اصل با استفاده از وراثت در سالیدیتی خوانایی کدها افزایش پیدا می کند.

جهت دریافت اطلاعات بیشتر قبل از مطالعه مقاله وراثت در سالیدیتی توصیه می کنیم مقالات و محتواهای آموزش زبان سالیدیتی را هم مطالعه نمایید.

  1. قرارداد هوشمند یا اسمارت کانترکت (Smart Contract) چیست؟
  2. کاربردهای برنامه نویسی سالیدیتی
  3. کسب درآمد دلاری با قرارداد هوشمند
  4. ماشین مجازی اتریوم چیست؟
  5. توسعه قرارداد هوشمند در محیط ریمیکس
  6. مدیریت خطا در سالیدیتی

وراثت در سالیدیتی چیست؟

وراثت در سالیدیتی (Inheritance)

زبان برنامه نویسی سالیدیتی از وراثت بین قراردادهای هوشمند پشتیبانی می کند، جایی که چندین قرارداد را می توان در یک قرارداد واحد به ارث برد.Solidity Inheritance بین قراردادهای هوشمند پشتیبانی می کند، که در آن قراردادهای متعدد را می توان در یک قرارداد به ارث برد. قراردادی که سایر قراردادها از آن ویژگی‌ها را به ارث می‌برند، قرارداد پایه و قراردادی که ویژگی‌ها را به ارث می‌برند، قرارداد مشتق می‌گویند.در Solidity قرارداد مشتق شده ویژگی های قرارداد والد را به ارث می برد.این ویژگی ها شامل متغیر ها در سالیدیتی ، توابع در سالیدیتی ،  Modifier و رویدادها در سالیدیتی می شوند.زبان برنامه نویسی Solidity از وراثت چندگانه هم پشتیبانی می کند.به عنوان مثال قرارداد دوم و سوم از قرارداد اول مشتق شده و قرارداد چهارم مشتق شده از قرارداد دوم سوم و اول هست تصویر زیر وراثت چندگانه در مثالی که در مورد وراثت چندگانه در زبان برنامه نویسی سالیدیتی گفته شد را به شما نشان می دهد.

وراثت در سالیدیتی
وراثت چندگانه در برنامه نویسی سالیدیتی

همانطور که در تصویر بالا مشاهده می کنید وراثت واحد می تواند چندین سطح داشته باشد. با این حال، ممکن است چندین قرارداد نیز وجود داشته باشد که از یک قرارداد پایه یکسان ناشی می شود. این قراردادهای مشتق شده را می توان به عنوان قراردادهای پایه با هم در کلاس های فرزند بعدی استفاده کرد. هنگامی که قراردادها از چنین قراردادهای فرزندی با هم ارث می برند، وراثت چندگانه به وجود می آید.

در بخش زیر نمونه کد های مربوط به وراثت چندگانه در زبان برنامه نویسی سالیدیتی در محیط ریمیکس نمایش داده شده است.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

/* Graph of inheritance
    A
   / \
  B   C
 / \ /
F  D,E

*/

contract A {
    function foo() public pure virtual returns (string memory) {
        return "A";
    }
}

// Contracts inherit other contracts by using the keyword 'is'.
contract B is A {
    // Override A.foo()
    function foo() public pure virtual override returns (string memory) {
        return "B";
    }
}

contract C is A {
    // Override A.foo()
    function foo() public pure virtual override returns (string memory) {
        return "C";
    }
}

// Contracts can inherit from multiple parent contracts.
// When a function is called that is defined multiple times in
// different contracts, parent contracts are searched from
// right to left, and in depth-first manner.

contract D is B, C {
    // D.foo() returns "C"
    // since C is the right most parent contract with function foo()
    function foo() public pure override(B, C) returns (string memory) {
        return super.foo();
    }
}

contract E is C, B {
    // E.foo() returns "B"
    // since B is the right most parent contract with function foo()
    function foo() public pure override(C, B) returns (string memory) {
        return super.foo();
    }
}

// Inheritance must be ordered from “most base-like” to “most derived”.
// Swapping the order of A and B will throw a compilation error.
contract F is A, B {
    function foo() public pure override(A, B) returns (string memory) {
        return super.foo();
    }
}

دامنه وراثت در Solidity فقط به اصلاح کننده های عمومی و داخلی محدود می شود. برخی از ویژگی های مهم وراثت در Solidity عبارتند از:

  • یک قرارداد مشتق شده می تواند به همه اعضای غیر خصوصی از جمله متغیرهای حالت و روش های داخلی دسترسی داشته باشد. اما استفاده از این مجاز نیست.
  • نادیده گرفتن تابع مجاز است مشروط بر اینکه امضای تابع ثابت بماند. در صورت اختلاف پارامترهای خروجی، کامپایل با شکست مواجه می شود.
  • ما می توانیم تابع یک قرارداد فوق العاده را با استفاده از یک کلمه کلیدی فوق العاده یا با استفاده از یک نام قرارداد فوق العاده فراخوانی کنیم.
  • در مورد وراثت های چندگانه، فراخوانی تابع با استفاده از super به اکثر قراردادهای مشتق شده ترجیح می دهد.
مشاهده  ماشین مجازی اتریوم چیست؟

انواع وراثت در سالیدیتی Solidity

زبان برنامه نویسی سالیدیتی از انواع مختلفی از ارث بری پشتیبانی می کند که در بخش زیر به معرفی انواع وراثت در زبان برنامه نویسی سالیدیتی همراه با مثال و خروجی کدهای مربوط به وراثت در سالیدیتی آموزش داده خواهد شد.

انواع وراثت در سالیدیتی
انواع وراثت در سالیدیتی (Solidity)

وراثت تک سطحی یا Single Inheritance

مثال: در قطعه کد زیربرای نشان دادن وراثت تک سطحی از قرارداد والد توسط قرارداد فرزند به ارث می رسد.در این مثال با استفاده از وراثت تنها یا همان Single Inheritance وراثت توسط قرارداد فرزند از قرارداد والد صورت می گیرد.

// Solidity program to
// demonstrate
// Single Inheritance
pragma solidity >=0.4.22 <0.6.0;

// Defining contract
contract parent{

	// Declaring internal
	// state variable
	uint internal sum;
	
	// Defining external function
	// to set value of internal
	// state variable sum
	function setValue() external {
		uint a = 10;
		uint b = 20;
		sum = a + b;
	}
}

// Defining child contract
contract child is parent{
	
	// Defining external function
	// to return value of
	// internal state variable sum
	function getValue(
	) external view returns(uint) {
		return sum;
	}
}

// Defining calling contract
contract caller {

	// Creating child contract object
	child cc = new child();
	
	// Defining function to call
	// setValue and getValue functions
	function testInheritance(
	) public returns (uint) {
		cc.setValue();
		return cc.getValue();
	}
}

تصویر خروجی مربوط به وراثت تک سطحی در سالیدیتی

Single Inheritance

وراثت چند سطحی یا Multi-level Inheritance

وراثت چند سطحی در برنامه نویسی سالیدیتی شباهت زیادی به وراثت تک سطحی دارد، اما تفاوت آن سطح رابطه بین والد و فرزند می باشد. قرارداد فرزند نشات گرفته از والدینی است که این والد خود از قراردادی دیگر نشات گرفته است.یعنی قرارداد سوم از قرارداد دوم ارث می برد و قرارداد دوم از قرارداد اول ارث می برد.

مشاهده  دستور Enums در برنامه نویسی سالیدیتی

مثال: در مثال زیر، قرارداد A به قرارداد B به ارث می‌رسد، قرارداد B به قرارداد C به ارث می‌رسد تا وراثت چند سطحی یا همان Multi-level Inheritance را به شما نشان دهد.

// Solidity program to
// demonstrate Multi-Level
// Inheritance
pragma solidity >=0.4.22 <0.6.0;

// Defining parent contract A
contract A {

	// Declaring state variables
	string internal x;
	string a = "Geeks" ;
	string b = "For";

	// Defining external function
	// to return concatenated string
	function getA() external{
		x = string(abi.encodePacked(a, b));
	}
}

// Defining child contract B
// inheriting parent contract A
contract B is A {

	// Declaring state variables
	// of child contract B
	string public y;
	string c = "Geeks";

	// Defining external function to
	// return concatenated string
	function getB() external payable returns(
	string memory){
		y = string(abi.encodePacked(x, c));
	}
}

// Defining child contract C
// inheriting parent contract A
contract C is B {
	
	// Defining external function
	// returning concatenated string
	// generated in child contract B
	function getC() external view returns(
	string memory){
		return y;
	}
}

// Defining calling contract
contract caller {

	// Creating object of child C
	C cc = new C();

	// Defining public function to
	// return final concatenated string
	function testInheritance(
	) public returns (
	string memory) {
		cc.getA();
		cc.getB();
		return cc.getC();
	}
}

تصویر خروجی مربوط به وراثت چند سطحی در سالیدیتی

وراثت چند سطحی در سالیدیتی

وراثت سلسله مراتبی یا Hierarchical Inheritance

در وراثت سلسله مراتبی، قرارداد والد بیش از یک قرارداد فرزند دارد. از وراثت سلسله مراتبی بیشتر زمانی استفاده می شود که قرار است از یک عملکرد مشترک در مکان های مختلف استفاده شود.

مثال: قطعه کد زیر در زبان برنامه نویسی سالیدیتی، قرارداد A توسط قرارداد B به ارث برده و هم چنین قرارداد A توسط قرارداد C به ارث برده شده است.به این شکل از وراثت در سالیدیتی وراثت سلسله مراتبی می گوییم.در اصل قرارداد B از قرار داد A مشتق شده است و قرارداد C هم از قرارداد A مشتق شده است.

// Solidity program to demonstrate
// Hierarchical Inheritance
pragma solidity >=0.4.22 <0.6.0;

// Defining parent contract A
contract A {

	// Declaring internal
	// state variable
	string internal x;
	
	// Defining external function
	// to set value of
	// internalstate variable
	function getA() external {
		x = "GeeksForGeeks";
	}
	
	// Declaring internal
	// state variable
	uint internal sum;
	
	// Defining external function
	// to set the value of
	// internal state variable sum
	function setA() external {
		uint a = 10;
		uint b = 20;
		sum = a + b;
	}
}

// Defining child contract B
// inheriting parent contract A
contract B is A {

	// Defining external function to
	// return state variable x
	function getAstr(
	) external view returns(string memory){
		return x;
	}
	
}


// Defining child contract C
// inheriting parent contract A
contract C is A {

	// Defining external function to
	// return state variable sum
	function getAValue(
	) external view returns(uint){
		return sum;
	}
}

// Defining calling contract
contract caller {

	// Creating object of contract B	
	B contractB = new B();

	// Creating object of contract C
	C contractC = new C();
	
	// Defining public function to
	// return values of state variables
	// x and sum
	function testInheritance(
	) public returns (
	string memory, uint) {
		return (
		contractB.getAstr(), contractC.getAValue());
	}
}

تصویر خروجی مربوط به وراثت سلسله مراتبی سالیدیتی

وراثت سلسله مراتبی سالیدیتی

وراثت چندگانه یا Multiple Inheritance

در بخش بالا در مورد وراثت چندگانه مثالی را مطرح نمودیم و به توضیحات مربوط به وراثت چندگانه در سالیدیتی پرداختیم.در وراثت چندگانه (Multiple Inheritance) ، یک قرارداد واحد را می توان از بسیاری از قراردادها به ارث برد. قرارداد والد می تواند بیش از یک قرارداد فرزند داشته باشد در حالی که قرارداد فرزند می تواند بیش از یک والد داشته باشد.

مشاهده  دستورات شرطی در سالیدیتی

مثال: در قطعه کد زیر، قرارداد A توسط قرارداد B به ارث برده شده است و قرارداد C از قرارداد A و قرارداد B مشتق شده است در اصل قرارداد C هم زمان از قرارداد های A و B ارث برده است. بنابراین این مثال به ما وراثت چندگانه در سالیدیتی یا Multiple Inheritance را نشان می دهد.

// Solidity program to
// demonstrate
// Multiple Inheritance
pragma solidity >=0.4.22 <0.6.0;

// Defining contract A
contract A {

	// Declaring internal
	// state variable
	string internal x;

	// Defining external function
	// to set value of
	// internal state variable x
	function setA() external {
		x = "GeeksForGeeks";
	}
}

// Defining contract B
contract B {

	// Declaring internal
// state variable
	uint internal pow;

	// Defining external function
	// to set value of internal
	// state variable pow
	function setB() external {
		uint a = 2;
		uint b = 20;
		pow = a ** b;
		
	}
}

// Defining child contract C
// inheriting parent contract
// A and B
contract C is A, B {

// Defining external function
// to return state variable x
function getStr(
) external returns(string memory) {
		return x;
	}

	// Defining external function
	// to return state variable pow
	function getPow(
	) external returns(uint) {
		return pow;
	}
}

// Defining calling contract
contract caller {

	// Creating object of contract C
	C contractC = new C();

	// Defining public function to
	// return values from functions
// getStr and getPow
	function testInheritance(
	) public returns(string memory, uint) {
		contractC.setA();
		contractC.setB();
		return (
		contractC.getStr(), contractC.getPow());
	}
}

تصویر خروجی مربوط به وراثت چندگانه زبان سالیدیتی

وراثت چندگانه زبان سالیدیتی

منبع کدهای مقاله وراثت در سالیدیتی

وب سایت: geeksforgeeks

دیدگاه خود را اینجا قرار دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

محبوب ترین دوره ها

برچسب های محبوب

Mapping Solidity Inheritance آموزش برنامه نویسی سالیدیتی آموزش سالیدیتی آموزش قرارداد هوشمند اجزای قرارداد هوشمند ارز دیجیتال اتریوم ارز دیجیتال یونی ارزهای متاورسی الگوریتم اثبات کار الگوریتم اجماع امنیت کیف پول اهمیت قرارداد هوشمند اپلیکیشن متمرکز برنامه نویس سالیدیتی برنامه نویسی اتریوم برنامه نویسی بلاکچین برنامه نویسی ریمیکس برنامه نویسی سالیدیتی برنامه نویسی شی‌ گرا برنامه نویسی قرارداد هوشمند بلاکچین بلاک چین اتریوم بهترین ارزهای دیجیتال ترون چیست توسعه دهنده سالیدیتی صرافی های ارزدیجیتال صرافی‌ غیرمتمرکز قرارداد هوشمند قیمت پولکادات متاورس مزایای قرارداد هوشمند نوشتن سیستم رای گیری با سالیدیتی نوشتن قرارداد هوشمند واقعیت مجازی متاورس ویژگی‌های اتریوم پلتفرم های ارزدیجیتال پیش نیاز قرارداد هوشمند کاربرد قرارداد هوشمند کد نویسی سالیدیتی کسب درآمد با قرارداد هوشمند کسب درآمد در متاورس کیف پول ارزدیجیتال کیف پول الکترونیکی کیف پول نرم‌افزاری