(Часть 3)

Если вы знакомы с ООП (объектно-ориентированным программированием), вы уже знаете, что наследование — одна из самых обсуждаемых функций в ООП. Наследование — это возможность наследовать определенные функции без необходимости перепрограммировать их снова и снова.

Наследование: расширение функций от одного контракта к другому

Шаг 1. Создайте новый контракт с его переменными и функциями.

договор банка {

// uint internal mainAccountAmount; — Если мы хотим сделать переменную защищенной, мы //можем использовать ключевое слово internal, но здесь мы собираемся оставить ее закрытой

uint private mainAccountAmount;

}

Шаг 2. Используйте ключевое слово «is», чтобы унаследовать характеристики банковского контракта для вашего MyFirstContract.

контракт MyFirstContract — это банк {

}

Примечание. В Solidity public, private и internal (спецификаторы доступа) эквивалентны public, private и protected в других языках ООП.

Мы используем ключевое слово constructor для определения конструктора в контракте. Синтаксис аналогичен другим функциям. Мы определяем три функции deposit, withdraw и balance для работы с нашей переменной mainAccountAmount.

контракт Банк {
uint private mainAccountAmount;

конструктор(uint сумма) public{
mainAccountAmount = сумма;
}

функция депозита( uint сумма) public{
mainAccountAmount += сумма;
}

function remove(uint wdamount) public {
if(mainAccountAmount › wdamount){
mainAccountAmount -= wdamount;
}
}

function balance() public view возвращает(uint) {
return mainAccountAmount;
}

}

Шаг 2. Инициализируйте новый контракт, используя ключевое слово is в MyFirstContract

контракт MyFirstContract is Bank(20) { … }

Это вызовет конструктор контракта Bank со значением суммы 20.

Шаг 3. Протестируйте свой контракт, скомпилировав и развернув его. Проверьте свои функции вывода депозита и баланса.

Начальный баланс должен быть значением, которое вы передали конструктору. Измените функции депозита и снятия и проверьте переменную баланса.

Создание абстрактных функций в контракте

В контракте Solidity нет определенного ключевого слова для создания абстрактных функций. Вы можете создать простую функцию без такой реализации в контракте Bank.

Абстрактные функции должны быть определены в дочернем контракте для успешного создания дочернего контракта.

публичная функция кредита() возвращает(bool);

Но для запуска контракта MyFirstContract вам необходимо написать определение функции loan в MyFirstContract.

функция ссуда () public возвращает (bool) {
return true;
}

Наследование через интерфейсы в Solidity

Интерфейсы в Solidity похожи на абстрактные контракты, функции которых не могут быть реализованы. Интерфейсы могут быть унаследованы, но сами они не могут наследовать другие контракты.

Интерфейсы не могут определять конструкторы, переменные, перечисления или структуры. Для определения интерфейса используется ключевое слово interface (хотя здесь нет ничего сложного!).

Для наследования интерфейса мы используем то же ключевое слово, что и для наследования контракта — is.

Вот пример наследования с использованием интерфейсов. Мы определим интерфейс и реализуем его функции в нашем контракте Bank.

Шаг 1. Создайте интерфейс и назовите его BankMediator.

интерфейс BankMediator {
функция checkBalance() внешняя доходность (bool);
функция кредита (сумма uint) внешняя доходность (bool);
}

Шаг 2. Реализуйте функции, объявленные в интерфейсе.

Поскольку я хочу, чтобы все функции, связанные с BankMediator, были определены в самом контракте Bank, я перемещаю функцию loan и переопределяю ее. в контракте Bank, и здесь я также определяю функцию checkBalance:

function checkBalance() public return(bool){
if(mainAccountAmount › 0) {
return true;
}
else {
return false;
}
}

функция ссуда (сумма uint) public возвращает (bool) {
if (сумма mainAccountAmount ›) {
return true;
}
else {
вернуть ложь;
}
}

Функция checkBalance() возвращает true, если баланс основного счета положительный, и возвращает false в противном случае.

Функция loan() возвращает true, если баланс mainAccount больше суммы запрошенного кредита, и возвращает false в противном случае.

Шаг 3. Протестируйте свои контракты, скомпилировав и внедрив их

Протестируйте различные функции ваших контрактов, такие как loan(), checkBalance(), и посмотрите, работают ли ваши контракты и интерфейсы должным образом.