Намного проще придумать с хорошим дизайном, если сначала подумать об объектах , а затем решить, какие классы вам нужны для их создания.
Не во всех языках ООП есть классы - и они вам не нужны.
Например, в Ruby вы можете определять новые методы для объекта и просто клонировать сами объекты - или вы можете выполнять традиционный дизайн и определять новые классы.
В Self вы вообще не определяете классы. Вместо этого вы добавляете методы к «прототипу объекта-примера» и клонируете его копии, когда вам нужны новые «экземпляры».
Многим нравится начинать проектировать ОО-системы с помощью диаграмм классов, но, к сожалению, это скорее симптом SQL-мышления, чем ОО-мышления. Прежде всего - объекты делают вещи.