PDA

Просмотр полной версии : Разница между классами


artem2033
30.07.2014, 21:51
Лучше использовать класс с переменными или класс с одним объектом у которого много переменных?

LifeIsRhythm
30.07.2014, 22:02
Второй способ медленнее.

Добавлено через 2 минуты
Ваш вопрос на самом деле философский. В ООП второй вариант предпочтительней, так-как это композиция.

Добавлено через 3 минуты
Но отталкиваться нужно от чего-то реального. Если так делать всегда, то будет выглядеть смешно.

artem2033
30.07.2014, 22:07
То есть можно и так и так делать?

LifeIsRhythm
30.07.2014, 22:07
Но в ООП она предпочтительней наследству.. А если вопрос не стоит между выбором, то лучше класс с переменными.

Добавлено через 1 минуту
То есть можно и так и так делать?
Если Вы себе докажите, что так нужно и так будет лучше, то делайте.
Но лучше приведите маленький пример.

artem2033
30.07.2014, 22:45
public class Enemy
{
public var speed:Number = 3;
public var damage:Number = 10;
}


или


public class Enemy
{
public function Enemy()
{
}
public function init():void
{
var enemy:Object = new Object();
enemy.damege = 10;
enemy.speed = 3;
EnemyManager.instance.add(enemy);
}
}

LifeIsRhythm
30.07.2014, 22:52
Это вообще два разных варианта. В первым, после создания экземпляра Enemy, Вы сможете получить доступ к его public свойствам. А во втором Вы не можете обратится к свойству enemy, так-как оно локально и после выполнения метода init удалится из памяти.
Но именно в этом случае, первый вариант лучше. Чистый Object чаще используют только в том случаи, если он получился путем преобразования xml или json. Ну или ещё, как ассоциативный массив.

Добавлено через 2 минуты
Object является динамическим объектом, а в as3 к свойствам и методам динамических объектов, доступ в ... Вроде в полтора раза медленнее.

artem2033
30.07.2014, 23:00
Во втором варианте они у меня в массив добавляются, т.е. я могу через него обратиться.
Спасибо за ответ.

LifeIsRhythm
30.07.2014, 23:12
Если Вам нужно только хранилище каких-то настроек, то Вы можете создать Специальный класс с типизированными свойствами и скорость тогда будет выше. Например -
public class EnemyData
{
public var life:int = 100;
public var name:String = 'defaultName';
}
И использовать -
var enemyData:EnemyData = new EnemyData();
// и тут передали эти настройки в манагер

alexandrratush
30.07.2014, 23:33
скорость тогда будет выше.
Я думаю если там будет десяток свойств, то значительного понижения скорости мы не заметим.

Мне кажется тут нужно смотреть на то, что в случае с Object мы зададим свойство speed, а искать будем sped. В итоге получим undefined. А с типизированными свойством у нас будет предупреждение на этапе компиляции.

caseyryan
31.07.2014, 08:15
А с типизированными свойством у нас будет предупреждение на этапе компиляции.
С не динамическими, я б сказал, если речь конкретно о случае с неправильным названием переменной.
Лучше использовать класс с переменными или класс с одним объектом у которого много переменных?
У вас какая-то путаница в голове. Почитайте подробнее о том, что такое класс, что такое объект.
Возможно вас удивит, но в as3 даже Class, является наследником Object.
Вот такая конструкция
trace(Class is Object);
Выдаст true. И вообще, в этом языке даже нет примитивов. Здесь всё является наследником Object.

Короче говоря, ваш вопрос лучше перефразировать примерно так:
Как лучше делать, объявлять для каждого свойства отдельную переменную класса, или хранить все свойства в динамической коллекции?

Лучшего варианта здесь нет. Все зависит от конкретной задачи. Если точно известно какие свойства будут, что ничего нового добавляться не будет (имеется в виду динамически), или данные не будут обновляться сразу всем скопом, то лучше первый вариант. Тут и доступ к свойствам быстрее, и IDE подсказки по коду выдаст. Но и вариант с коллекцией свойств тоже не плохой. Есть варианты, когда он удобнее. Так что точного ответа здесь не найти

artem2033
31.07.2014, 12:37
Ещё раз спасибо всем за ответы.

in4core
31.07.2014, 17:00
Object чаще используют только в том случаи
Эй ребятки, отрубите ка ему голову, - тунеядец.

gloomyBrain
31.07.2014, 17:20
Эй ребятки, отрубите ка ему голову, - тунеядец.
Научись-ка писать правильно, двоечник =)

in4core
31.07.2014, 17:55
Научись-ка писать правильно, двоечник =) В том то и прикол был )))

LifeIsRhythm
31.07.2014, 18:06
Эй ребятки
А сами только языком работать научились? Вы наверное, по привычке и текст им набираете)))))))

dimarik
31.07.2014, 20:45
Так. Всем чмоки в этом чатике.