A treatise on object-oriented design patterns