Модераторы: 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   Вверх
Ignat
Дата 18.1.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(szz @  18.1.2007,  10:55 Найти цитируемый пост)
Нет, указатель ведь публичный.

Однако обращение к приватному члену вне класса smile
Это относится к умышленным нарушениям инкапсуляции, которые компилятор не в состоянии предотвратить.


Цитата(szz @  18.1.2007,  10:55 Найти цитируемый пост)
С таким же успехом можно и это назвать нарушением:

Это можно сказать обычный аксессор.


ЗЫ но вообщем действительно:
Цитата(szz @  18.1.2007,  10:55 Найти цитируемый пост)
 Так решил сделать разработчик класса. А не пользователь класса, который с ним работает!



Всем сорри за оффтоп.


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


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


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

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



читать не могу. температура 39. прикол в том что запись
Код

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


равносильна такому:
Код

_global.TestClass = {};
_global.TestClass.prototype = {
  TestFunction: function() {
    trace ('test');
  }
}


то есть private существует только для компиллятора. 
=> ActionScript 2 - это более удобный способ записи прототипов. и фсе smile

Добавлено @ 08:57 
ответ на вот эту задачу
http://forum.vingrad.ru/topic-132019.html

точно такой же

Добавлено @ 09:02 
Цитата(szz @  18.1.2007,  01:16 Найти цитируемый пост)
Честно говоря, я немного в бешенстве от такого безалаберного поведения АС. Но давайте будем уповать на третий, авось там всякое тяжелое наследие прошлых лет будет упразднено. АС умер, да здравствует АС! 


Ну за полгода работы на AS3 никаких подобных дырок там не нашел.
Единственное, чего IMHO не хватает для счастья - это абстрактных классов
PM MAIL WWW ICQ YIM MSN   Вверх
szz
Дата 19.1.2007, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата
Ну за полгода работы на AS3 никаких подобных дырок там не нашел.

   Ну, вот и здорово. Скоро наверное перейду. 

Цитата
Единственное, чего IMHO не хватает для счастья - это абстрактных классов 

   Ну ничего, ведь выпустят когда-то ас4 smile  А чо-то добавлять ведь надо будет - вот и добавят абстракцию.
 В первых версиях С++ тоже не было абстрактных классов, а шаблоны до сих пор еще не совсем стандартно включены smile



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


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


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

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



ИМХО ООП - это в первую очередь для пространства имен, а уж потом для всего остального. 8)


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


Эксперт
***


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

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



Цитата
ООП - это в первую очередь для пространства имен

  Ну, даже не знаю что и ответить...   
 Только одно: ты глубоко заблуждаешься.


--------------------
PM   Вверх
AlDev
Дата 19.1.2007, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



GZep, 
с чего-ж ты такое взял то? 


Цитата(szz @  19.1.2007,  20:28 Найти цитируемый пост)
ООП - это в первую очередь для пространства имен

в as3 они то же есть =)
Код

package {
  public class HelloWorld {
    public namespace eng;
    public namespace rus;

    eng function getHello():String {
      return 'Hello, World!';
    }

    rus function getHello():String {
      return 'Здравствуй, мир!';
    }
  }
}


Код

package {
  import flash.display.Sprite;
  import flash.display.TextField;

  public function Test {
    var testClass:TestClass = new TestClass();
    use namespace eng;
    var field:TextField = new TextField();
    field.text = testClass.getHello();
    addChild(field);
  }
}

PM MAIL WWW ICQ YIM MSN   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0709 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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