Object-oriented Program Design