Модераторы: SoWa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача №2, private, public, class ? as1 || as2 ? 
:(
    Опции темы
AlDev
Дата 17.1.2007, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 8
Всего: 50



Еще одна задачка на знание Flash Platform.

Есть код:
Код

var t:TestClass = new TestClass();
t['testPrivateMethod']();


соотв. TestClass.as:
Код

class TestClass {
    function TestClass() {
    }
    
    private function testPrivateMethod() {
        trace ('test');
    }
}


Вопрос: что будет при запуске и почему? )
PM MAIL WWW ICQ YIM MSN   Вверх
AntonioBanderaz
Дата 17.1.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



да ничего не будет...  smile 


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AlDev
Дата 17.1.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 8
Всего: 50



тому кто правильно ответит и обоснует - ставлю +

Добавлено @ 14:54 
AntonioBanderaz, ты не праф =) в icq объяснил )
PM MAIL WWW ICQ YIM MSN   Вверх
Ignat
Дата 17.1.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73



Цитата(AlDev @  17.1.2007,  08:44 Найти цитируемый пост)
t['testPrivateMethod']();

Если эта запись корректна, то должен вылететь ексепшен при попытке использовать приватный член.

ЗЫ AS2 не знаю вааще, а на AS1 года два не писал... Посему за глупость не бейте  smile 


--------------------
Теперь при чем :P
PM   Вверх
szz
Дата 17.1.2007, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 6
Всего: 33



А какой приз дают? Лицензионный диск восьмого флеша и клевую бондану?  smile 


--------------------
PM   Вверх
GZep
Дата 17.1.2007, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Выполнится trace (а именно выведется "text"), потому что к приватной функции обращаются через обычный метод класса, который к ней имеет доступ smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
szz
Дата 17.1.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 6
Всего: 33



выполнится функция. А потому что наш любимый АС2 - дырявое решето! Простите за грубость, но не хочется распинаться по поводу всяких "особенностей АС, когда динамически вызванная функция класса, который, как известно, транслируется в АС1, не может быть отловлена на момент компиляции", а просто АС1 - рассадник багов и дырок smile  
   Что, не могли написать проверку на рантайме? Приватная функция, блин, все ООП коту под хвост!!!

 С++ никогда бы не допустил подобного.


--------------------
PM   Вверх
GZep
Дата 17.1.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Цитата(szz @  17.1.2007,  20:11 Найти цитируемый пост)
С++ никогда бы не допустил подобного. 

Нашли с чем сравнивать!
Цитата(szz @  17.1.2007,  20:11 Найти цитируемый пост)
рассадник багов и дырок

Очень грубо... Он этого не заслужил... smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
szz
Дата 17.1.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 6
Всего: 33



Цитата
к приватной функции обращаются через обычный метод класса, который к ней имеет доступ


     Что значит "через", когда приватная функция - и есть тот метод класса? Вася через Васю? ))))
  
  Честно говоря, я немного в бешенстве от такого безалаберного поведения АС. Но давайте будем уповать на третий, авось там всякое тяжелое наследие прошлых лет будет упразднено. АС умер, да здравствует АС!


--------------------
PM   Вверх
GZep
Дата 17.1.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Цитата(szz @  17.1.2007,  20:16 Найти цитируемый пост)
Вася через Васю?

Да. Вася1 - публик и имеет доступ к привату, а вася2 - собственно и есть приват. Через вася1 обращаемся к вася2 Что тут непонятного?
Цитата(szz @  17.1.2007,  20:16 Найти цитируемый пост)
авось там всякое тяжелое наследие

Что значит "авось"? Про АС3 уже давно можно прочитать в многочисленных статьях, о том, какие там нововведения.
Цитата(szz @  17.1.2007,  20:16 Найти цитируемый пост)
безалаберного

Да нормальное поведение! Это особенность. Мне например не нравиться в С++ то, что там return не может возвращать все подряд. smile 

Это сообщение отредактировал(а) GZep - 17.1.2007, 20:23


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
szz
Дата 17.1.2007, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 6
Всего: 33



Цитата
Очень грубо... Он этого не заслужил...

  Попишите в нем подольше, и если есть бекграунд написания на С/С++ (я несколько лет писать на С++ прежде чем плавно занялся АС), то будете злиться поболе моего.
 Помню, когда я писал не С++, то есть была какая-то ошибка в программе, то я был уверен, что это моя ошибка. Такую же уверенность я применял и про написании на ас, но он мне много раз показал, что я виноват в этом сам и легкостью написания на ультравысоком языке скомпенсировалась поиском загадочных багов, когда "все вроде правильно написано, а работает не так". Правда все мною найденные дырки в АС были довольно труднозавернутые, чтобы их так лаконично выложить. 
AlDev, молодец, что нашел такую дырищу.

  Красота: приватная функция класса спокойно без напрягов вызывается снаружи. Хочется просто скомкать весь этот АС и выбросить в мусорку ))))   Тока невозможно, ибо мы уже так подсееели на флеееш )))

   Вердикт:
  Настоящая причина такова: АС дырявый как дуршлаг.
  Отмазочная причина: дело в том, что классы АС2 перед выполнением транспортируются в АС1 прототипные объекты, которые как известно не имеют таких кайфоф как приватные методы. Соответственно АС компилятор может проверять тоько то, что явно написано hardcoded. А в нашем примере функция была вызвана динамически, соответственно, компилятор проворонил, а код выполняет не ваш красивый АС2 класс, а уродливый прототип АС1 (интересно было бы кстати посмотреть на сгенерированные прототипы, наверно они уродливы до жути smile   )

  Все, плюсик мой smile


--------------------
PM   Вверх
GZep
Дата 17.1.2007, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Цитата(szz @  17.1.2007,  20:28 Найти цитируемый пост)
Все, плюсик мой

За что Вам плюс то? smile 
Ваша критика непонятна мне!
С++: (никогда с ним не работал, но много слышал о нем) smile
Цитата(GZep @  17.1.2007,  20:22 Найти цитируемый пост)
return не может

PHP - огромное количество претензий, но я его все-равно люблю smile
JavaScript - это проблема кроссбраузерности меня добивает.
делфи - медленный для задач, которые он выполняет.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
szz
Дата 17.1.2007, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 6
Всего: 33



Цитата
Вася1 - публик и имеет доступ к привату

  Ну нету там такого! Написано же - private! Нет никакого паблика! Метод только один, и он приватный!

Цитата
Мне например не нравиться в С++ то, что там return не может возвращать все подряд. 

 Конечно может!  Используй тип Var или сам напиши такой класс, который является типом "все подряд" и используй его! Но тут ты явно заметишь как страдает скорость выполнения. Вообще С++ - язык расширяемый.
  Разумеется, на С++ писать в сотни раз сложнее и больше занимает времени, чем на AS. Но и работает он в сотни раз быстрее.
  У меня мечта такая: писать на С++ в IDE Flash )))    Заместо АС   smile 

Цитата
Это особенность.

   Особенность? Аааа...  я щас в обморок упаду... откройте окна, профессору плохо...
  Приватные члены класса - одна из базовых концепций ООП. Если нарушено - то все насмарку, Нахрена нам тогда этот АС2? Чтоб красиво писать class BlaBla как в Java? Уж лучше я на ас1 прототипы буду гонять...  хоть голая уродливая правда, но все же правда.
   
  Спроси у разроботчиков Flash - они наверняка начнут виновато ввинчивать носок в пол, потупив глаза и скажут, что, мол, мы это скоро исправим...  И не посмеют говорить, что это фича.


GZep, прости пожалуста за возможную грубость, но я правда немного опешил. Воспринимай это как здоровую критику. Просто давайте учиться на ошибках и не оправдывать Флеш. Я тоже очень люблю Flash, счастлив что он есть, но надо быть все же объективным, и если флеш подкачал - то признавать это.

Добавлено @ 20:48 
Цитата
За что Вам плюс то?
 
   За правильное объяснение задачки.  smile   
 И бандану клевую  smile 

Цитата
С++: (никогда с ним не работал, но много слышал о нем)

  Во-во, а попробуйте! Думаю будете очарованы строгостью и грацией этого языка.

Цитата
PHP - огромное количество претензий, но я его все-равно люблю


   Ну, в паре с flash они красиво вальсируют smile


Так, что-то мы за оффтопили мощно smile


--------------------
PM   Вверх
Ignat
Дата 18.1.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73



Скажу сразу - я офигел от такого поведения smile

Цитата(GZep @  17.1.2007,  20:41 Найти цитируемый пост)
Ваша критика непонятна мне!


Цитата(szz @  17.1.2007,  20:45 Найти цитируемый пост)
 Приватные члены класса - одна из базовых концепций ООП. Если нарушено - то все насмарку,


szz, подписываюсь.
В данном примере мы имеем нарушение интерпретатором инкапсуляции, что позволяет говорить об отсутствии нормальной реализации ООП.

// небольшой оффтоп для szz. Нарушение ООП?

Код

#include <iostream>

class test
{
    public:
        test()
        {
            ptr = test::private_method;
        }
        void (*ptr)( );
    
    private:
        static void private_method()
        {
            std::cout << "Called private member" << std::endl;
        }

};

int main()
{
    test obj;
    (obj.ptr)();

    return 0;
}





--------------------
Теперь при чем :P
PM   Вверх
szz
Дата 18.1.2007, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 6
Всего: 33



Нет, указатель ведь публичный.
 Так решил сделать разработчик класса. А не пользователь класса, который с ним работает!

С таким же успехом можно и это назвать нарушением:
Код

#include <iostream>
class test
{
    public:
        test(){}
        void public_method_calls_private_method(){
               this->private_method();
        }    
    private:
        void private_method(){
            std::cout << "Called private member" << std::endl;
        }
};
main(){
    test obj;
    obj.public_method_calls_private_method();
}


   Главное то, чтобы не нарушалась задумка разработчика КЛАССА.


--------------------
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Flash"
AlDev
SoWa
  • Если вы хотите предложить кому-либо работу, то пишите или в личку, или оставляйте сообщения в специально предназначеном для этого форуме "Объявления о найме специалистов"
  • Один вопрос - одна тема. Не надо переходов от одного вопроса к другому.
  • Если вы хотите показать какой-нибудь ваш мульт, причём показать, а не предоставить исходник, то вам сюда
  • Вопросы по разработке интернет-приложений на Flex и вопросы по MXML пишите в раздел Flex
  • Смотрим в будущее. ActionScript 3 обсуждается в форуме ActionScript 3
  • Новости из мира Flash.
  • New! [code=ascript][/code] - подсветка ActionScript + wikipedia help

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, AlDev, SoWa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 1,2 | Следующая тема »


 




[ Время генерации скрипта: 0.1701 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.