Список форумов forum.alsor.net forum.alsor.net
Форум небольшого круга друзей
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

и так наследование...
На страницу Пред.  1, 2, 3, 4  След.
 
Начать новую тему   Ответить на тему    Список форумов forum.alsor.net -> IT-форум
Предыдущая тема :: Следующая тема  
Автор Сообщение
alsor



Зарегистрирован: 25.11.2005
Сообщения: 1166
Откуда: Киберпространство

СообщениеДобавлено: Ср Мар 11, 2009 1:54 pm    Заголовок сообщения: Ответить с цитатой

Snoopy писал(а):
при известной доле криворукости, можешь получить двухколесный танк и водоплавающий грузовик.


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

Я как раз и пытаюсь построить систему которая будет аддитивна по своей сути и которая будет устойчива к изменениям (в первую очередь к изменениям бизнес-логики). И если в такой системе без проблем сможет существовать двухколесный танк и воевать с водоплавающим грузовиком - то я буду считать что я своей цели достиг. Потому что, если учесть что для такого проекта как игра-стратегия типы и возможности конкретных юнитов это бизнес-логика, то поверь мне - скоро тебя попросят ввести в игру именно такие ужасные юниты, и даже еще круче к которым ты совершенно не был готов, а еще в добавок новые виды оружия, новые типы ландшафта и все что придет в голову накуренным сценаристам Smile. И как раз хорошая, объектно-ориентированная система должна такие изменения "пережить" не заставляя программиста переписывать кучу кода, а лишь дописывать необходимый код.

Поправка: пожалуйста прошу не трактовать фразу "дописывать код" как "дописать еще один else-if или case" Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Snoopy



Зарегистрирован: 29.11.2005
Сообщения: 1395

СообщениеДобавлено: Ср Мар 11, 2009 2:36 pm    Заголовок сообщения: Ответить с цитатой

teg писал(а):
Лёх, учись. Второй раз показывать не буду:

Код:
Unit u = getNextUnit();
if (u instnceof Tank) {
    //blah
} else if (u instanceof Truck) {
    //blah
} else if (u instanceof ManWithGun) {
    //blah
} else {
    throw new IllegalStateException("Засунь свой бесполезный Unit -- с ним ничего сделать нельзя");
}


Ну так-то ясно лучше:

Код:

Command c = getNextCommand();
if ("swim".equals(c) && unit.getAbilities().contains(Abilities.SWIM)) {
  new SwimProcessor().process(unit);
} else if ("walk".equals(c) && unit.getAbilities().contains(Abilities.WALK)) {
  new WalkProcessor().process(unit);
} else if ("fire".equals(c) && unit.getAbilities().contains(Abilities.FIRE)) {
  new FireProcessor().process(unit, anotherUnit);
} else {
  throw new IllegalStateException("Засунь свой бесполезный Command -- с ним ничего сделать нельзя");
}


Twisted Evil

PS ... и это мы еще не заглядывали внутрь Processor'ов! Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Snoopy



Зарегистрирован: 29.11.2005
Сообщения: 1395

СообщениеДобавлено: Ср Мар 11, 2009 2:57 pm    Заголовок сообщения: Ответить с цитатой

alsor писал(а):

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


Леш, ты со своими "способностями" и "командами" практически занимаешься тем, что реализуешь duck typing поверх java. Я не спорю - это офигенно расширяемо, аддитивно и позволяет (при желании) полностью избежать наследования. Но только зафига нужно изобретать этот фанерный велосипед, если уже есть нормальный - железный и со спицами? Давай тогда скажем честно - статическая типизация сакс, питон рулез - и фигле, я не буду спорить! Cool

alsor писал(а):

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


Ага, если они будут там существовать по твоей воле, а не из-за случайно залетевшего в систему дятла. Twisted Evil
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alsor



Зарегистрирован: 25.11.2005
Сообщения: 1166
Откуда: Киберпространство

СообщениеДобавлено: Ср Мар 11, 2009 3:25 pm    Заголовок сообщения: Ответить с цитатой

Snoopy писал(а):
Ну так-то ясно лучше:

Код:

Command c = getNextCommand();
if ("swim".equals(c) && unit.getAbilities().contains(Abilities.SWIM)) {
new SwimProcessor().process(unit);
} else if ("walk".equals(c) && unit.getAbilities().contains(Abilities.WALK)) {
new WalkProcessor().process(unit);
} else if ("fire".equals(c) && unit.getAbilities().contains(Abilities.FIRE)) {
new FireProcessor().process(unit, anotherUnit);
} else {
throw new IllegalStateException("Засунь свой бесполезный Command -- с ним ничего сделать нельзя");
}



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

Snoopy писал(а):
Леш, ты со своими "способностями" и "командами" практически занимаешься тем, что реализуешь duck typing поверх java. Я не спорю - это офигенно расширяемо, аддитивно и позволяет (при желании) полностью избежать наследования. Но только зафига нужно изобретать этот фанерный велосипед, если уже есть нормальный - железный и со спицами? Давай тогда скажем честно - статическая типизация сакс, питон рулез - и фигле, я не буду спорить!


Во-первых: избежать наследования ну ни разу не было моей целью! Свои цели я тебе разъяснил выше.
Во-вторых: все что ты приводил в качестве примеров выше гораздо сильнее подвержено слабой типизации нежели мой код (взять тот же пример с ДАО где ты просто открытым текстом сказал "ну и что же такого что здесь чуток пострадает типизация".
В-третьих: ну приведи ты уже хоть малюююсенький примерчик того как ты будешь использовать свои объекты. мне просто уже очень интересно на это взглянуть. Только давай договоримся - если у тебя там будет if-else подобный приведенному выше (с диспетчирезацией по типу) - то уже я буду иметь право плюнуть тебе в лицо Smile

Цитата:
Ага, если они будут там существовать по твоей воле, а не из-за случайно залетевшего в систему дятла.


Ты действительно считаешь что такой баг будет страшнее "закрепощенной" системы? Где малейшее изменение потребует переделки кода, которая привнесет гораздо более коварных и неуловимых багов?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
alsor



Зарегистрирован: 25.11.2005
Сообщения: 1166
Откуда: Киберпространство

СообщениеДобавлено: Ср Мар 11, 2009 3:30 pm    Заголовок сообщения: Ответить с цитатой

Знаешь, Мишка, помоему ты мне так и не приведешь никаких примеров... потому что как только ты попытаешься их написать - ты сразу увидишь все проблемы и захочешь переделать свои объекты.
_________________
JIT happens!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Snoopy



Зарегистрирован: 29.11.2005
Сообщения: 1395

СообщениеДобавлено: Ср Мар 11, 2009 3:41 pm    Заголовок сообщения: Ответить с цитатой

alsor писал(а):

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


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

alsor писал(а):
Во-первых: избежать наследования ну ни разу не было моей целью!


Здрасьте! Вообще-то с этого и начался разговор. Wink

alsor писал(а):
Во-вторых: все что ты приводил в качестве примеров выше гораздо сильнее подвержено слабой типизации нежели мой код


Разница! Мои примеры приводят типы от конкретного к общему, твои - смешивают в одну кучу вообще разнородные сущности. Либо я действительно не понимаю, чего ты хочешь добиться своими "командами-способностями".

alsor писал(а):
В-третьих: ну приведи ты уже хоть малюююсенький примерчик того как ты будешь использовать свои объекты.


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

alsor писал(а):
Только давай договоримся - если у тебя там будет if-else подобный приведенному выше (с диспетчирезацией по типу) - то уже я буду иметь право плюнуть тебе в лицо Smile


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

alsor писал(а):
Ты действительно считаешь что такой баг будет страшнее "закрепощенной" системы?


It depends. К тому же я не уверен, что одно позволит на 100% избежать другого.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alsor



Зарегистрирован: 25.11.2005
Сообщения: 1166
Откуда: Киберпространство

СообщениеДобавлено: Ср Мар 11, 2009 4:00 pm    Заголовок сообщения: Ответить с цитатой

Snoopy писал(а):
Здрасьте! Вообще-то с этого и начался разговор. Wink

Если бы не смайлик в конце я бы уже бежал на вокзал за билетом чтобы приехать и сильно тебя пнуть! сто раз повторил что я не против наследования!

Snoopy писал(а):
Как ты этим всем собрался разруливать без if-else-else - я пока что совершенно без понятия


Код тоже выложу вечером. Но поверь мне "разруливать без if-else-else" это и есть одна из моих целей, и называется это свойство кода - аддитивность. тоже уже несколько раз про это написал.

Snoopy писал(а):
К тому же я не уверен, что одно позволит на 100% избежать другого.


Ну я надеюсь ты хотя бы согласен со мной в том, что изменения неизбежны? Потому что в противном случае мы точно никогда не придем ни к какому мнению...
_________________
JIT happens!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Snoopy



Зарегистрирован: 29.11.2005
Сообщения: 1395

СообщениеДобавлено: Чт Мар 12, 2009 11:52 am    Заголовок сообщения: Ответить с цитатой

http://www.rapidshare.ru/960109 - критикуйте, предлагайте альтернативы. Жду кода от алсора.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
teg



Зарегистрирован: 20.12.2005
Сообщения: 410

СообщениеДобавлено: Чт Мар 12, 2009 12:17 pm    Заголовок сообщения: Ответить с цитатой

Критиковать мы не будем. Замечу только, что ты, когда дошло до дела, не стал чётко следовать идее жёсткого наследования. Т.е. как бы, говоря одно, а код пишешь уже другой.

А вот теперь к тебе пришёл заказчег и говорит:

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

Время пошло...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Snoopy



Зарегистрирован: 29.11.2005
Сообщения: 1395

СообщениеДобавлено: Чт Мар 12, 2009 12:31 pm    Заголовок сообщения: Ответить с цитатой

teg писал(а):
Критиковать мы не будем. Замечу только, что ты, когда дошло до дела, не стал чётко следовать идее жёсткого наследования.


Здрасьте! Как раз таки стал - все четко наследуется друг от друга, никаких "списков возможностей" и "текстовых команд".

teg писал(а):

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


Учитывая, что до сих пор в игре такого понятия, как "вооружение" вообще не было и все стреляли из одного ствола - да, чтоб его добавить, придется снова попотеть. У тебя есть вариант как сделать так, чтобы не пришлось и миномет на танке появился сам собой? Давай, предлагай, рассмотрим. Только вместе с кодом.

teg писал(а):
Время пошло...


С вас, г-н заказчик $500/day - я и так вчера перцы не посадил. Twisted Evil
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alsor



Зарегистрирован: 25.11.2005
Сообщения: 1166
Откуда: Киберпространство

СообщениеДобавлено: Чт Мар 12, 2009 12:49 pm    Заголовок сообщения: Ответить с цитатой

у меня рапидшара закрыта. выложи плиз тут тот кусочек кода которые твои объекты использует, сами классы я вечером посмотрю. Может у тебя там тест какой... или просто main..
_________________
JIT happens!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Snoopy



Зарегистрирован: 29.11.2005
Сообщения: 1395

СообщениеДобавлено: Чт Мар 12, 2009 1:04 pm    Заголовок сообщения: Ответить с цитатой

Код:

import java.util.ArrayList;
import java.util.List;

public class Main {

  protected static final double MAX_MOVE = 100;

  public static void main(String[] args) {

    Motocycle motocycle1 = new Motocycle();
    Motocycle motocycle2 = new Motocycle();
    Tank tank1 = new Tank();
    StelthTank stelth = new StelthTank();
    Building building1 = new Building();

    final List<Unit> units = new ArrayList<Unit>();
    units.add(motocycle1);
    units.add(motocycle2);
    units.add(building1);
    units.add(tank1);
    units.add(stelth);

    for (int step = 0; step < 10; step++) {
      runOnce(units);
      shotOnce(units);
    }

  }

  private static void shotOnce(final List<Unit> units) {
    final UnitInstanceOfFilter<Damageable> damageableFilter = new UnitInstanceOfFilter<Damageable>(Damageable.class);
    final UnitInstanceOfFilter<Weapon> shootersFilter = new UnitInstanceOfFilter<Weapon>(Weapon.class);
    List<Weapon> shooters = shootersFilter.filter(units);
    List<Damageable> targets = damageableFilter.filter(units);

    if (targets.isEmpty() || shooters.isEmpty()) {
      return;
    }
    int shooterNo = (int)(Math.random() * shooters.size());
    Weapon shooter = shooters.get(shooterNo);

    int targetNo = (int)(Math.random() * targets.size());
    Damageable target = targets.get(targetNo);

    shooter.fire(target);
    new ListProcessor<Damageable>().processList(damageableFilter.filter(units), new BlowUpIfDestroyedAction(units));
  }

  private static void runOnce(final List<Unit> units) {
    final UnitInstanceOfFilter<Moveable> runnableFilter = new UnitInstanceOfFilter<Moveable>(Moveable.class);
    List<Moveable> runners = runnableFilter.filter(units);
    if (runners.isEmpty()) {
      return;
    }
    int runnerNo = (int)(Math.random() * runners.size());
    int xMove = (int)(Math.random() * MAX_MOVE);
    int yMove = (int)(Math.random() * MAX_MOVE);
    new MoveAction(xMove, yMove).execute(runners.get(runnerNo));
  }

}


ЗЫ Фильтр, да, работает через instanceof (точнее через isAssignableFrom). Но это единственное (и имхо оправданное) место в коде, по крайней мере пока.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alsor



Зарегистрирован: 25.11.2005
Сообщения: 1166
Откуда: Киберпространство

СообщениеДобавлено: Чт Мар 12, 2009 1:21 pm    Заголовок сообщения: Ответить с цитатой

Ну приблизительно понятно. У меня тоже была мысль что если вводить какие-то иерархии (ну или хотя бы маркерные интерфейсы) то будут присудствовать некие сущности (типа твоих фильтров) которые будут управлять юнитами, а не сами юниты будут исполнять свои команды (хорошо это или плохо понятия не имею).

Свой код вчера не успел доделать - седня выложу.
_________________
JIT happens!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
dimitr



Зарегистрирован: 28.11.2005
Сообщения: 1124

СообщениеДобавлено: Чт Мар 12, 2009 2:36 pm    Заголовок сообщения: Ответить с цитатой

вопрос из зала: я правильно понимаю, что имеет место дилемма "либо instance-of, либо методы-пустышки в классах-наследниках юнита" и tertium non datur? Речь про реализацию наследованием а-ля Майк.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Snoopy



Зарегистрирован: 29.11.2005
Сообщения: 1395

СообщениеДобавлено: Чт Мар 12, 2009 3:13 pm    Заголовок сообщения: Ответить с цитатой

Tertium нам хочет показать Лешка, насколько я его понял - реализовать все действия над юнитами как отдельные управляющие инстансы и хранить в однотипных юнитах набор действий, который над ними возможен. У меня есть ИМХО, что от instanceof или какой-то другой идентификации видов объектов (в его случае - скорее всего команд и действий) это не избавит, а неочевидности в код добавит - т.к. вся статика перейдет в динамику. Но поглядим, что он нам вечером покажет - может я и неправ.

ЗЫ Вообще изначально разговор был о том, могут ли базовые типы расширяться в наследниках и использоваться по-разному в разных контекстах задачи. (это так, для тех, кто не видел нашу асечную переписку).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dimitr



Зарегистрирован: 28.11.2005
Сообщения: 1124

СообщениеДобавлено: Чт Мар 12, 2009 3:14 pm    Заголовок сообщения: Ответить с цитатой

Snoopy писал(а):
Фильтр, да, работает через instanceof (точнее через isAssignableFrom). Но это единственное (и имхо оправданное) место в коде, по крайней мере пока.

IMHO, как только в строго полиморфной реализации появляется instance-of, это первый звоночек кривого дизайна...


Последний раз редактировалось: dimitr (Чт Мар 12, 2009 3:27 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dimitr



Зарегистрирован: 28.11.2005
Сообщения: 1124

СообщениеДобавлено: Чт Мар 12, 2009 3:23 pm    Заголовок сообщения: Ответить с цитатой

Snoopy писал(а):
Tertium нам хочет показать Лешка

я специально оговорился - в твоем подходе, т.е. иерархии разнообразия юнитов.

Snoopy писал(а):
могут ли базовые типы расширяться в наследниках и использоваться по-разному в разных контекстах задачи

речь про использование инстанса MovableUnit в какой-либо подсистеме именно как MoveableUnit, а не как Unit? (это пример)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Snoopy



Зарегистрирован: 29.11.2005
Сообщения: 1395

СообщениеДобавлено: Чт Мар 12, 2009 3:39 pm    Заголовок сообщения: Ответить с цитатой

dimitr писал(а):

IMHO, как только в строго полиморфной реализации появляется instance-of, это первый звоночек кривого дизайна...


Я не спорю, но у меня он всего один и более-менее объяснимый. Как придумать дизайн совсем без instanceof (как вариант - "магических строк/чисел") я пока не представляю - может Лешка покажет...

dimitr писал(а):

я специально оговорился - в твоем подходе, т.е. иерархии разнообразия юнитов.


Насколько я понимаю - да, по крайней мере в java.

dimitr писал(а):

речь про использование инстанса MovableUnit в какой-либо подсистеме именно как MoveableUnit, а не как Unit? (это пример)


Ага.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dimitr



Зарегистрирован: 28.11.2005
Сообщения: 1124

СообщениеДобавлено: Чт Мар 12, 2009 3:54 pm    Заголовок сообщения: Ответить с цитатой

Snoopy писал(а):
Насколько я понимаю - да, по крайней мере в java

а если не требовать от юнита быть интерфейсом?

Код:
class Unit {
public:
  virtual move() {}
  virtual fire() {}
  virtual swim() {}

protected:
  Unit(); // на даем создавать инстансы класса
};

class Motorcycle : public Unit {
public:
  virtual move() { /* overload */ }
  virtual fire() { /* overload */}

  Motorcycle() {}
};


или аналогичную логику нельзя реализовать на Java?

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



Зарегистрирован: 29.11.2005
Сообщения: 1395

СообщениеДобавлено: Чт Мар 12, 2009 4:05 pm    Заголовок сообщения: Ответить с цитатой

Некраси... <- Backspase, Backspase, Backspase, Backspase...

...и непонятно, что делать для методов, возвращающих значение. Тупо ноль может и не прокатить... Rolling Eyes
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alsor



Зарегистрирован: 25.11.2005
Сообщения: 1166
Откуда: Киберпространство

СообщениеДобавлено: Чт Мар 12, 2009 4:07 pm    Заголовок сообщения: Ответить с цитатой

dimitr писал(а):
а если не требовать от юнита быть интерфейсом?

Код:
class Unit {
public:
virtual move() {}
virtual fire() {}
virtual swim() {}

protected:
Unit(); // на даем создавать инстансы класса
};

class Motorcycle : public Unit {
public:
virtual move() { /* overload */ }
virtual fire() { /* overload */}

Motorcycle() {}
};


или аналогичную логику нельзя реализовать на Java?


По-моему в этом примере ты как раз симитировал понятие интерфейса. В Java это делается легко - вместо того чтобы закрывать конструктор, можно пометить класс как abstract. Либо вообще как interface если у тебя не будет в нем совсем никакой реализации.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
teg



Зарегистрирован: 20.12.2005
Сообщения: 410

СообщениеДобавлено: Чт Мар 12, 2009 4:42 pm    Заголовок сообщения: Ответить с цитатой

Тем временем, заказчег начинает нервничать...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Snoopy



Зарегистрирован: 29.11.2005
Сообщения: 1395

СообщениеДобавлено: Чт Мар 12, 2009 4:47 pm    Заголовок сообщения: Ответить с цитатой

teg писал(а):
Тем временем, заказчег начинает нервничать...


Не отвлекаемся, пишем свой вариант, пишем...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dimitr



Зарегистрирован: 28.11.2005
Сообщения: 1124

СообщениеДобавлено: Чт Мар 12, 2009 5:12 pm    Заголовок сообщения: Ответить с цитатой

alsor писал(а):
По-моему в этом примере ты как раз симитировал понятие интерфейса. В Java это делается легко - вместо того чтобы закрывать конструктор, можно пометить класс как abstract. Либо вообще как interface если у тебя не будет в нем совсем никакой реализации.

понятие интерфейса в С++ неродное - там это pure abstract class, аналог джавовского interface. Я как раз предложил отказаться от pure, оставив тем не менее abstract. Тогда заглушки можно делать в родительском классе вместо туевой хучи дочерних. Но это на самом деле легкий оффтопик, ибо класс/интерфейс юнита, реализующий все операции подряд - фигня полная.

snoopy писал(а):
...и непонятно, что делать для методов, возвращающих значение. Тупо ноль может и не прокатить...

да хоть объект пусть возвращает, лишь бы одинаковый для всех. Надеюсь, у тебя не предполагается, что реализация no-op для некой команды должна возвращать разные результаты для разных видов юнитов?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alsor



Зарегистрирован: 25.11.2005
Сообщения: 1166
Откуда: Киберпространство

СообщениеДобавлено: Чт Мар 12, 2009 5:47 pm    Заголовок сообщения: Ответить с цитатой

dimitr писал(а):
понятие интерфейса в С++ неродное - там это pure abstract class, аналог джавовского interface. Я как раз предложил отказаться от pure, оставив тем не менее abstract. Тогда заглушки можно делать в родительском классе вместо туевой хучи дочерних. Но это на самом деле легкий оффтопик, ибо класс/интерфейс юнита, реализующий все операции подряд - фигня полная.


Ну я понял. Но это действительно оффтопик - потому что это лишь сократит количество ручного кодирования, но не изменит сути.

Учитывая что Заказчик в лице Тэга уже начинает нервничать Wink , такой подход нам не поможет - он опять же не аддитивен. При малейшем изменении/добавлении мы полезем в класс Unit и будем его лопатить, а так как это у нас чуть ли не самый "используемый" класс - это потенциально внесет хрупкость в систему.

Учитывая что класс Unit очень сильно "используется" в нашем коде - он должен быть максимально абстрактным (есть четкая метрика показывающая отношение абстрактности/нестабильности). У Мишки эта абстракция нечто вроде - "Unit это нечто что может ездить, стрелять, плавать, скрываться и ....". В моем подходе на который я взял курс абстракция такая "Unit это нечто умеющее исполнять команды".
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов forum.alsor.net -> IT-форум Часовой пояс: GMT + 4
На страницу Пред.  1, 2, 3, 4  След.
Страница 3 из 4

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB