- 0
архитектура без наследования. возможна ли?
-
Similar Content
-
By cyklop77
Помогите пожалуйста разобраться в вопросе организации кода в простейшей игре. и в результате скажите:
1. правильный первый вариант
2. правильный второй вариант
3. оба варианта правильные и используются в зависимости от ситуации
4. давно уже существует паттерн %patternname% и с успехом используется в такой ситуации
Допустим есть 2D-ландшафт, над ним летит корабль игрока. Корабль может стрелять ракетами.
Описываю первый вариант организации ООП-кода на js(в js контроллер и представление совмещены):
инициализация игры начинается с создания spaceView, который в свою очередь инициализирует:
ландшафт,
корабль игрока
PlayerShipView - корабль игрока. Он может стрельнуть ракетой(PlayerRocketView). То есть объект корабля связан с объектом ракеты
Ракета может столкнуться с ландшафтом. То есть объект ракеты связан с объектом spaceView
В результате:
Имеем 3 связанных объекта, но каждый из них содержит только свою функциональность(это плюс).
Но если в программе придётся что-нибудь менять(например отключить кораблю игрока возможность стрелять ракетами), то вносить правки придётся в разных местах программы(это минус).
Есть несколько глобальных переменных(это минус)
Описываю второй вариант организации ООП-кода на js(в js контроллер и представление совмещены):
инициализация игры начинается с создания spaceView, который в свою очередь инициализирует:
ландшафт,
корабль игрока,
ракеты(есть нажата кнопка "огонь")
и вообще все остальные объекты
Таким образом:
Если например игрок нажимает "огонь", то инициализация ракеты происходит в spaceView, а PlayerShipView вообще ничего не знает об объекте ракеты(это плюс).
Соответственно нет глобальных переменных(это плюс).
Но в spaceView содержится куча логики(всей игры, в котрой кроме корабля игрока и ракеты существует очень много других объектов).
Для наглядности я реализовал первый вариант здесь: https://github.com/zlodiak/space-1
В нём используются различные библиотечки типа backbone, underscore, но незнание их не мешает пониманию общей структуры программы
Не бейте(ногами), я знаю что вопрос для телепатов
-
By cyklop77
ребята, помогите пожалуйста советом
я сделал на backbone форму с валидацией: https://jsfiddle.net/9t1cwfrv/5/ .пока для простоты использовал только одно поле:
github: https://github.com/zlodiak/shippingCalculator1
проблема в том, что в финальной версии калькулятора полей будет много. поэтому мне хотелось бы чтобы каждое представление наследовало от какого-нибудь общего родительского 'класса' методы:
notValidMarkAdd(),
validMarkAdd()
иначе их придётся дублировать в каждом представлении
как бы это реализовать?
-
By cyklop77
помогите пожалуйста разобраться в в вопросе. привожу код на питоне, но сам язык здесь не важен потому что вопрос принципиальный. вот простыня кода, но чтобы ответить на вопрос смотреть его не обязательно:
здесь происходит приблизительно следующее. я создаю класс с общим для всех потомков свойством. затем классы для потомков, затем для каждого класса потомка фабрику, затем класс синглтон, который создаёт потомков(о которых я сказал чуть выше)
я поместил указатели на всех созданных потомков в переменную класса синглтона и в конце скрипты вывел всех потомков так:
for boat in World.boats: print(boat) for raft in World.rafts: print(raft) в результате получил в консоль следующий вывод:
(python3_env)kalinin@kalinin ~/python3/python3_files/boats4 $ python index.pyWorld: {'creared_at': 'Saturday, 05. December 2015 09:40AM'}worlds quantity: 1Boat: {'oars': 2, 'peoples': 7, 'speed': 60, 'color': 'blue', 'name': 'beda_0'}Boat: {'oars': 0, 'peoples': 10, 'speed': 100, 'color': 'yellow', 'name': 'beda_1'}Boat: {'oars': 0, 'peoples': 7, 'speed': 60, 'color': 'magenta', 'name': 'beda_2'}Boat: {'oars': 1, 'peoples': 9, 'speed': 60, 'color': 'red', 'name': 'beda_3'}Raft: {'sails': 1, 'peoples': 1, 'speed': 10, 'color': 'magenta', 'name': 'ra_0'}Raft: {'sails': 1, 'peoples': 2, 'speed': 30, 'color': 'blue', 'name': 'ra_1'}Raft: {'sails': 1, 'peoples': 2, 'speed': 10, 'color': 'magenta', 'name': 'ra_2'}Raft: {'sails': 0, 'peoples': 2, 'speed': 10, 'color': 'magenta', 'name': 'ra_3'}но совесть мне нашёптывает в одно ухо, что хорошо бы сделать по человечьи и, используя self, всех потомков поместить в переменную объекта, а не класса. однако дьявол в другое ухо нашёптывает, что если уж у меня синглтон по определению может существовать только в единственном экземпляре, то вполне допустимо оставить всё как есть(то есть использовать пременную класса)
опытные программисты, что посоветуете использовать для хранения указателей? переменную класса или переменную объекта?
-
Question
cyklop77
Link to comment
Share on other sites
1 answer to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.