Форум 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=198337)

AlexCooper 24.04.2013 14:25

Статические классы
 
Здравствуйте, вопрос к гуру.
Не злоупотребляю ли я статическими классами? Имеется ввиду конструкция
Код AS3:

package inpictures.data {
 
        public class GlobalVars extends Object {
 
                public function GlobalVars() {
                }
 
                {
                        times = new Times();
                }
 
                public static var times:Times;
 
        }
 
}

Код AS3:

package inpictures.data {
 
        public class Times extends Object {
 
                public function Times() {
 
                }
 
                public var server:Number = 0;
 
                public var client:Number = 0;
 
                public var sync:Number = 0;
 
                public function get now():Number {
                        return Math.round(new Date().getTime()/1000)+sync;
                }
 
                public function timeToStr($time:Number):String {
                        trace("timeToStr >>>>>>>>>>>>>>>> "+$time);
 
                        var temp:Vector.<uint> = new Vector.<uint>;
 
                        return "str";
                }
 
        }
 
}

Конкретно интересует вопрос что происходит с ресурсами, если мы к примеру будем создавать 20 экземляров х-класса и в каждом будет погружен
Код AS3:

import inpictures.data.GlobalVars;

а сам класс GlobalVars будет расширен множеством экземпляров классов не используемых в х-классе. Будет ли это отображаться на производительности? Или все же стоит отказаться от подобной реализации и импортировать только используемые экземпляры из GlobalVars?

chamele0n 24.04.2013 14:36

тихий ужос )

caseyryan 24.04.2013 14:42

Во-первых в АС3 нет статических классов. Есть статические свойства классов. Во вторых, они не наследуются. Не важно сколько классов будут расширят класс со статическими полями. Ну и третье, ссылка записанная в статическое поле в любом случае будет только одна.
Странный вопрос.

AlexCooper 24.04.2013 14:54

Цитата:

Сообщение от caseyryan (Сообщение 1131097)
Во-первых в АС3 нет статических классов. Есть статические свойства классов.

Прошу прощения, Вы правы, Я не правильно высловился.

Меня интересовало что происходит при импорте. Ответ у меня и так был в голове, но хотелось подтверждения.

Цитата:

Сообщение от chamele0n (Сообщение 1131094)
тихий ужос )

В чем "ужос"?

Simplifier 24.04.2013 16:12

Цитата:

Меня интересовало что происходит при импорте
Цитата из справки:
Цитата:

Если импортированный класс не использовать в сценарии, он не будет экспортирован как часть SWF-файла. Это значит, что можно импортировать большие пакеты, не заботясь о размере SWF-файла; байт-код, связанный с классом, включается в SWF-файл, только если этот класс действительно используется. Недостатком импортирования классов, которые не понадобятся, является повышение вероятности конфликта имен
Наличие импортов не влияет на производительность. Эта инструкция служит лишь для того, чтобы однозначно идентифицировать используемые классы.

Bgg 24.04.2013 16:18

Цитата:

Сообщение от AlexCooper (Сообщение 1131092)
Будет ли это отображаться на производительности?

Существует полезный совет, который помогает не париться по пустякам: решать проблемы с производительностью когда они появяться, а не до этого.

expl 24.04.2013 17:11

Цитата:

Во-первых в АС3 нет статических классов
Да ладно, все их так называют, а то что запрета на создание экземпляра статического класса нет - дык это проблем не создаёт - ну создал ты экземпляр без методов и полей и что?

Цитата:

Не злоупотребляю ли я статическими классами? Имеется ввиду конструкция
В данном конкретном случае - вроде нет.

Я лично статическими классами делал:
- набор утилитарных функций
- набор констант
- подобие перечислений (enum)
- глобальную точку доступа к экземплярам других классов, которые _очень_ трудно протаскивать.
- фабрику UI-компонентов - у неё 100500 методов и всё равно этот интерфейс из 100500 методов никто реализовывать не будет, потому статика.
- глобальный набор полей, отражающих глобальное состояние системы, например в туториале.
- класс с геттерами для получения строки локализации (он, правда, автоматом генерился)
- класс с геттерами заэмбеженных ресурсов (тоже генерился автоматом)

Если есть сомнения - лучше обычный класс.
При работе со статическим руки скованы - нельзя второй экземпляр запилить для тестов или для другой части ситсемы и передать ей.

caseyryan 24.04.2013 17:31

Цитата:

Да ладно, все их так называют
Кто все? Я не называю. Статический класс не может сожержать не статических свойств, а в ас3 любой класс может

AlexCooper 24.04.2013 17:39

Цитата:

Сообщение от Bgg (Сообщение 1131111)
Существует полезный совет, который помогает не париться по пустякам: решать проблемы с производительностью когда они появяться, а не до этого.

На данном этапе провожу рефакторинг. Потому стараюсь максимально больше убить подводных камней.

Добавлено через 4 минуты
Цитата:

Сообщение от expl (Сообщение 1131119)

Я лично статическими классами делал:
- набор утилитарных функций
- набор констант
- подобие перечислений (enum)
- глобальную точку доступа к экземплярам других классов, которые _очень_ трудно протаскивать.
- фабрику UI-компонентов - у неё 100500 методов и всё равно этот интерфейс из 100500 методов никто реализовывать не будет, потому статика.
- глобальный набор полей, отражающих глобальное состояние системы, например в туториале.
- класс с геттерами для получения строки локализации (он, правда, автоматом генерился)
- класс с геттерами заэмбеженных ресурсов (тоже генерился автоматом)

Я точно так же делаю.

Добавлено через 6 минут
Цитата:

Сообщение от Simplifier (Сообщение 1131110)
Наличие импортов не влияет на производительность. Эта инструкция служит лишь для того, чтобы однозначно идентифицировать используемые классы.

При импорте класса с статическим свойством в основе которого лежит экземпляр класса, конструктор его разве не срабатывает?

Хотя ответ уже был дан "caseyryan" - "Ну и третье, ссылка записанная в статическое поле в любом случае будет только одна. "

alatar 24.04.2013 18:16

import это инструкция компилятору, при "импорте" ничего не создается и не вызывается.


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

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