Desing . elements of reusable object-oriented sofware (Canada : Addison - Wealey, 2013)