0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
|
|
1 | |
Нужен совет по ООП14.11.2013, 22:05. Показов 1251. Ответов 18
Метки нет (Все метки)
Я в ООП новичек и с наследованиями, абстрактными классами, интерфейсами и прочими ООП диковинами раньше дел не имел, поэтому и решил спросить совета.
Как пример возмем игру. Все игровые предметы имеют некоторый набор общих свойтв таких как локализация, время жизни, регенерация , способность двигаться. например поверхность земли имеет только "локализацию" - координаты на карте и номер текстуры бревно помимо своих координат еще имеет "время жизни" - через сколько времени оно будет удалено из игры дерево время жизни неимеет , оно растет пока его несрубят. Зато оно имеет "регенерацию" - типа количество древесины ,которое можно полуит с этого дерева постояно увеличиваеться. грядка огорода имеет и локализацию и регенирацию и время жизни(типа если за огородом неследить он пропадет) всякие там монстры умеют двигаться, однако некоторыем из них имеют "регенерацию" а другие нет. также и время жизни у одних есть а у других нет а некоторые имеют и то и другое. Причем реализация ВСЕХ методов/функций в этих блоках одинакова для всех классов например некий метов уничтожения обекта описаный в блоке "время жизни" обсолютно идентичен для любого оъекта , вне зависимости от его класса. Грубо говоря луюбой класс игровых обектов можно составить из комбинаций этих "блоков" Что тут лучше подойдет интерфейсы, абстрактные классы или что другое?
0
|
14.11.2013, 22:05 | |
Ответы с готовыми решениями:
18
ООП и БД. Нужен совет, пояснение по архитектуре ООП, программа склад, застрял, нужен совет Нужен совет в выборе темы для курсовой по ООП. 2 курс Совет ООП |
foo();
|
|
14.11.2013, 22:30 | 2 |
Не по теме: ахахахах, спасибо за минутку смеха :D. Если Вы имели в виду положение в пространстве - это скорее локация))) по сабжу, решение, предложенное Вами слишком примитивно для создания интерфейсов. А тем более, если реализация методов одинакова для всех объектов, можно обойтись обычными классами с наследованием.
0
|
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
|
|
14.11.2013, 23:41 [ТС] | 3 |
Да я как бы и хотел наследоваться, но хз как.
у меня 4-6 базовых блоков и их нада както "скрестить" а наследование происходит поцепочке один за другим (если я правильно разобрался) в итоге я могу скрестить 2 класса но как к ним добавить третий? тоесть есть классы A B C D нада сделать AB AC AD ABC ABD ABCD BC BD BCD и т д Добавлено через 12 минут причина вашего веселья невполне ясна =) http://ru.wiktionary.org/wiki/локализация
0
|
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
|
|
14.11.2013, 23:51 | 4 |
Не стоит мешать слонов с бегемотами. Локации отдельно, объекты отдельно.
Что касается объектов, мне думается так: абстрактрый класс ИгровойОбъект с набором самых общих методов и свойств, а от него наследуются к примеру Мобы, НПС, и так далее по иерархии, с реализацией нужных интерфейсов IMovable, IDestroyable и пр.
0
|
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
|
|
15.11.2013, 00:08 [ТС] | 5 |
меня ставит в некоторое затруднение отсутствие полей у интрефейсов.
для тогоже IDestroyable требуется несколько новых переменых, чтобы знать через какое время объект уничтожается, взрыветсяли он при уничтожении, или там чтонибуть еще.
0
|
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
|
|
15.11.2013, 00:17 | 6 |
Все это (задержка, взрыв) уже реализация метода для конкретного класса, зачем поля?
1
|
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
|
|
15.11.2013, 00:30 [ТС] | 7 |
ну допустим будет много игровых обектов и их время уничтожения будет разное
бревно исчезнет через час камень через 2 гравицапа исчизает через 3 не делатьже под каждое именование игрового предмета новый класс со своей реализацией интерфейса, ведь они отличаются только номиром рисунка который будет отображен на экране
0
|
15.11.2013, 04:45 | 8 | |||||||||||||||
Я совершенно не вникал, что там будет каждый тип объекта "уметь" в игре, и как работать, просто, к примеру написал. Предположим, что метод Destroy() вызывает в игре видимое уничтожение объекта, а не удаление из памяти...
Или, возможно, что-то типа того: GameObjectBase - любой игровой объект, который имеет здоровье и время жизни. CharacterBase - все персонажи, которые будут уметь передвигаться. Вообще, думаю, во время написания игры станет ясно, что от кого наследует, у кого какие должны быть хар-ки, я тут наугад побыстрому набросал, так что думай сам.
Кстати, обнаружил небольшой косяк даже для этого примера. Это:
1
|
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
|
||||||
16.11.2013, 05:27 [ТС] | 9 | |||||
Casper-SC
Большое спасибо ! Кажись я уже начинаю немного( совсем чуть-чуть) шарить в ООП =) Но возникает вопрос, Не совсем по этой теме но всеже очень важный для меня ООП походу негативно влияет на скорость работы програмы. Таже инкапсуляция через функцию обращается к полю , и походу копирует его в свойство.
Стоит ли в моем случае (при создании игры где будут сотни тысящ экземпляров классов и постояные изменения над ними) использовать ООП???? и какую пользу ООП может принести при создании игры( может некоторую защиту от всяких там Артмони или еще что)
0
|
74 / 74 / 30
Регистрация: 22.03.2013
Сообщений: 224
|
|
16.11.2013, 10:37 | 10 |
ООП дает скорость написание программы . Насчет свойств обращайтесь напрямую к полю, но это не в духе ооп. Функция дает проверить корректность ввода и или преобразовать вывод . Например если время хранится в секундах, то в get можно разделить его на 3600 и вернуть часы.
0
|
Master of Orion
|
||||||
17.11.2013, 00:07 | 11 | |||||
Figga, не путаем мух с котлетами. ООП на скорость не влияет - все конвертится в тот же ассемблер, что и С++, и все остальное.
Что касается вашего утверждения:
0
|
31 / 31 / 6
Регистрация: 11.07.2013
Сообщений: 241
|
|
21.11.2013, 00:56 | 13 |
2-3 толстые прочитанные книги дадут ответ и позволят не задавать глупый вброс: ООП походу негативно влияет на скорость работы програмы
0
|
Master of Orion
|
||||||
21.11.2013, 02:22 | 14 | |||||
Casper-SC, насчет инлайнинга - неправда.
1
|
145 / 45 / 16
Регистрация: 10.10.2013
Сообщений: 110
|
|
21.11.2013, 02:53 | 17 |
брехня вики :
Тип исполнения: компилируемый Появился в: 1983 Автор(ы): Бьёрн Страуструп
1
|
4539 / 2732 / 486
Регистрация: 28.04.2012
Сообщений: 8,628
|
|
21.11.2013, 10:16 | 18 |
0
|
Master of Orion
|
|
21.11.2013, 11:54 | 19 |
Courage, да, что-то с памятью моей стало
А дельфи в 86 вроде бы. Добавлено через 1 минуту Точнее object pascal
0
|
21.11.2013, 11:54 | |
21.11.2013, 11:54 | |
Помогаю со студенческими работами здесь
19
совет по ооп Delphi 7 Дать совет по ООП [ ООП С++(да вообще побоку на язык) ] Дайте совет по поводу реализации курсача, просто пару мыслей Нужен пример использования ООП Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |