https://1cpp.blogspot.com/2019/08/88-data-abstraction.html