https://medium.com/@beam.wannasiri/object-oriented-programming-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3-part1-cdb6227ebf5