Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Наследование и статические переменные (http://www.flasher.ru/forum/showthread.php?t=128932)

dimarik 21.08.2009 19:56

Цитата:

Сообщение от orcpochta (Сообщение 844383)
2dimarik:

Вы сейчас мыслите категориями физической привязки моделей в каком-то приложении.
Постараюсь описать мой случай.
Есть две категории юнитов (два класса: один супер, второй наследник; или два наследника от одного супер - не важно) - "свои" и "враги", соответственно есть две группы юнитов по n штук в каждой. Эти две группы юнитов передвигаются по карте, каждой группе присуща своя скорость speed, задаваемая в собственном классе. Ну, а статической она является для того, чтобы изменив ее на уровне класса, вся группа получила новое значение (не во всех классах, а только в этом), иначе пришлось бы в каждом экземпляре менять скорость вручную.

Можно сделать ее дефолтной. Кстати, Вы тоже мыслите категориями.

orcpochta 21.08.2009 20:36

Цитата:

Сообщение от Wolsh (Сообщение 844480)
А ты в Car во всех методах измени speed на getSpeed(), и наслаждайся всеми преимуществами наследования в любом количестве классов-наследников.

Спасибо!!! :yahoo:
Во меня заклинило...)) Я Мука дочитал пол года назад, наверное, и точно помнил, что он эту ситуацию описывал, а решение вспомнить никак не мог. Точнее даже вспомнил, но видимо в спешке что-то напортачил, результата нужного не получил и отбросил. Ходил мучился, что Мук в 200 километрах от меня и нельзя его почитать..)))


2Жень Шень:
Не понял вашу мысль. Стоял читал, пока ждал своей очереди на сдачу экзамена на права. Сдал. Сейчас пришел домой, еще несколько раз прочитал - все равно не понял... :umnik2: :wacko: :D
Объясните поподробней вашу мысль, если не сложно, чтобы у меня недопонимания в этом вопросе не оставалось.
На счет Мука... Мук форева! :)


2dimarik

Цитата:

Можно сделать ее дефолтной.
Извините, не понял, что вы имеете ввиду. Можно подробней? :)

Wolsh 21.08.2009 20:53

Цитата:

Спасибо!!!
Мне очень стыдно - я поспешил, писал уходя с работы и не додумал. На самом деле все еще проще.
Надо просто добавить в классы геттер.
Код AS1/AS2:

class Car {
        private static var carspeed:Number = 10;
 
        public function Car () {
 
        }
        public function get speed ():Number {
                return carspeed;
        }
        public function getSpeed ():Number {
                return speed;
        }
}

Код AS1/AS2:

class NewCar extends Car {
        private static var carspeed:Number = 50;
 
        public function NewCar () {
                super();
        }
        public function get speed ():Number {
                return carspeed;
        }
}

И тогда не надо ничего переписывать. Удачи))

orcpochta 21.08.2009 21:16

Кстати, сам Мук предпочитает ваш первый вариант, а геттеры и сеттеры почему-то недолюбливает - насколько я понял из его книги по ас2 :)

Жень Шень 21.08.2009 22:22

Вложений: 1
Цитата:

Сообщение от orcpochta (Сообщение 844632)
2Жень Шень:
Не понял вашу мысль

Лучше один раз увидеть... Смотрим аттач.
Потом дабавьте "trace(Car.speed)"
Да, пропустил расширение Car до NewCar:
Код AS1/AS2:

class NewCar extends Car{

но, это не меняет сути.

orcpochta 21.08.2009 22:50

Я честно не могу понять, что вы хотите мне показать, извините. То, что вы написали раньше, я уже опробовал, посмотрел аттач - там все то же самое...))

Не могу понять, чего я не вижу, а вижу вот что:
класс Car определяет статпеременную speed = 10;
он же определяет функцию getSpeed(), возвращающую эту переменную
класс NewCar определяет свою статпеременную speed=50;
он же переопределяет ф-ию getSpeed() => она возвращает уже 50;
trace(Car.speed) напрямую обращается к статпеременной из Car (она хоть и прайвэт, но т.к. NewCar - подкласс, то имеет к ней доступ и выдает 10).

У вас доступа не было из-за того, что один класс не расширял другого.

Жень Шень 22.08.2009 16:22

Вложений: 1
Цитата:

Сообщение от orcpochta (Сообщение 844662)
Я честно не могу понять, что вы хотите мне показать

Извините, я неправильно понял вопрос, а значит был неправ.
Исходя из теперь правильно понятой задачи, могу предложить следующее:
Функции использующие speed в классе Car должны знать кто их вызывает (экземпляр какого класса-подкласса). Поэтому введя некий признак (например, myName) можно использовать то или иное значение скорости. Конечно, надо переделать все 25 функций основного класса(!).
Последнее слово за вами.

dimarik 23.08.2009 17:03

Выше я указывал на подход к _проектироаванию_. Ну, бл, любой CAr имеет свой спиид. Завтра, Вам, дорогой товарищ, понадобится развести группы по скоростям, отдельно для _каждаго_ "свои", отдельно для _каждаго_ "enemy". Я сплю и вижу тучу танков, но они движутся каждый сам по себе.


А теперь все вместе начинаем думать о "Вы сейчас мыслите категориями физической привязки моделей в каком-то приложении.". Разом! И вообще о "категориях" мышления. Вы Гёте читали?

orcpochta 23.08.2009 18:26

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

dimarik 23.08.2009 18:44

Вы указали на задачу, не соответствующую нормальной логике. У Вас проблемы с логикой.


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

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