Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Разница между классами (http://www.flasher.ru/forum/showthread.php?t=208578)

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

Код AS3:

public class Enemy
{
    public var speed:Number = 3;
    public var damage:Number = 10;
}

или

Код AS3:

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

Если Вам нужно только хранилище каких-то настроек, то Вы можете создать Специальный класс с типизированными свойствами и скорость тогда будет выше. Например -
Код AS3:

public class EnemyData
{
    public var life:int = 100;
    public var name:String = 'defaultName';
}

И использовать -
Код AS3:

var enemyData:EnemyData = new EnemyData();
// и тут передали эти настройки в манагер


alexandrratush 30.07.2014 23:33

Цитата:

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

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

caseyryan 31.07.2014 08:15

Цитата:

А с типизированными свойством у нас будет предупреждение на этапе компиляции.
С не динамическими, я б сказал, если речь конкретно о случае с неправильным названием переменной.
Цитата:

Лучше использовать класс с переменными или класс с одним объектом у которого много переменных?
У вас какая-то путаница в голове. Почитайте подробнее о том, что такое класс, что такое объект.
Возможно вас удивит, но в as3 даже Class, является наследником Object.
Вот такая конструкция
Код AS3:

trace(Class is Object);

Выдаст true. И вообще, в этом языке даже нет примитивов. Здесь всё является наследником Object.

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

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


Часовой пояс GMT +4, время: 14:48.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.