ООП: Где прекратить Абстрагировать

Прямое упрощение вашего кода:

while (
  some_very_long_computation &&
  another_very_long_computation
) {
  ...
}

Если вы хотите сохранить переменные a и b:

bool a, b;
while (
  (a = some_very_long_computation) &&
  (b = another_very_long_computation)
) {
  ...
}

Если вы не хотите чтобы поместить условия в условие while:

while (true) {
  bool a = some_very_long_computation;
  bool b = another_very_long_computation;
  if (!(a && b)) {
    break;
  }
  ...
}

Вы также можете создать вспомогательные лямбды (которые имеют доступ к локальным переменным):

auto fa = [&]() { return some_very_long_computation; };
auto fb = [&]() { return another_very_long_computation; };
while (fa() && fb()) {
  ...
}
8
задан Jon Limjap 20 October 2008 в 10:11
поделиться

3 ответа

  1. YAGNI (Вы Не, Должен Нуждаться в Нем). Не создавайте абстракции, Вы не видите непосредственное использование для или разумную причину. Таким образом, у Вас есть простая вещь, которая может стать более сложной, вместо сложные вещи, которые Вы стремились бы сделать более простым, но проиграть.
  2. Удостоверьтесь, что абстракции имеют смысл. Если они слишком далеки от действительности, слишком трудно для выравнивания по ширине... забывают это.
  3. Позвольте решению чувствовать себя естественным. Работа над ним, пока это не делает. Затем для незнакомого человека решение должно казаться столь очевидным, что он кричит, "как Вы, возможно, сделали его по-другому?".
  4. Не пытайтесь предсказать будущее. Вы не можете. При попытке покрыть все 10 возможных случаев, то Вы скоро обнаружите 11-й и больше, и будет более трудно реализовать его из-за предыдущих 10, с которыми не встречаются на практике. Сделайте это простым и легким для адаптации. Программное обеспечение должно быть изменено, но простота адаптации (гибкость) часто является намного лучшей стратегией, чем попытка покрыть все возможно возможные случаи заранее.
19
ответ дан 5 December 2019 в 07:37
поделиться

Возможно, этот вопрос должен состоять в том, где начать абстрагировать.

Примером, который Вы заключаете в кавычки, является классический пример недостаточной мысли о том, каковы объекты на самом деле, поскольку они - все в значительной степени то же - и вероятно были бы лучше выражены как единственный "GameObject".

Я также избегаю классификации sub свойствами объектов. Поскольку StaticGameObject и DynamicGameObject могут казаться logica, но вероятно лучше представлены контейнерным размещением - т.е. два списка один для статических объектов и один для динамического, таким образом позволив другой логике определить действия, а не сам объект, являющийся ответственным за управление чем-то за пределами, он - объем.

Иногда более трудно разработать то, что совместно используется группой вещей, которые Вы хотите представить в объекте - но это стоит сделать.

3
ответ дан 5 December 2019 в 07:37
поделиться

Я полагаю, что критерии могут быть выведены из четкого определения того, какова абстракция.

Вы обращаетесь к абстракции в Объектно-ориентированной парадигме программирования, где у Вас есть в Вашем распоряжении эти три принципа: 'абстракция' - 'инкапсуляция' - 'сокрытие информации или видимость'.

Абстракция является процессом выбора, какие атрибуты объекта относятся к Вашей системе, и который должен быть полностью проигнорирован.

Это означает, предел абстракции не касается так много количество понятий, которые Вы определяете (Плеер, Оружие, Маркеры...), но что Вы принимаете решение вставить те понятия.

Это - в основном медицинская сортировка, откуда Вы рассмотрите только понятия, что полезно для сервисов, которые необходимо определить.

Так польза критерии, чтобы начать писать нормальный код могли бы быть API, как программа затмения предполагает: API сначала.

Действительно, "Хорошие API требуют повторения дизайна", означая список объектов, Вы упоминающий в Вашем вопросе будете усовершенствованы, как необходимый API самостоятельно усовершенствован.

Плюс, API, средние, чтобы иметь четко определенные границы компонента и зависимости (как в 'Ядре - Плеере - по сравнению с UI - RenderableObject -'), означая очень подробный список Вы, упоминание не может быть просмотрено как длинный бесконечный список понятий, но должно быть ясно сгруппировано в различные функциональные периметры (или функциональные компоненты) от применимой архитектуры.

Так как API существуют для удовлетворения потребностей клиентов, Вы сохраните те объекты только потому, что они имеют смысл для клиента. Другие возражают, должен быть во 'внутренних' пакетах и никогда не относиться непосредственно никакими другими частями Вашего приложения.

Имея это в виду, советы @phjr имеют смысл ;)

0
ответ дан 5 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: