Можно ли переоценить?
Мой вопрос прост; Возможно ли переориентировать ваш код?
Сколько это слишком много? В какой момент вы отказываетесь от читабельности и удобства обслуживания ради ОО?
Я огромный OO человек, но иногда мне интересно, не усложняю ли я свой код....
Мысли?
17 ответов
Если вы думаете, что больше объектов более объектно-ориентировано, тогда да.
При выполнении объектно-ориентированного дизайна вам необходимо уравновесить пару сил. Большая часть ОО дизайна заключается в уменьшении и обработке сложности. Так что, если вы получаете очень сложные решения, вы не делаете слишком много ОО, но вы делаете это неправильно.
Мой совет не думать об этом. Это обычно приводит к чрезмерному или недостаточному выполнению ЧТО-ТО (если не ОО). Эмпирическое правило, которое я обычно использую, таково: если это облегчает задачу, оборачивая мою голову, я использую объект. Если другая парадигма облегчит мою голову, чем если бы я использовал объект, я использую это.
Эта стратегия еще не подвела меня.
Если вы обнаружите, что время, необходимое для полной реализации ОО в вашем проекте, без необходимости приводит к несоблюдению сроков, тогда да.
Должен быть компромисс между выпуском программного обеспечения и полной верностью OO. Как решить, зависит от человека, команды, проекта и организации, выполняющей проект.
Да, конечно, есть:-) объектно-ориентированные методы - это инструмент... если вы используете не тот инструмент для данной работы, вы будете слишком усложнять вещи (подумайте, когда ложка - это все, что вам нужно, это нож).
По мне, я сужу "сколько" по размеру и объему проекта. Если это небольшой проект, иногда он добавляет слишком много сложности. Если проект большой, вы все равно будете брать на себя эту сложность, но он окупится за простоту обслуживания, расширяемости и т. Д.
Я думаю, что ваш вопрос должен гласить: "Можете ли вы из-за архитектуры вашего приложения?"
И конечно ответ пока. ОО это просто подход к дизайну. Если вы тратите свое время на встраивание ненужной сложности в систему, потому что "Полиморфизм качается!". Тогда да, может быть, ты закончил OOing.
Сам ответ XP заключается в том, что независимо от того, какой подход вы предпочитаете (ОО, процедурный и т. Д.), Дизайн должен быть настолько сложным, насколько это необходимо.
Многие люди пытаются спроектировать свой код для максимальной гибкости повторного использования, не задумываясь о том, насколько вероятно это будет. Вместо этого разбейте свои уроки на основе написанной вами программы. Если у вас будет ровно один экземпляр конкретного объекта, вы можете рассмотреть возможность его объединения в содержащий объект.
Да, это определенно возможно - тоже обычное дело. Однажды я работал с парнем, который создал структуру данных для привязки к выпадающему списку, чтобы он мог позволить пользователям выбирать пол. Правда, это было бы полезно, если бы список возможных полов изменился, но их пока нет (мы не живем в Калифорнии)
Да, так же, как можно чрезмерно нормализовать дизайн базы данных.
Похоже, это одна из тех пуристических и прагматических дискуссий, которые никогда не закончатся. <: S
Возможно ли переориентировать ваш код?
Нет. Но возможно усложнить ваш код. Например, вы можете использовать шаблоны проектирования, чтобы использовать шаблоны проектирования. Но вы не можете чрезмерно ориентировать свой код. Ваш код либо объектно-ориентирован, либо нет. Точно так же, как ваш код либо хорошо разработан, либо нет.
Да, ты можешь. Например, если вы обнаружите, что создаете интерфейсы или абстрактные классы до того, как у вас есть для них два подтипа, то вы переусердствуете. Я часто вижу подобные мысли, когда разработчики (над) проектируют заранее. Я использую тестируемые методы разработки и рефакторинга, чтобы избежать такого поведения.
Я думаю, что четкий ответ - да, но в зависимости от домена, на который вы ссылаетесь, это может быть ДЕЙСТВИТЕЛЬНО да или меньше да. Если вы создаете высокоуровневые приложения.Net или Java, то я думаю, что это последнее, так как ОО в основном встроен в язык. С другой стороны, если вы работаете со встроенными приложениями, то опасность и вероятность того, что вы закончили работу, высоки. Нет ничего хуже, чем видеть, как действительно высокопоставленный человек входит во встроенный проект и усложняет вещи, которые они считают уродливыми, но представляют собой самый простой и быстрый способ сделать что-то.
Да, и это легко. Код не лучше просто потому, что он объектно-ориентированный, не лучше, чем просто потому, что он модульный или функциональный, или общий, или генеративный, или на основе потока данных, или на аспект, или на что-то еще.
Хороший код - это хороший код, потому что он хорошо спроектирован в своей парадигме программирования.
Хороший дизайн требует заботы.
Быть осторожным требует времени.
Пример для вашего случая: я видел ужасные кусочки Java, в которых, во имя "объектно-ориентированного", каждый класс реализует некоторый интерфейс, даже когда никакой другой класс никогда не реализует этот интерфейс. Иногда это взлом, но в других это действительно бесплатно.
В какой бы парадигме или идиоме вы ни писали код, слишком далеко, слишком много хорошего может сделать код более сложным, чем проблема. Некоторые люди скажут, когда эта точка будет достигнута, что код на самом деле даже не является, например, объектно-ориентированным.
Предполагается, что объектно-ориентированный код лучше организован, чтобы быть проще, понятнее или проще для понимания и усвоения в достаточно независимых частях. Использование механизмов объектно-ориентированного кодирования противоположно этой цели не приводит к объектно-ориентированному проектированию.
Я думаю, что бывают случаи, когда дизайн ОО может быть доведен до крайности, и даже в очень больших проектах код становится менее читабельным и обслуживаемым. Например, можно использовать базовый класс обуви и дочерние классы кроссовок, классической обуви и т. Д. Но я прочитал / пересмотрел код людей, где казалось, что они собирались создать классы ниже этого для NikeSneakers. и ReebokSneakers. Конечно, между ними есть различия, но чтобы иметь читаемый, поддерживаемый код, я считаю, что иногда важно расширить класс для адаптации к различиям, а не создавать новые дочерние классы для обработки различий.
Я думаю, что все может быть "перестарался". Это верно почти со всеми лучшими практиками, которые я могу придумать. Я видел цепочки наследования настолько сложными, что код был практически неуправляемым.
Я предполагаю, что это возможно, но трудно ответить на ваш вопрос абстрактно (без каламбура). Приведите пример с ОО.