Jump to content
  • 0

архитектура без наследования. возможна ли?


cyklop77
 Share

Question

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

 

допустим есть игра, написанная в ООП-стиле. основной объект game порождает объект level. далее level порождает кучу объектов танков, самолётиков, солдатиков и т.д. логично всё это организовать через наследование. это удобно потому что если солдатику понадобится какое-нибудь свойство из level или из game, то он его получит

 

но можно обойтись без наследования. в этом случае придётся при создании объекта в конструктор передавать родительский объект. например объекту level понадобилось имя игрока:

 



var Game = function() {
this.username = 'petya'
this.levelObj = new Level(this);
};

var Level = function(gameObj) {
this.gameObj = gameObj;
this.method1();
};
Level.prototype = {
method1: function() {
console.log(this.gameObj.username);
}
}


    

итак, существуют 2 способа организации кода: с использованием наследования(1) и без использования наследования(2)

 

вопрос. это 2 равноценных способа? или второй способ это велосипед, который лучше не использовать чтобы не запутаться на определённом этапе?

 

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

 

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Объект Tank не может быть унаследован от объекта Level. Это противоречит всем принципам ООП. И вообще, судя по тексту, вы очень слабо разбираетесь в ООП.
Обычно есть некая глобальная область видимости в которой существуют все экземпляры объектов. Таким образом любой объект может получить доступ к любому объекту.

Книжка на тему.

  • Like 1
Link to comment
Share on other sites

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.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • 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, всех потомков поместить в переменную объекта, а не класса. однако дьявол в другое ухо нашёптывает, что если уж у меня синглтон по определению может существовать только в единственном экземпляре, то вполне допустимо оставить всё как есть(то есть использовать пременную класса)
       
      опытные программисты, что посоветуете использовать для хранения указателей? переменную класса или переменную объекта?
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy