Проектирование игровых и бизнес- программ Разработка архитектуры, устойчивой к изменениям Автор: Кирилл Лебедев, компания Evosquare askofen@mail.ru Научный.

Презентация:



Advertisements
Похожие презентации
Школьная форма Презентация для родительского собрания.
Advertisements

Урок повторения по теме: «Сила». Задание 1 Задание 2.
Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Типовые расчёты Растворы
1. Определить последовательность проезда перекрестка
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от

Разработал: Учитель химии, биологии высшей квалификационной категории Баженов Алексей Анатольевич.
Michael Jackson
Ф. Т. Алескеров, Л. Г. Егорова НИУ ВШЭ VI Московская международная конференция по исследованию операций (ORM2010) Москва, октября 2010 Так ли уж.

1 Знаток математики Тренажер Таблица умножения 2 класс Школа 21 века ®м®м.

Рисуем параллелепипед Известно, что параллельная проекция тетраэдра, без учета пунктирных линий, однозначно определяется заданием проекций его вершин (рис.
Двоичная система счисления АЛФАВИТ: 1, 10, 11, 100, 101, 110, 111, 1 000, 1 001, 1010, , 1 100, 1 101, 1 110, 1 111, ,
1 Стадион ФИШТ в городе Сочи Стадион ФИШТ в городе Сочи Спортивные объекты к олимпиаде 2014 г. 3.
Проектирование архитектуры ИСО 1. UML 2 Структура определения языка 4.
Развивающая викторина для детей "Самый-самый " Муниципальное общеобразовательное учреждение средняя общеобразовательная школа 7 ст. Беломечётской.
Транксрипт:

Проектирование игровых и бизнес- программ Разработка архитектуры, устойчивой к изменениям Автор: Кирилл Лебедев, компания Evosquare Научный руководитель: С.В. Сычев, Система «ТРИЗ-ШАНС»

2 Часть I. Теория

3 Задача проектирования Человеку нужна не вещь, а ее функция Человеку нужна не вещь, а ее функция Задача AI-водителя – управление игровым автомобилем Задача AI-водителя – управление игровым автомобилем У любого модуля может быть одна главная полезная функция (ГПФ) и несколько вспомогательных полезных функций (ВПФ) У любого модуля может быть одна главная полезная функция (ГПФ) и несколько вспомогательных полезных функций (ВПФ) AI-водитель может рисовать траекторию движения во время тестирования и отладки игры AI-водитель может рисовать траекторию движения во время тестирования и отладки игры Задача проектирования – создание системы, которая выполняет главную и вспомогательные полезные функции Задача проектирования – создание системы, которая выполняет главную и вспомогательные полезные функции

4 Идеальная система С точки зрения ТРИЗ: «Идеальная техническая система это система, вес, объем и площадь которой стремятся к нулю, хотя ее способность выполнять работу при этом не уменьшается. Иначе говоря, идеальная система это когда системы нет, а функция ее сохраняется и выполняется». Альтшуллер Г.С. Творчество как точная наука. М.: «Советское радио», С. 122 – 127. Применительно к программированию: Идеальная программа – когда программы нет, а функция ее выполняется Такое определение: Звучит дико Но помогает сконцентрироваться на реальных задачах и отсечь все лишнее

5 Этапы развития «кода» Развертывание Развертывание Процесс усложнения «кода», обрастания его дополнительными модулями, классами... Процесс усложнения «кода», обрастания его дополнительными модулями, классами... Свертывание Свертывание Средство борьбы со сложностью Средство борьбы со сложностью Количество полезных функций, выполняемых «кодом», остается тем же, а количество структур данных, модулей сокращается Количество полезных функций, выполняемых «кодом», остается тем же, а количество структур данных, модулей сокращается

6 Волнообразная модель эволюции технических систем Сформулирована Ю.П. Саламатовым и И.М. Кондраковым в 1984 году Сформулирована Ю.П. Саламатовым и И.М. Кондраковым в 1984 году Ю. Саламатов «Система развития законов техники». В сб.: Шанс на приключение / Сост. А.Б. Селюцкий. – Петрозаводск: Карелия, – с. 141.

7 Развертывание Код выполняет мало полезных функций, содержит мало классов Код выполняет мало полезных функций, содержит мало классов Количество классов возрастает пропорционально количеству полезных функций Количество классов возрастает пропорционально количеству полезных функций Отдельные классы преобразуются в иерархии Отдельные классы преобразуются в иерархии Количество полезных функций не возрастает, а количество классов увеличивается Количество полезных функций не возрастает, а количество классов увеличивается Связи между классами одной иерархии становятся нетривиальными Связи между классами одной иерархии становятся нетривиальными Этапы развития «кода»

8 Свертывание Разнородные объекты объединяются в группы Разнородные объекты объединяются в группы Классы – в иерархии Классы – в иерархии Объекты – в массивы и списки Объекты – в массивы и списки Иерархии «схлопываются» в классы Иерархии «схлопываются» в классы «Уникальные» решения заменяются стандартными «Уникальные» решения заменяются стандартными Этапы развития «кода»

9 Волна 1-ая

10 Этап 1.1. Один объект Дан объект, которым надо управлять Дан объект, которым надо управлять Он – один Он – один Пишем класс – и не «заморачиваемся» Пишем класс – и не «заморачиваемся» Волна 1-ая Стадия развертывания

11 Пример: Игра Pulse Racer Об игре: Футуристические гонки в жанре Combat Racing Футуристические гонки в жанре Combat Racing Персонажи ездят и сражаются на открытых автомобилях (картах) Персонажи ездят и сражаются на открытых автомобилях (картах) Из оружия: мины, ракеты Из оружия: мины, ракетыЗадача: Разработка AI-водителя Требования к AI: 1.Должен объезжать автомобили соперников 2.И т.д.

12 Пример: Игра Pulse Racer Алгоритм: 1.Получить автомобили соперников на определенном расстоянии от AI 2.Перестроить траекторию движения AI таким образом, чтобы не столкнуться с соперниками

13 Пример: Игра Pulse Racer Создаем «датчик» (класс CCarSensor) для наблюдения за автомобилями соперников... Создаем «датчик» (класс CCarSensor) для наблюдения за автомобилями соперников......и не «паримся»...и не «паримся»

14 Этап 1.2. Несколько разнородных объектов Мало объектов – работаем с каждым уникально Мало объектов – работаем с каждым уникально Много объектов – как сгруппировать? Много объектов – как сгруппировать? Волна 1-ая Стадия развертывания

15 Пример: Игра Pulse Racer Требования: 1.Объезжать машины соперников 2.Подбирать power-upы 3.Избегать наезда на мины Заводим по «датчику» для каждого объекта. Заводим по «датчику» для каждого объекта. Если «датчиков» много как ими управлять? Если «датчиков» много как ими управлять?

16 Решение: Поместить датчики в иерархию?

17 Недостатки «Датчики» возвращают разные объекты «Датчики» возвращают разные объекты Какую виртуальную функцию объявить в базовом классе? Какую виртуальную функцию объявить в базовом классе?

18 Этап 1.3. Помещаем разнородные объекты в контекст Контекст – это определенная точка зрения Контекст – это определенная точка зрения С этой точки зрения различия между объектами не важны С этой точки зрения различия между объектами не важны Точка зрения задается решаемой задачей Точка зрения задается решаемой задачей «Для чего мы используем эти объекты? Что мы делаем с ними дальше?» «Для чего мы используем эти объекты? Что мы делаем с ними дальше?» Волна 1-ая Стадия свертывания

19 Пример: Игра Pulse Racer Важны не типы объектов, а их влияние на поведение AI Важны не типы объектов, а их влияние на поведение AI Вместо конкретных объектов, получаем только ту информацию о них, которая важна для алгоритма Вместо конкретных объектов, получаем только ту информацию о них, которая важна для алгоритма

20 Волна 2-ая

21 Этап 2.1. Разнородные объекты вылезают за границы контекста Не все объекты вписываются в рамки классификации Не все объекты вписываются в рамки классификации Класс иерархии содержит методы, которые не объявлены в базовом классе Класс иерархии содержит методы, которые не объявлены в базовом классе Волна 2-ая Стадия развертывания

22 Пример: Игра Pulse Racer Требование: При выборе power-upа учитывать параметры AI-игрока: здоровье, набранные очки, положение на трассе среди других игроков Для наблюдения за каждым параметров вводим свой «датчик»

23 Не все так просто Новые «датчики» возвращают разные объекты Новые «датчики» возвращают разные объекты Не получается создать единый интерфейс для всех «датчиков» Не получается создать единый интерфейс для всех «датчиков» Как быть? Как быть?

24 Этап 2.2. Выносим различия в отдельный контекст Ищем точку зрения, с которой различия не важны Ищем точку зрения, с которой различия не важны «Для чего мы используем эти различия? Где они нужны?» «Для чего мы используем эти различия? Где они нужны?» Контекст 1Контекст 2 Волна 2-ая Стадия свертывания

25 Пример: Игра Pulse Racer Нужно не точное значение параметра, а некий вес Нужно не точное значение параметра, а некий вес Вводим «обобщенный» вес, характеризующий параметр игрока Вводим «обобщенный» вес, характеризующий параметр игрока Распределяем «датчики» по двум иерархиям: одна следит за объектами на трассе, другая – за параметрами игрока Распределяем «датчики» по двум иерархиям: одна следит за объектами на трассе, другая – за параметрами игрока

26 Пример: Игра Pulse Racer Группируем «датчики» в массивы Группируем «датчики» в массивы AI-водитель содержит два массива «датчиков» AI-водитель содержит два массива «датчиков»

27 Этап 2.3. Свертываем объекты в контекстах Один класс вместо иерархии Один класс вместо иерархии Находим оптимальную форму представления данных и функций Находим оптимальную форму представления данных и функций Контекст 1Контекст 2 Волна 2-ая Стадия свертывания

28 Пример: Игра Pulse Racer «Свертываем» классы каждой иерархии в отдельный класс «Свертываем» классы каждой иерархии в отдельный класс Так или иначе «датчики» иерархии CTargetSensor обращались за информацией к игровому миру – группируем эти обращения в единый класс Так или иначе «датчики» иерархии CTargetSensor обращались за информацией к игровому миру – группируем эти обращения в единый класс Так или иначе «датчики» иерархии CGameSensor обращались за информацией к игровому объекту – группируем эти обращения в единый класс Так или иначе «датчики» иерархии CGameSensor обращались за информацией к игровому объекту – группируем эти обращения в единый класс

29 Этапы свертывания 1.Свертывание на уровне интерфейсов 2.Свертывание на уровне реализации

30 Методический вывод Программа – иерархия слоев Программа – иерархия слоев Слои образуются по отношению «использования» Слои образуются по отношению «использования» При свертывании различия между объектами переносятся с верхнего слоя на нижний При свертывании различия между объектами переносятся с верхнего слоя на нижний Слой 1 Слой 2 Слой 3 Слой 4 развертывание свертывание Образование разнородных объектов Перенос различий на нижние слои

31 Вынесение различий в нижние слои CAIControl CTargetSensors CCarSensorCPowerUpSensorCMineSensor CTargetSensor Стало CAIControl CCarSensorCPowerUpSensorCMineSensor Было Слой 1 Слой 2 Слой 3 Слой 4 Слой 5

32 Этап 2.4. Поглощение свернутым объектом его надсистемы Объект поглощает контекст, т.е. берет на себя функции системы, которая его использует Объект поглощает контекст, т.е. берет на себя функции системы, которая его использует Контекст Волна 2-ая Стадия свертывания

33 Выбор направления движения

34 Выбор направления движения Состояние игрока Направление (цель) движения

35 Выбор направления движения

36 Поглощение классов и объектов Объект aTargetSensor поглощает объект aNavigator Объект aTargetSensor поглощает объект aNavigator Класс CTargetSensor поглощает класс CNavigator Класс CTargetSensor поглощает класс CNavigator anAIControl Было Слой 1 Слой 2 Слой 3 aNavigator aTargetSensor anAIControl Стало aTargetSensor

37 Методический вывод На этапе развертывания над системой надстраиваются новые слои На этапе развертывания над системой надстраиваются новые слои На этапе свертывания нижние слои поглощают средние слои На этапе свертывания нижние слои поглощают средние слои Т. обр., процесс усложнения и упрощения кода бесконечен Т. обр., процесс усложнения и упрощения кода бесконечен Слой 1 Слой 2 Слой 3 Слой 4 развертывание свертывание Образование разнородных объектов Направление поглощения нижними слоями верхних

38 Часть II. Практика

39 Сформулируйте ГПФ системы Сформулируйте главную полезную функцию Сформулируйте главную полезную функцию Для AI-водителя – управление игровым автомобилем Для AI-водителя – управление игровым автомобилем Сформулируйте вспомогательные полезные функции Сформулируйте вспомогательные полезные функции Для AI-водителя – рисование траектории движения во время тестирования и отладки игры Для AI-водителя – рисование траектории движения во время тестирования и отладки игры Совет 1

40 Задайте параметры порядка Задайте ключевые параметры, вокруг которых будет строится классификация Задайте ключевые параметры, вокруг которых будет строится классификация Эти параметры должны упорядочить проектируемую систему Эти параметры должны упорядочить проектируемую систему В качестве параметров порядка лучше брать не объекты, а действия В качестве параметров порядка лучше брать не объекты, а действия Распишите операции, которые должна выполнить программа, для достижения ГПФ Распишите операции, которые должна выполнить программа, для достижения ГПФ Совет 2

41 Примеры ключевых параметров порядка 1.Получить цель движения 2.Двинуться в сторону цели Управление игровым автомобилем: 1.Подойти к автомобилю 2.Открыть дверцу 3.Залезть в салон 4.Закрыть дверцу Войти в салон автомобиля:

42 Проектируйте структуры данных под задачу... В процессе эволюции модели структуры данных могут сильно изменяться В процессе эволюции модели структуры данных могут сильно изменяться Неизменными остаются выполняемые ими функции Неизменными остаются выполняемые ими функции Поэтому разрабатывайте структуры данных под конкретную задачу или группу задач... Поэтому разрабатывайте структуры данных под конкретную задачу или группу задач......а не навешивайте разнообразные задачи на готовую структуру данных...а не навешивайте разнообразные задачи на готовую структуру данных Совет 3

43 Классический пример Эта иерархия разработана для рисования Эта иерархия разработана для рисования При попытке использовать ее для других операций сталкиваемся с задачей При попытке использовать ее для других операций сталкиваемся с задачей

44 Проектируйте от «максимума потока» Мысленно увеличьте количество объектов, с которыми работает программа или ее часть: 1 – 10 – 100 – 1000 Мысленно увеличьте количество объектов, с которыми работает программа или ее часть: 1 – 10 – 100 – 1000 Проектирование автомобиля на 4 пассажира и пассажирского автобуса на 60 человек – разные задачи Проектирование автомобиля на 4 пассажира и пассажирского автобуса на 60 человек – разные задачи Если объекты однородны, увеличьте различия между ними Если объекты однородны, увеличьте различия между ними Одно дело – перевозить людей, другое – нефть или танки Одно дело – перевозить людей, другое – нефть или танки Посмотрите, где архитектура «разъедется» и начнет «глючить» Посмотрите, где архитектура «разъедется» и начнет «глючить» Перестройте архитектуру с учетом рекомендаций из данной презентации Перестройте архитектуру с учетом рекомендаций из данной презентации Мысленно проверьте еще раз Мысленно проверьте еще раз Совет 4

45 Убирайте различия вглубь Неправильно Правильно Совет 5

46 Избавляйтесь от структур данных средних слоев......передавая их функции структурам данных нижних слоев...передавая их функции структурам данных нижних слоев anAIControl Было Слой 1 Слой 2 Слой 3 aNavigator aTargetSensor anAIControl Стало aTargetSensor Совет 6

47 Литература 1.Альтшуллер Г.С. Творчество как точная наука. 2-е изд., доп. Петрозаводск: Скандинавия, 2004.(доступна здесь: Сайт Официального Фонда Г.С. Альтшуллера Электронная книга "Введение в ТРИЗ. Основные понятия и подходы" Ю. Саламатов «Система развития законов техники». В сб.: Шанс на приключение / Сост. А.Б. Селюцкий. – Петрозаводск: Карелия, С.В. Сычев, К.А. Лебедев. Как вспомнить и «так известное» - ri.ru/themes/method/creative/creative50.asp ri.ru/themes/method/creative/creative50.asphttp:// ri.ru/themes/method/creative/creative50.asp 6.С.В. Сычев, К.А. Лебедев. Освобождение узников оператора IF - ri.ru/themes/method/creative/creative57.asp ri.ru/themes/method/creative/creative57.asphttp:// ri.ru/themes/method/creative/creative57.asp 7.С.В. Сычев, К.А. Лебедев. О потерянном уровне - ri.ru/themes/method/creative/creative60.asp ri.ru/themes/method/creative/creative60.asphttp:// ri.ru/themes/method/creative/creative60.asp 8.С.В. Сычев, К.А. Лебедев. «Что увидишь, то и неси...» - ri.ru/themes/method/creative/creative51.asp ri.ru/themes/method/creative/creative51.asphttp:// ri.ru/themes/method/creative/creative51.asp 9.С.В. Сычев, К.А. Лебедев. «Неважно, где рисовать...» - ri.ru/themes/method/creative/creative52.asp ri.ru/themes/method/creative/creative52.asphttp:// ri.ru/themes/method/creative/creative52.asp 10.С.В. Сычев, К.А. Лебедев. «Пусть само проявится...» - ri.ru/themes/method/creative/creative56.asp ri.ru/themes/method/creative/creative56.asphttp:// ri.ru/themes/method/creative/creative56.asp 11.Г. Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на C++, 2-е изд./Пер с англ. – М.: "Издательство Бином", СПб: "Невский диалект", 1998 г. 12.Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. СПб: Питер, с.: ил. 13.Петер Коуд, Дэвид Норт, Марк Мейфилд. Объектные модели. Стратегии, шаблоны и приложения. М.: Издательство "ЛОРИ", с.: ил. 14.Мартин Фаулер. Рефакторинг: улучшение существующего кода. Пер. с англ. - СПб: Символ-Плюс, с.: ил. 15.Алан Шаллоуей, Джеймс Р. Тротт. Шаблоны проектирования. Новый подход к объектно- ориентированному анализу и проектированию: Пер. с англ. М.: Издательский дом "Вильямс", с.: ил.