Object-oriented design involves trade-offs. In some cases there are perfectly optimal solutions but usually you can do things several different ways and the best choice is based on trade-offs.