Черный ящик против повторного использования белого ящика - PullRequest
3 голосов
/ 19 сентября 2008

Каковы плюсы / минусы повторного использования черного ящика по сравнению с повторным использованием белого ящика?

Ответы [ 4 ]

8 голосов
/ 19 сентября 2008

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

Повторное использование белой коробки

Pro: модуль можно настроить в соответствии с конкретной ситуацией, что позволяет использовать его в других ситуациях
Против: Теперь у вас есть собственный результат, поэтому он усложняет ваш код.

Повторное использование черного ящика

Pro: простота и чистота
Против: Во многих случаях это просто невозможно

Вердикт:

Я предпочитаю черный ящик, когда это возможно.

3 голосов
/ 19 сентября 2008

белый ящик:

Плюсы:

  • простой (очень естественная концепция)
  • у вас больше контроля над вещами

минусы:

  • требует внутренних знаний о внутренние компоненты
  • может быть сложно реализовать (ограничения наследования OO)
    иногда это приводит к нарушению \ неправильным цепочкам наследования

Черный ящик:

плюсы:

  • слабое сцепление (дает позднее связывание и другие вкусности)

минусы:

  • не очевидно (код гораздо сложнее понять)
  • интерфейсы более хрупки, чем классы (то есть интерфейсы против наследования)
2 голосов
/ 19 сентября 2008

Я не уверен, что означают эти конкретные термины, поэтому я попытаюсь определить, чем они являются, прежде чем я продолжу:

  • Повторное использование черного ящика использует класс / функцию / код, не измененный в другом проекте
  • Повторное использование белого ящика берет класс / функцию / код из одного проекта и модифицирует его в соответствии с потребностями другого проекта.

Преимущества повторного использования черного ящика в том, что после того, как код написан, отлажен и протестирован, вы можете использовать его бесчисленное количество раз при различных обстоятельствах. Недостатком является то, что действительно многократно используемый код для «черного ящика» встречается редко и может потребовать времени и усилий для форматирования API и кода вызова и приведения его в соответствие с подходом «черного ящика» (без утечки контекста).

Преимущества повторного использования белого ящика в том, что вы действительно можете использовать свой код более одного раза без необходимости сначала извлекать его из исходного проекта. Вы просто копируете и модифицируете, и вы уже в пути. Этот тип повторного использования встречается гораздо чаще, но у него также есть несколько недостатков. В основном, если вы обнаружите ошибку в одной реализации, вам нужно проверить, чтобы убедиться, что она исправлена ​​во всех других реализациях. Это может быть трудно, если они расходятся широко, как это часто бывает.

1 голос
/ 19 сентября 2008

@ Кайл,

Повторное использование черного ящика означает, что вы используете компонент, не зная его внутренних компонентов. Все, что у вас есть, это интерфейс компонента.

Повторное использование белого ящика означает, что вы знаете, как реализован компонент. Обычно повторное использование белого ящика означает наследование класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...