SlideShare a Scribd company logo
1 of 51
FrontendImpl используем только вместе с оператором new!
Frontend frontend = new FrontendImpl(…);
Во всех классах и методах используем только интерфейс Frontend
Аналогично для всех классов и интерфейсов
Если какая-то функция из Impl должны быть вызвана «снаружи»
объявляйте ее в интерфейсе
Переименовываем Frontend в FrontendImpl
Создаем пустой интерфейс Frontend
FrontendImpl implements Frontend
Компилируем, видим что ничего не изменилось
Меняем везде (кроме new) FrontendImpl на Frontend
Компилляция не проходит
Добавляем в Frontend все нужные обявления методов
public interface Frontend extends Abonent {
MessageSystem getMessageSystem();
void setId(Integer sessionId, Integer userId);
}
public interface AccountService extends Abonent {
MessageSystem getMessageSystem();
Integer getUserId(String name);
}
public void run(){
while(true){
messageSystem.execForAbonent(this); //обработка сообщений
removeDeadUsers(); //убираем «мертвых» пользователей
TimeHelper.sleep(SLEEP_PERIOD); //ждем сообщений
}
}
―
―
final private Map<Integer, GameSession> userToSessions =
new HashMap<Integer, GameSession>();
public void run(){
while(true){
processMessages();
doGMStep();
replicateGamesToFrontend();
TimeHelper.sleep(SLEEP_TIME);
}
}
processMessages() – обработка сообщений от Frontend (команды пользователей)
doGMStep() – расчет изменений не связанных с текущими командами пользователей
replicateGamesToFrontend() – отправка на Frontend изменений User Session
processMessages()
doGMStep()
replicate ()
processMessages()
doGMStep()
replicate ()
…
…
―
―
―
―
―
―
―
―
―
―
―
18. Распределение классов по пакетам.
Циклические зависимости между пакетами
19. Архитектура игрового сервера. Схема зависимостей модулей
20. Процесс работы игрового сервера, репликация
interface Unit{
void move(Direction direction);
void attack(Target target);
…
}
class Group implements Unit{
private List<Unit> units;
…
void add(Unit unit){…}
void remove(Unit unit){…}
}
class UnitImpl … {
private Weapon weapon = new WeaponImpl(); //default value
private Armor armor = new ArmorImpl (); //default value
private Gear gear = new GearImpl (); //default value
void setWeapon(Weapon weapon){…}
void setArmor(Armor armor){…}
void setGear(Gear gear){…}
}
abstract class UnitBuilder {
protected UnitImpl unit;
public Unit getUnit(){return unit;}
public createUnit(){ this.unit = new UnitImpl(); }
public abstract assembleWeapon();
public abstract assembleArmor();
public abstract assembleGear();
}
class T3485Builder extends UnitBuilder {
public void assembleWeapon() {this.unit.setWeapon(new D5T85BM());}
public void assembleArmor() {this.unit.setWeapon(new A45());}
public void assembleGear() {this.unit.setWeapon(new T348560());}
}
class TigerPzKpfwVIBuilder extends UnitBuilder {
public void assembleWeapon() {this.unit.setWeapon(new KwK105cm42L28());}
public void assembleArmor() {this.unit.setWeapon(new A45());}
public void assembleGear() {this.unit.setWeapon(new T348560());}
}
class UnitFactory {
private UnitBuilder unitBuilder;
public void setBuilder(UnitBuilder currentBuilder){this.unitBuilder = currentBuilder;}
public Unit getUnit(){return unitBuilder.getUnit();}
public void constructUnit(){
unitBuilder.createUnit();
unitBuilder. assembleWeapon();
unitBuilder. assembleArmor();
unitBuilder. assembleGear();
}
}
interface DamageVisitor{
void visit(Weapon weapon);
void visit(Armor armor);
void visit(Gear gear);
}
interface UnitPart{
void accept(DamageVisitor visitor);
}
class Weapon implements UnitPart{
…
void accept(DamageVisitor visitor){
visitor.visit(this);
}
…
}
class UnitImpl {
private UnitPart[] parts;
public void accept(DamageVisitor visitor){
for(UnitPart part : parts){
part.accept(visitor);
}
}
}
class FireDamage implements DamageVisitor{
public void visit(Weapon weapon){…}
public void visit(Armor armor){…}
public void visit(Gear gear){…)
}
class EMPDamage implements DamageVisitor{
public void visit(Weapon weapon){…}
public void visit(Armor armor){…}
public void visit(Gear gear){…)
}
class ProjectileDamage implements DamageVisitor{
public void visit(Weapon weapon){…}
public void visit(Armor armor){…}
public void visit(Gear gear){…)
}
Java весна 2013 лекция 4

More Related Content

What's hot

разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
Eugeniy Tyumentcev
 
презентация л.р. №5
презентация л.р. №5презентация л.р. №5
презентация л.р. №5
student_kai
 

What's hot (20)

разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знания
 
02 if for
02 if for02 if for
02 if for
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
 
Something about Golang
Something about GolangSomething about Golang
Something about Golang
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
 
функции в Java script
функции в Java scriptфункции в Java script
функции в Java script
 
ES6. Генераторы
ES6. ГенераторыES6. Генераторы
ES6. Генераторы
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
Statements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent StatementsStatements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent Statements
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
 
Javascript functions
Javascript functionsJavascript functions
Javascript functions
 
презентация л.р. №5
презентация л.р. №5презентация л.р. №5
презентация л.р. №5
 
Subprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDLSubprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDL
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 

Viewers also liked

Java осень 2012 лекция 6
Java осень 2012 лекция 6Java осень 2012 лекция 6
Java осень 2012 лекция 6
Technopark
 
Проектирование графических интерфейсов лекция 2
Проектирование графических интерфейсов лекция 2Проектирование графических интерфейсов лекция 2
Проектирование графических интерфейсов лекция 2
Technopark
 
Java весна 2013 лекция 2
Java весна 2013 лекция 2Java весна 2013 лекция 2
Java весна 2013 лекция 2
Technopark
 
Java весна 2013 лекция 6
Java весна 2013 лекция 6Java весна 2013 лекция 6
Java весна 2013 лекция 6
Technopark
 
АиСД осень 2012 лекция 10
АиСД осень 2012 лекция 10АиСД осень 2012 лекция 10
АиСД осень 2012 лекция 10
Technopark
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7
Technopark
 
Highload осень 2012 лекция 8
Highload осень 2012 лекция 8Highload осень 2012 лекция 8
Highload осень 2012 лекция 8
Technopark
 
Java осень 2012 лекция 3
Java осень 2012 лекция 3Java осень 2012 лекция 3
Java осень 2012 лекция 3
Technopark
 
C++ осень 2012 лекция 8
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8
Technopark
 
Java весна 2013 лекция 7
Java весна 2013 лекция 7Java весна 2013 лекция 7
Java весна 2013 лекция 7
Technopark
 
Бизнес и системный анализ весна 2013 лекция 1
Бизнес и системный анализ весна 2013 лекция 1Бизнес и системный анализ весна 2013 лекция 1
Бизнес и системный анализ весна 2013 лекция 1
Technopark
 
СУБД осень 2012 вестник 3
СУБД осень 2012 вестник 3СУБД осень 2012 вестник 3
СУБД осень 2012 вестник 3
Technopark
 
Java весна 2013 лекция 8
Java весна 2013 лекция 8Java весна 2013 лекция 8
Java весна 2013 лекция 8
Technopark
 
Проектирование графических интерфейсов лекция 5
Проектирование графических интерфейсов лекция 5Проектирование графических интерфейсов лекция 5
Проектирование графических интерфейсов лекция 5
Technopark
 
Java осень 2012 лекция 4
Java осень 2012 лекция 4Java осень 2012 лекция 4
Java осень 2012 лекция 4
Technopark
 
СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8
Technopark
 
C++ осень 2012 лекция 5
C++ осень 2012 лекция 5C++ осень 2012 лекция 5
C++ осень 2012 лекция 5
Technopark
 
Тестирование весна 2013 лекция 1
Тестирование весна 2013 лекция 1Тестирование весна 2013 лекция 1
Тестирование весна 2013 лекция 1
Technopark
 
Бизнес и системный анализ весна 2013 лекция 8
Бизнес и системный анализ весна 2013 лекция 8Бизнес и системный анализ весна 2013 лекция 8
Бизнес и системный анализ весна 2013 лекция 8
Technopark
 

Viewers also liked (19)

Java осень 2012 лекция 6
Java осень 2012 лекция 6Java осень 2012 лекция 6
Java осень 2012 лекция 6
 
Проектирование графических интерфейсов лекция 2
Проектирование графических интерфейсов лекция 2Проектирование графических интерфейсов лекция 2
Проектирование графических интерфейсов лекция 2
 
Java весна 2013 лекция 2
Java весна 2013 лекция 2Java весна 2013 лекция 2
Java весна 2013 лекция 2
 
Java весна 2013 лекция 6
Java весна 2013 лекция 6Java весна 2013 лекция 6
Java весна 2013 лекция 6
 
АиСД осень 2012 лекция 10
АиСД осень 2012 лекция 10АиСД осень 2012 лекция 10
АиСД осень 2012 лекция 10
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7
 
Highload осень 2012 лекция 8
Highload осень 2012 лекция 8Highload осень 2012 лекция 8
Highload осень 2012 лекция 8
 
Java осень 2012 лекция 3
Java осень 2012 лекция 3Java осень 2012 лекция 3
Java осень 2012 лекция 3
 
C++ осень 2012 лекция 8
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8
 
Java весна 2013 лекция 7
Java весна 2013 лекция 7Java весна 2013 лекция 7
Java весна 2013 лекция 7
 
Бизнес и системный анализ весна 2013 лекция 1
Бизнес и системный анализ весна 2013 лекция 1Бизнес и системный анализ весна 2013 лекция 1
Бизнес и системный анализ весна 2013 лекция 1
 
СУБД осень 2012 вестник 3
СУБД осень 2012 вестник 3СУБД осень 2012 вестник 3
СУБД осень 2012 вестник 3
 
Java весна 2013 лекция 8
Java весна 2013 лекция 8Java весна 2013 лекция 8
Java весна 2013 лекция 8
 
Проектирование графических интерфейсов лекция 5
Проектирование графических интерфейсов лекция 5Проектирование графических интерфейсов лекция 5
Проектирование графических интерфейсов лекция 5
 
Java осень 2012 лекция 4
Java осень 2012 лекция 4Java осень 2012 лекция 4
Java осень 2012 лекция 4
 
СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8
 
C++ осень 2012 лекция 5
C++ осень 2012 лекция 5C++ осень 2012 лекция 5
C++ осень 2012 лекция 5
 
Тестирование весна 2013 лекция 1
Тестирование весна 2013 лекция 1Тестирование весна 2013 лекция 1
Тестирование весна 2013 лекция 1
 
Бизнес и системный анализ весна 2013 лекция 8
Бизнес и системный анализ весна 2013 лекция 8Бизнес и системный анализ весна 2013 лекция 8
Бизнес и системный анализ весна 2013 лекция 8
 

Similar to Java весна 2013 лекция 4

паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
guestfc8ae0
 
Как программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуКак программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногу
AndreyGeonya
 
Интерфейсы
ИнтерфейсыИнтерфейсы
Интерфейсы
REX-MDK
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
7bits
 

Similar to Java весна 2013 лекция 4 (20)

Odd
OddOdd
Odd
 
Thread
ThreadThread
Thread
 
Tricky Java Generics
Tricky Java GenericsTricky Java Generics
Tricky Java Generics
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
 
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
 
Архитектура минимальных Ui компонент
Архитектура минимальных Ui компонентАрхитектура минимальных Ui компонент
Архитектура минимальных Ui компонент
 
Метапрограммирование: строим конечный автомат. Сергей Федоров ➠ CoreHard Aut...
Метапрограммирование: строим конечный автомат. Сергей Федоров ➠  CoreHard Aut...Метапрограммирование: строим конечный автомат. Сергей Федоров ➠  CoreHard Aut...
Метапрограммирование: строим конечный автомат. Сергей Федоров ➠ CoreHard Aut...
 
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.ТаксиМетапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
 
Кирилл Харьков
Кирилл ХарьковКирилл Харьков
Кирилл Харьков
 
Веселая ферма. Соседи.
Веселая ферма. Соседи.Веселая ферма. Соседи.
Веселая ферма. Соседи.
 
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
 
Как программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуКак программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногу
 
"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)
 
C# Desktop. Занятие 12.
C# Desktop. Занятие 12.C# Desktop. Занятие 12.
C# Desktop. Занятие 12.
 
Субъекторная модель
Субъекторная модельСубъекторная модель
Субъекторная модель
 
Интерфейсы
ИнтерфейсыИнтерфейсы
Интерфейсы
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
 

More from Technopark

СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
Technopark
 

More from Technopark (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 

Java весна 2013 лекция 4

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8. FrontendImpl используем только вместе с оператором new! Frontend frontend = new FrontendImpl(…); Во всех классах и методах используем только интерфейс Frontend Аналогично для всех классов и интерфейсов Если какая-то функция из Impl должны быть вызвана «снаружи» объявляйте ее в интерфейсе
  • 9. Переименовываем Frontend в FrontendImpl Создаем пустой интерфейс Frontend FrontendImpl implements Frontend Компилируем, видим что ничего не изменилось Меняем везде (кроме new) FrontendImpl на Frontend Компилляция не проходит Добавляем в Frontend все нужные обявления методов
  • 10. public interface Frontend extends Abonent { MessageSystem getMessageSystem(); void setId(Integer sessionId, Integer userId); } public interface AccountService extends Abonent { MessageSystem getMessageSystem(); Integer getUserId(String name); }
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17. public void run(){ while(true){ messageSystem.execForAbonent(this); //обработка сообщений removeDeadUsers(); //убираем «мертвых» пользователей TimeHelper.sleep(SLEEP_PERIOD); //ждем сообщений } }
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. final private Map<Integer, GameSession> userToSessions = new HashMap<Integer, GameSession>(); public void run(){ while(true){ processMessages(); doGMStep(); replicateGamesToFrontend(); TimeHelper.sleep(SLEEP_TIME); } } processMessages() – обработка сообщений от Frontend (команды пользователей) doGMStep() – расчет изменений не связанных с текущими командами пользователей replicateGamesToFrontend() – отправка на Frontend изменений User Session
  • 29.
  • 30.
  • 32.
  • 33.
  • 35.
  • 36.
  • 37.
  • 38. 18. Распределение классов по пакетам. Циклические зависимости между пакетами 19. Архитектура игрового сервера. Схема зависимостей модулей 20. Процесс работы игрового сервера, репликация
  • 39.
  • 40.
  • 41.
  • 42. interface Unit{ void move(Direction direction); void attack(Target target); … } class Group implements Unit{ private List<Unit> units; … void add(Unit unit){…} void remove(Unit unit){…} }
  • 43.
  • 44. class UnitImpl … { private Weapon weapon = new WeaponImpl(); //default value private Armor armor = new ArmorImpl (); //default value private Gear gear = new GearImpl (); //default value void setWeapon(Weapon weapon){…} void setArmor(Armor armor){…} void setGear(Gear gear){…} } abstract class UnitBuilder { protected UnitImpl unit; public Unit getUnit(){return unit;} public createUnit(){ this.unit = new UnitImpl(); } public abstract assembleWeapon(); public abstract assembleArmor(); public abstract assembleGear(); }
  • 45. class T3485Builder extends UnitBuilder { public void assembleWeapon() {this.unit.setWeapon(new D5T85BM());} public void assembleArmor() {this.unit.setWeapon(new A45());} public void assembleGear() {this.unit.setWeapon(new T348560());} } class TigerPzKpfwVIBuilder extends UnitBuilder { public void assembleWeapon() {this.unit.setWeapon(new KwK105cm42L28());} public void assembleArmor() {this.unit.setWeapon(new A45());} public void assembleGear() {this.unit.setWeapon(new T348560());} }
  • 46. class UnitFactory { private UnitBuilder unitBuilder; public void setBuilder(UnitBuilder currentBuilder){this.unitBuilder = currentBuilder;} public Unit getUnit(){return unitBuilder.getUnit();} public void constructUnit(){ unitBuilder.createUnit(); unitBuilder. assembleWeapon(); unitBuilder. assembleArmor(); unitBuilder. assembleGear(); } }
  • 47.
  • 48. interface DamageVisitor{ void visit(Weapon weapon); void visit(Armor armor); void visit(Gear gear); } interface UnitPart{ void accept(DamageVisitor visitor); }
  • 49. class Weapon implements UnitPart{ … void accept(DamageVisitor visitor){ visitor.visit(this); } … } class UnitImpl { private UnitPart[] parts; public void accept(DamageVisitor visitor){ for(UnitPart part : parts){ part.accept(visitor); } } }
  • 50. class FireDamage implements DamageVisitor{ public void visit(Weapon weapon){…} public void visit(Armor armor){…} public void visit(Gear gear){…) } class EMPDamage implements DamageVisitor{ public void visit(Weapon weapon){…} public void visit(Armor armor){…} public void visit(Gear gear){…) } class ProjectileDamage implements DamageVisitor{ public void visit(Weapon weapon){…} public void visit(Armor armor){…} public void visit(Gear gear){…) }