Действительно ли Полиморфизм стоит увеличения связи?

Попробуйте добавить косую черту - <script src="/target/app.js"></script>

6
задан MighMoS 8 January 2009 в 21:54
поделиться

4 ответа

Все проблемы могут быть решены путем добавления уровня абстракции. Я использовал бы Ваш предложенный вариант и отделил бы Местоположение от Стороны, позволив getNext принимать объект, который разрешает направленный выбор. Вот (непротестированный) пример:

class Location; 

class IDirectionChooser
{
public:
  virtual bool ShouldIGoThisWay(Location & way) = 0;
};

class Location
{
public:
  virtual Location * GetNext(IDirectionChooser & chooser)
  {
    return nextLocation;
  }

  virtual Describe();
private:
  Location * nextLocation;
};

class Fork : public Location
{
public:
  virtual Location * GetNext(IDirectionChooser & chooser)
  {
    for (int i = 0; i < locations.size(); i++)
      if (chooser.ShouldIGoThisWay(*locations[i]))
        return locations[i];
  }
  virtual Describe();
private:
  vector<Location *> locations;
};

class Party : public IDirectionChooser
{
public:
  void Move()
  {
    currentLocation = currentLocation->GetNext(GetDirectionChooser());
  }

  virtual IDirectionChooser & GetDirectionChooser() { return *this; }

  virtual bool ShouldIGoThisWay(Location & way)
  {
    way.Describe();
    cout << "Do you want to go that way? y/n" << endl;

    char ans;
    cin >> ans;
    return ans == 'y';
  }
};
6
ответ дан 16 December 2019 в 21:47
поделиться

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

Правильность и простота должны быть конечной целью каждого проектного решения.

1
ответ дан 16 December 2019 в 21:47
поделиться

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

Как был упомянут:

  1. Полиморфизм должен использоваться для упрощения дизайна - который он сделал бы в этом случае, так хорошо определенный.
  2. У Вас есть проблема со связью - снова хорошо определенный, связь может привести к проблемам позже. Однако то, что это говорит мне, - то, что путем, которым Вы применяете полиморфизм, не мог бы быть лучший способ.
  3. Программирование к интерфейсам должно позволить Вам скрывать внутренние детали того, как система соединена и тем самым уменьшите связь.
1
ответ дан 16 December 2019 в 21:47
поделиться

Полиморфизм не предоставляет большей связи, я думаю, что они - отдельные вопросы.

На самом деле, если Вы будете программировать к интерфейсам и следовать за общей инверсией шаблонов управления затем, то Вы приведете к меньше или нулевая связь.

В Вас пример я не вижу, как местоположение связано с UserInterface?

Если это верно, связь может быть удалена через другой уровень абстракции промежуточный UserInterface и Местоположение, такое как LocationViewAdapter?

0
ответ дан 16 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

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