Interface & Inheritance
Interface ve Inheritance (kalıtım), Solidity'de kodun yeniden kullanılabilirliğini ve modülerliğini artırmak için kullanılan güçlü araçlardır. Bu özellikler, akıllı kontratları daha esnek ve yönetilebilir hale getirir.
1. Interface
Interface, bir kontratın başka bir kontrat veya dış bir sistemle nasıl etkileşime gireceğini tanımlayan bir yapıdır. Interface'ler sadece fonksiyon başlıklarını içerir, fonksiyonların nasıl çalıştığı hakkında bilgi vermez. Interface'ler, diğer kontratların belirli bir arayüzü izlemesini sağlar ve fonksiyonların hangi isimlere sahip olduğunu ve parametrelerin neler olduğunu belirtir.
Bir interface tanımlarken sadece fonksiyonun adı ve parametreleri yazılır, fonksiyon içeriği yazılmaz.
Syntax
interface IExample {
function doSomething(uint256 _value) external returns (bool);
}
Bu örnekte, IExample
adında bir interface tanımlanmış ve doSomething
fonksiyonu için başlık verilmiştir. Bu fonksiyonun nasıl çalıştığı hakkında bilgi içermez.
Interface Kullanımı
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface ICalculator {
function add(uint256 a, uint256 b) external pure returns (uint256);
}
contract CalculatorUser {
ICalculator public calculator;
constructor(address _calculatorAddress) {
calculator = ICalculator(_calculatorAddress);
}
function calculateSum(uint256 a, uint256 b) public view returns (uint256) {
return calculator.add(a, b);
}
}
Bu örnekte:
ICalculator
adında bir interface tanımlanmıştır.CalculatorUser
kontratı, bu interface'i kullanarak başka bir kontratınadd
fonksiyonunu çağırır.
2. Inheritance (Kalıtım)
Inheritance, bir kontratın başka bir kontratın özelliklerini ve fonksiyonlarını miras almasını sağlar. Bu, kodun yeniden kullanılabilirliğini artırır ve kodun daha modüler olmasını sağlar. Kalıtım, bir kontratın başka bir kontratın tüm fonksiyonlarını ve durum değişkenlerini devralmasını sağlar.
Syntax
contract Parent {
uint256 public value;
function setValue(uint256 _value) public {
value = _value;
}
}
contract Child is Parent {
function doubleValue() public view returns (uint256) {
return value * 2;
}
}
Bu örnekte:
Parent
kontratı birvalue
değişkeni vesetValue
fonksiyonunu içerir.Child
kontratı,Parent
kontratını miras alır vevalue
değişkenine vesetValue
fonksiyonuna erişebilir. AyrıcadoubleValue
adında bir fonksiyon ekler.
3. Çoklu Kalıtım
Solidity'de bir kontrat birden fazla kontratı miras alabilir. Bu, çoklu kalıtım olarak bilinir ve çeşitli arayüzler veya kontratlar arasında kod paylaşımını sağlar.
Syntax
contract Base1 {
function func1() public pure returns (string memory) {
return "Base1";
}
}
contract Base2 {
function func2() public pure returns (string memory) {
return "Base2";
}
}
contract Derived is Base1, Base2 {
function func3() public pure returns (string memory) {
return "Derived";
}
}
Bu örnekte:
Derived
kontratı, hemBase1
hem deBase2
kontratlarını miras alır ve her iki kontratın fonksiyonlarına erişebilir.
Örnek Uygulama
Aşağıda, bir akıllı kontratın arayüzü ve kalıtım özelliklerini kullanan bir örnek bulunmaktadır:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// Interface tanımı
interface IStore {
function set(uint256 _value) external;
function get() external view returns (uint256);
}
// Base kontrat
contract Storage {
uint256 private value;
function set(uint256 _value) public {
value = _value;
}
function get() public view returns (uint256) {
return value;
}
}
// Derived kontrat
contract EnhancedStorage is Storage, IStore {
function increment(uint256 _value) public {
uint256 current = get();
set(current + _value);
}
}
Bu örnekte:
IStore
adında bir interface tanımlanmış veset
veget
fonksiyonları için başlık verilmiştir.Storage
kontratı,value
değişkenini saklar ve bu değeri ayarlamak ve almak için fonksiyonlar içerir.EnhancedStorage
kontratı, hemStorage
kontratını hem deIStore
arayüzünü miras alır veincrement
fonksiyonunu ekler.
Last updated