Давайте поиграем. Анализ кода :D

whirlwind

TDD infected, paranoid
Вообще, по поводу OOП могу указать на одну тонкость, которая очень важна, если вы хотите писать долговечный ООП код. Дробите код на составные классы. Даже в случаях когда это кажется необоснованным и вы сомневаетесь нужно ли так делать - дробите. Всегда выделяйте более мелкие сущности. Как правило, в тех местах где сейчас есть сомнения по этому поводу, в дальнейшем образуется множество родственных классов у которых одинаковый интерфейс, но разные внутренности.

Помните, что разобрать эксплуатируемый класс на несколько сущностей в процессе рефакторинга всегда сложнее чем инкапсулировать имеющийся класс в другом. В первом случае вам наверняка придется переживать за тот код который уже пользуется вашими классами (а его может быть очень много). Во втором случае все гораздо удачнее. Не обязательно объединять код существующих классов. Если вы преследуете цель - сделать класс удобным для использования снаружи, то вам достаточно добавить методы, делегирующие экземпляру того класса, с которым вы хотите объединить. На существующих пользователях класса это никак не отразится. Чем больше элементов, тем проще модифицировать код, тем меньше он влияет на существующий код и тем он долговечнее. По этому дробите классы не скупясь.
 
Сверху