https://medium.com/@dev.soni04/exploring-kotlins-object-oriented-programming-techniques-composition-interfaces-and-delegation-5466cc45025