Solidity abstract, interface ve virtual keywordleri

abstract

  • Ortak olan bir özelliğin, kullanıldığı kontrata göre farklılık gösterdiği durumlarda kullanılır. Örneğin arabalar için elzem olan motorunun tipini döndüren MotorTipi isminde bir metodla aracın dizel mi yoksa benzinli mi olduğu bilgisini almak istediğimizi varsayalım. Bir adet Arac isimli bir abstract kontrat yazalım ve bu kontratı miras alan BenzinliArac ve DizelArac isimli 2 adet kontratımız olsun. Bu kontratlar Arac isimli kontrata ait MotorTipi metodunu implemente ettiklerinde BenzinliArac kontratından dönen değer “Benzinli” , DizelArac isimli kontrattan dönecek olan değer ise “Dizel” olacaktır.
  • Değişkenlik gösterecek ama aynı isimde tanımlamamız gereken fonksiyonaliteler için abstract keywordünü kullandığımız kontratta o fonksiyonunun içerisi boş bırakılmalıdır.
  • Solidity 0.6.0 versiyonu ile gelmektedir. Bu versiyonun altındaki versiyonlarda kullanılamaz.
  • abstract keywordüne sahip kontrat deploy edilmez, onun yerine bu kontrattan türetilmiş olan kontratla birlikte deploy edilir.
  • Kontratlardan bir farkı olmadığından dolayı bir adet constructor metoduna sahip olması gerekmektedir.
  • abstract olarak işaretlenen kontrat, başka bir kontrattan kalıtım yoluyla miras alabilir.

interface

  • Fonksiyonların erişim belirleyicilerinin external olarak işaretlenmiş olması gerekir.
  • interface kalıtım yoluyla başka bir kontrattan herhangi bir şeyi miras alamaz. Sadece interface olarak tanımlanmış olanlarla kalıtım yapılabilir.
  • Herhangi bir constructor metoduna sahip değildir.
  • interface keywordünü kullandığımız interface yapısını miras olarak alan kontrat bu yapıda bulunan metodların tamamını implemente etmesi gerekmektedir.
  • interface keywordünü kullanırken yaptığımız tanımlama içerisinde enum ve struct gibi özelleştirilmiş veri tipi tanımlamamıza olanak veren veri tipleri de kullanılabilir.
  • interface içerisinde metod overloading ile de aynı isimli metodlar kullanılabilir.
  • Daha önce tanımladığımız kontratların metodlarını çağırma esnasında kontrata ait ABI’nin interfacelerini de kullanarak çağrım işlemini gerçekleştirebiliriz.

virtual

function transfer(address recipient, uint256 amount) public virtual override returns (bool) { 
_transfer(_msgSender(), recipient, amount);
return true;
}

override

Solidity 0.8.8 versiyonundan itibaren override keywordünü kullanmadan da direkt olarak aynı tanımlamayla metod işlevselliği değiştirilebilir.

--

--

--

Software Developer | Web3 | Blockchain

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Veli Uysal

Veli Uysal

Software Developer | Web3 | Blockchain

More from Medium

Creating simple zero-knowledge verifier contract with ZoKrates (0.7.13) solidity (0.8.0)

How to Upgrade Smart Contracts

How to make VSC Solidity lint recognize your @chainlink and @openzeppelin libraries

Basics Of Tracking NFTs from Blockchain