Functional approach to OOP v1
Functional approach to OOP v2