Существует теория, а затем есть практика ... а затем вы, как инженер-программист, пытаетесь сбалансировать их обоих.
В теории вы должны делать объекты почти все, пока не упадете до наименьших возможных элементов, примитивных типов (булевых, строковых, целых и т. Д.). Ну .. это довольно упрощенно, но с этим один редко идет не так ...
что ...
пока вы не получите, чтобы создать (то есть код классы) вещь.
На практическом конце спектра вы можете определить все в одном большом классе и сделать с ним ... то есть ... пока вам не придется определять тонкие изменения в поведении (наружная дверь, дверь гаража, дверь собаки и т.д).
Мой подход обычно начинается с одного большого класса (уродливый, но он быстрый для кода, и я могу быстрее получить рабочий прототип). Затем, если мне когда-либо понадобится определить корректировки или новое поведение или повторно использовать часть целого, тогда я создаю элемент smalle и реорганизую большой, чтобы использовать меньший, вместо определения его собственных атрибутов.
Например. Я кодирую класс двери, и оттуда я могу создать (создать экземпляр) столько дверей, сколько захочу, но они все одинаковы и ведут себя одинаково. Теперь я понимаю, что мне нужно также определить окна, вращающиеся вокруг шарниров ... Подождите минуту ... у дверей тоже есть петли. Здесь я создаю класс шарнира, который может использоваться как дверью, так и окном, и удалять все, что у меня было раньше, чтобы определить шарнир в классе дверей. Затем продолжайте работать, пока не столкнетесь с ситуацией, когда я могу повторно использовать некоторые части для нескольких объектов (ручку, фрейм и т. Д.).
- Никогда не детализировать объект до тех пор, пока есть не только ...
- Никогда не дублировать код, который может быть использован повторно.
С помощью этого эмпирического правила я могу быстро получить код и обычно он сходится до уровня детализации, достаточного для удовлетворения потребностей.
Затем с опытом вы получите представление о том, насколько глубоко вы хотите, чтобы ваши объекты были деталями без постоянного повторного факторизации ваших объектов, которые требуют много времени. Однако я обнаружил, что повторный факторинг занимает много времени, но не так много, как проектирование вещи вплоть до самого начала. Рефакторинг почти неизбежен, поэтому лучше начать рефакторинг рано и часто.
в любом случае ... мой два цента, я надеюсь, что это поможет.
У меня нет времени на полный ответ («хотя я думаю, что это хороший вопрос), но я думаю, что важно отключить концепцию объекта в программировании от физических объектов. Многие (если не большинство) объекты в программировании напрямую не представляют физические объекты. И использование этого как единственной метафоры серьезно мешает вашей способности думать о проблеме в целом. –
+1 для комментария, но я думаю, что легче получить первое понимание физических объектов и обобщить позже (может потребоваться бутылка вина или два ..;)) –
Если вам нужна дверная ручка по какой-то причине, она должна * не * быть объектом. Большинство программ, которые имеют двери, вообще не докучают дверными ручками. –