О наследовании, иерархиях и проектировании (философское)
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 19.04.07 13:29
Оценка: 12 (1) -4 :)))
Нередко при проектировании программы разработчика одолевают «муки творчества»: возможен и один вариант, и другой – какой лучше выбрать? В условиях неопределенности программист выбирает подчас самый привычный вариант и нередко «промахивается». Расплата за «промахи» всегда одна – резкое усложнение архитектуры программы. Чем больше «промахов», тем больше усложнений. И где-то к середине проекта архитектура программы становится настолько сложной и запутанной, что даже самое, на первый взгляд, простое и небольшое изменение требует серьезной и кропотливой работы. Избежать подобных ошибок мог бы помочь проектировщику некий ориентир.

В теории решения изобретательских задач (ТРИЗ) таким ориентиром является понятие «идеальная система». Техническая система считается идеальной, если ее вес, объем и площадь стремятся к нулю, а способность выполнять работу при этом не уменьшается. Иными словами, идеальная техническая система – это когда системы нет, а ее функция выполняется.

Понятие идеальности очень важно при решении изобретательских задач. Оно помогает изобретателю сконцентрироваться на задаче и отвлечься от конкретных реализаций той или иной технической системы или подсистемы. Как бы сказали программисты, изобретатель начинает мыслить функциями (интерфейсами), а не конкретными реализациями. Такой подход к решению изобретательских задач не случаен, т.к. увеличение степени идеальности – один из законов развития технических систем. А как обстоят дела в программировании?

Ответу на этот вопрос и посвящена презентация «Проектирование игровых и бизнес-программ. Разработка архитектуры, устойчивой к изменениям», которая была показана на Конференции разработчиков игр 2007. В презентации демонстрируется, что понятие «идеальная программа» существует и в программировании, и что это понятие можно успешно использовать для решения задач проектирования.
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
Re: О наследовании, иерархиях и проектировании (философское)
От: IT Россия linq2db.com
Дата: 19.04.07 13:43
Оценка: 1 (1)
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>Ответу на этот вопрос и посвящена презентация «Проектирование игровых и бизнес-программ. Разработка архитектуры, устойчивой к изменениям», которая была показана на Конференции разработчиков игр 2007. В презентации демонстрируется, что понятие «идеальная программа» существует и в программировании, и что это понятие можно успешно использовать для решения задач проектирования.


Ниасилил. Сайт жутко тормозит. Отдельный файлик ещё можно было бы подождать пока загрузится. А сидеть ждать постраничнкую загрузку и пялиться тем временем на идиотские цитаты времени нет.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: О наследовании, иерархиях и проектировании (философск
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 19.04.07 13:51
Оценка:
Здравствуйте, IT, Вы писали:

IT>Ниасилил. Сайт жутко тормозит. Отдельный файлик ещё можно было бы подождать пока загрузится. А сидеть ждать постраничнкую загрузку и пялиться тем временем на идиотские цитаты времени нет.


Цитаты можно пропустить, нажав на ссылку "Далее".

P.S.: По-любому презентация требует вдумчивого просмотра.
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
Re[3]: О наследовании, иерархиях и проектировании (философск
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.04.07 14:00
Оценка: 1 (1)
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>P.S.: По-любому презентация требует вдумчивого просмотра.


Одна из заповедей фотографа: "Зритель задерживается у фотографии ровно настолько, насколько его задерживает сама фотография".


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: О наследовании, иерархиях и проектировании (философск
От: IT Россия linq2db.com
Дата: 19.04.07 14:14
Оценка:
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>Цитаты можно пропустить, нажав на ссылку "Далее".


Так это сделано специально?

КЛ>P.S.: По-любому презентация требует вдумчивого просмотра.


После издевательства с цитатами уже как-то не очень хочется.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: О наследовании, иерархиях и проектировании (философск
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 19.04.07 14:27
Оценка:
Здравствуйте, IT, Вы писали:

КЛ>>Цитаты можно пропустить, нажав на ссылку "Далее".


IT>Так это сделано специально?


Цитаты вставлялись не мной, и поэтому поводу я Вам сказать ничего не могу. Если Вы хотите посмотреть презентацию в виде файла PPT, то можно дождаться того момента, когда она будет выложена на сайте Конференции разработчиков игр (думаю, это будет не раньше, чем через месяц). Или я могу выслать Вам ее на email.

В любом случае, давайте закроем обсуждение чужого сайта. Буду рад, если у Вас будет что сказать по существу.
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
Re: О наследовании, иерархиях и проектировании (философское)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.04.07 14:32
Оценка: 15 (1) :))) :))) :)
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>Ответу на этот вопрос и посвящена презентация «Проектирование игровых и бизнес-программ. Разработка архитектуры, устойчивой к изменениям», которая была показана на Конференции разработчиков игр 2007. В презентации демонстрируется, что понятие «идеальная программа» существует и в программировании, и что это понятие можно успешно использовать для решения задач проектирования.


Хватило сил дочитать до 27-го слайда. В очередной раз понял, чем программисты отличаются от других людей -- все те этапы, которые вы расписывали на 27-и слайдах, в голове программиста проносятся в автоматическом режиме за доли секунды.

Кстати, в очередной раз не соглашусь с IT -- цитаты между слайдами для меня оказались гораздо интереснее, чем содержание презентации.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[5]: О наследовании, иерархиях и проектировании (философск
От: Lloyd Россия  
Дата: 19.04.07 14:32
Оценка: :))
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>В любом случае, давайте закроем обсуждение чужого сайта. Буду рад, если у Вас будет что сказать по существу.


Интересно, а почему они этот самый ТРИЗ не применили при разработке сайта?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: О наследовании, иерархиях и проектировании (философск
От: IT Россия linq2db.com
Дата: 19.04.07 14:51
Оценка: +1 :)
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>В любом случае, давайте закроем обсуждение чужого сайта. Буду рад, если у Вас будет что сказать по существу.


Я бы и рад что-нибудь сказать, да такого издевательства над собой не смог выдержать.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: О наследовании, иерархиях и проектировании (философск
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 19.04.07 14:54
Оценка:
Здравствуйте, eao197, Вы писали:

E>Хватило сил дочитать до 27-го слайда. В очередной раз понял, чем программисты отличаются от других людей -- все те этапы, которые вы расписывали на 27-и слайдах, в голове программиста проносятся в автоматическом режиме за доли секунды.


Вот пример
Автор: igna
Дата: 03.03.07
реального обсуждения, где "не пронеслось".
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
Re[3]: О наследовании, иерархиях и проектировании (философск
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 19.04.07 15:13
Оценка:
Здравствуйте, Кирилл Лебедев, Вы писали:

E>>Хватило сил дочитать до 27-го слайда. В очередной раз понял, чем программисты отличаются от других людей -- все те этапы, которые вы расписывали на 27-и слайдах, в голове программиста проносятся в автоматическом режиме за доли секунды.


КЛ>Вот пример
Автор: igna
Дата: 03.03.07
реального обсуждения, где "не пронеслось".


И вот еще один пример
Автор: eao197
Дата: 28.02.07
, где интуиция подвела и не сработала.
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
Re[4]: О наследовании, иерархиях и проектировании (философск
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.04.07 15:20
Оценка:
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>И вот еще один пример
Автор: eao197
Дата: 28.02.07
, где интуиция подвела и не сработала.


Да, тоже хороший пример. Спасибо, что следите за моим творчеством.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: О наследовании, иерархиях и проектировании (философское)
От: FDSC Россия consp11.github.io блог
Дата: 19.04.07 15:30
Оценка:
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>Требования к AI:


КЛ> 1. Должен объезжать автомобили соперников

КЛ> 2. И т.д.

Угу, очень точное, понятное и развёрнутое описание задач

Фактически это предложение по введению дополнительных абстрактых слоёв. Не помню, у кого-то в подписи стоит по этому поводу

Вообще не понимаю, зачем всё это писать на очевидных примерах и причём тут сокращение кода программы, когда он всё равно не сокращается. Скорее, рушится структура программы при "поглощении" классов.
Где тут новая методика? Где тут вообще методика? Всё уже давно всем известно на интуитивном уровне
Re[3]: О наследовании, иерархиях и проектировании (философск
От: FDSC Россия consp11.github.io блог
Дата: 19.04.07 15:31
Оценка:
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>Здравствуйте, eao197, Вы писали:


E>>Хватило сил дочитать до 27-го слайда. В очередной раз понял, чем программисты отличаются от других людей -- все те этапы, которые вы расписывали на 27-и слайдах, в голове программиста проносятся в автоматическом режиме за доли секунды.


КЛ>Вот пример
Автор: igna
Дата: 03.03.07
реального обсуждения, где "не пронеслось".


Ну и как же применять ваши принципы с точки зрения наследования квадрата от прямоугольника?
Re: О наследовании, иерархиях и проектировании (философское)
От: ZevS Россия  
Дата: 19.04.07 16:00
Оценка: +1 :)
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>Понятие идеальности очень важно при решении изобретательских задач. Оно помогает изобретателю сконцентрироваться на задаче и отвлечься от конкретных реализаций той или иной технической системы или подсистемы. Как бы сказали программисты, изобретатель начинает мыслить функциями (интерфейсами), а не конкретными реализациями. Такой подход к решению изобретательских задач не случаен, т.к. увеличение степени идеальности – один из законов развития технических систем. А как обстоят дела в программировании?


На мой взгляд, тезис: чем меньше система, тем она идеальней, в случае ПО не так актуален. Больное место ПО, не "размеры", а качество выполнения основной и прочих функций. И сисмета тем идеальнее, чем точнее она выполняет свои функции. Идеальная программа — программа без ошибок. Все прочее только отвлекает внимание.
Re[5]: О наследовании, иерархиях и проектировании (философск
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.04.07 16:30
Оценка: +2
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>В любом случае, давайте закроем обсуждение чужого сайта. Буду рад, если у Вас будет что сказать по существу.


По существу могу дать совет.

Выложи ppt-ху в свои файлы на rsdn и дай на нее ссылку. Всем будет приятно и спокойно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: О наследовании, иерархиях и проектировании (философское)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 19.04.07 16:38
Оценка:
Здравствуйте, Кирилл Лебедев,

Вопросы по существу.

Вот эта картинка на основе каких данных получена?

Вот этот пример ключевых параметров. По сути, здесь в роли ключа сортировки выступает "время, прошедшее c момента X". Или имеется ввиду что-то другое?

Ну, и терминология, как вечно больное место:


Хорошо, что хоть не "парадигма, как взгляд на умозрительные конструкции".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: О наследовании, иерархиях и проектировании (философск
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 19.04.07 18:21
Оценка: 2 (1) +1 -1
Здравствуйте, FDSC, Вы писали:

FDS>Ну и как же применять ваши принципы с точки зрения наследования квадрата от прямоугольника?


Мне кажется, что ответ дан в этом слайде, а конкретный пример приведен здесь.

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

Еще конкретнее. Если мы пишем иерархию, чтобы упростить рисование, то нафига нам понадобилось добавлять в класс прямоугольника методы SetWidth() и SetHeight(), а в класс квадрата — метод SetSide()? А если — не для рисования, то тогда для чего вообще городится эта иерархия? Какую задачу она решает? И какой код помогает упростить?

Собственно, обо всем этом говорится в здесь.
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
Re[2]: О наследовании, иерархиях и проектировании (философск
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 19.04.07 18:41
Оценка: -1
Здравствуйте, FDSC, Вы писали:

FDS>Угу, очень точное, понятное и развёрнутое описание задач


Для приведенного в презентации примера подходит. Там сказано, что это — одна из задач. У меня не было цели рассказывать обо всех задачах, с которыми сталкивается программист при проектировании AI.

FDS>Фактически это предложение по введению дополнительных абстрактых слоёв. Не помню, у кого-то в подписи стоит по этому поводу


Слои не только добавляются, но и схлопываются. Об этом сказано здесь.

Кроме того, рекомендую прочесть еще вот это
Автор: Кирилл Лебедев
Дата: 16.02.07
сообщение.

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


Если пример "очевиден", то:

  1. Почему участники обсуждения
    Автор: igna
    Дата: 03.03.07
    так и не пришли к "очевидному" решению, которое описано в презентации?
  2. Почему Вы не уловили связь между задачей, изложенной в презентации, и обсуждением про квадрат и прямоугольник
    Автор: igna
    Дата: 03.03.07
    ? На мой взгляд, эта связь тоже очевидна.

FDS>Где тут новая методика? Где тут вообще методика?


Например, здесь, здесь и здесь демонстрируются конкретные методы унификации различий и сокращения кода.

Я прочитал и просмотрел достаточное количество книжек по проектированию. И описаний этих методов там не заметил.

FDS>Всё уже давно всем известно на интуитивном уровне


Это все слова, слова... Разберите конкретную задачу хотя бы из тех, что обсуждаются на форуме "Архитектура". И тогда можно будет посмотреть, как эта задача решается без методики и как — с методикой.
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
Re[2]: О наследовании, иерархиях и проектировании (философск
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 19.04.07 18:45
Оценка:
Здравствуйте, ZevS, Вы писали:

ZS>На мой взгляд, тезис: чем меньше система, тем она идеальней, в случае ПО не так актуален. Больное место ПО, не "размеры", а качество выполнения основной и прочих функций.


Не скажите. Чем больше программа, тем сложнее ее сопровождать. Согласитесь, что в "ветвистой" программе, как эта

if (одно)
{
}
else if (другое)
{
}
else if (третье)
{
}
и т.д.


разобраться сложнее.
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.