Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flasher.ru > Флейм

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.06.2008, 17:14
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 1  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
>> wvxvw, придираетесь к терминологии. "при определнных обстоятельствах функция и метод не могут выполнять одну и ту же роль." пример плз.
Код:
function TClass (targetObj) {
	function notMethod () {
		trace (this);
	}
	notMethod.call(targetObj);
}
function AClass () {
	this.toString = function () {
		return ("[AClass]");
	}
}
var t = new TClass(new AClass()); //[AClass]
Вот, такого поведения у метода не должно быть.

ЗЫ. Терминология, особенно в том, что касается точных наук нужна для того, чтобы ей неукоснительно следовать. Иначе возникают разночтения, которые только препядствуют дальнейшему развитию. Для этого пишутся стандарты, создаются исследовательские группы...
При этом примеры таких разночтений призваных к жизни исключительно ленью и халатностью разработчиков не удосужившихся заглянуть в госты/стандарты и т.п. литературу - сплошь и рядом. Да тот же ХТМЛ, который никогда ни в одной програме способной его воспринимать не был реализован согласно своим стандартам.
Поэтому, лучше называть вещи своими именами - пусть лучше будет сложнее понять, но правильно, чем неверно истолковано.
Что касается нашего спора: я могу согласится называть локальную функцию методом, но я всего 1 человек имеющий мало веса в огромнейшем программерском сообществе. В этом же сообществе существует масса литературы трактующей метод по-другому. Локально приняв соглашение об использовании ненормативной терминологии мы создадим прецедент, последствиями которого может стать кривая реализация другого абсолютно не связанного с нашим спором проэкта. Что в дальнейшем повлечет за собой лишние усложнения в технологии работающей с ним и т.д...
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 30.06.2008 в 17:34.
Старый 30.06.2008, 17:15
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
AS2 - ООП?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 30.06.2008, 17:22
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от iNils Посмотреть сообщение
AS2 - ООП?
AS2 как языка не существует. AS2 — ООП-маска.

Старый 30.06.2008, 17:40
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Это не значит, что при определнных обстоятельствах функция и метод не могут выполнять одну и ту же роль. Просто существуют такие обстоятельства, когда они это делать не могут.

Нет таких обстоятельств, всегда можно вызвать локальную функцию в теле родного класса.
А метод можно вызвать вне тела класса - в этом разница
__________________
Hell is the possibility of sanity

Старый 30.06.2008, 20:15
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 5  
Ответить с цитированием
riden
 
Аватар для riden

Регистрация: Jun 2005
Сообщений: 147
2 Inils: поправил.
2 wvxvw:
Цитата:
Цитата:
Это не значит, что при определнных обстоятельствах функция и метод не могут выполнять одну и ту же роль. Просто существуют такие обстоятельства, когда они это делать не могут.

Нет таких обстоятельств, всегда можно вызвать локальную функцию в теле родного класса.

А метод можно вызвать вне тела класса - в этом разница
Вы хотите вызвать приватный метод вне тела класса? Помилуйте, но это не возможно. Ни вне тела класса, ни на этапе исполнения...
2 __etc:
Это же вы пишите, что this имеет отношение к области видимости... я уже писал.
Цитата:
Так то что функция все видит, убедится очень легко... процитирую свой Код:
......................
var pa = this;//ссылка
//приват метод изменяте паблик свойство
function pMetA(){pa.a=10;}
..................
Как видите переменная pa - видна в приватном методе, да и будет видна в паблик методе. По этому не понятны притензии, якобы не видит верхний this...
this - указатель на объект активации функции, то есть на объект, который вызывает функцию, это может быть объект-экземпляр класса (функции). если функция вызывется из временной диграммы, то - ссылка на _level0, если функция внутри функции тупо лежит и не вызывается, то вы ничего не получите от this. К чему вы приплетаете сюда "this" из классового ООП? В АС3 если вы напишите внутри функции this, знаете что будет, но здесь - по другому.
Область видимости? - все переменные верхней функции видны.
__________________
видеоигры - высший вид искусства


Последний раз редактировалось riden; 30.06.2008 в 20:33.
Старый 30.06.2008, 20:46
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от riden Посмотреть сообщение
this - указатель на объект активации функции
Господи, прекратите думать мыслями товарища Гурского, этот ваш объект активации настолько низкоуровневая вещь, что товарищ Гурский в начале параграфа заявил на двухсотой (!) странице, что пора прояснить «смутную общую картину языка» © (т.е. он пудрил мозги двести страниц), а в конце «какое из проявлений функции считать основным — ответить на этот вопрос очень и очень непросто» © (продолжаем дальше варить кашу). Т.е. он мало того, что сам толком не понял, о чем рассказывает, так ещё и запудривает мозги другим. Поэтому, пожалуйста, постарайтесь думать своей головой.
Ваш чудо-приватный метод с нормальным this, а не «объектом активации» из книжки Гурского будет выглядеть вот так:

Код:
function MyClass() {
	this.x = 10;
	
	function privateMethod() {
		trace('call privateMethod, i am: '+this);
		this.x = 20;
	}
	
	this.publicMethod = function() {
		trace('call publicMethod, i am: '+this);
		privateMethod.call(this);
	}
	
	this.toString = function() {
		return 'MyClass instance';
	}
}
o = new MyClass();
trace('o is '+o);
trace('o.x before = '+o.x); // 10
o.publicMethod();
trace('o.x after = '+o.x); // 20;
trace('o.privateMethod = '+o.privateMethod); // undefined
Конечно, для реализации всей этой красоты, нам придется воспользоваться множеством костылей, вроде call с apply и прочими танцами, зато создали инкапсуляцию на уровне языка, а не на уровне договоренности с самим с собой. Так вот. Меня интересует все эти три кита ООП в одном виде, примеры кода на AS3 я написал, хочу увидеть пример на AS1, опять же, на уровне языка, а не договоренности с самим с собой, что вооон тот белый столб на самом деле черный и вообще его там нет.

Старый 30.06.2008, 20:46
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
riden, func2 это приватный метод?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 30.06.2008, 21:09
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 8  
Ответить с цитированием
riden
 
Аватар для riden

Регистрация: Jun 2005
Сообщений: 147
2 Inils: это здесь причем. Этот код я совершенно к другому вопросу привел. Нет конечно.
А приватный метод вот - pMetA
Код:
function Class1(){
//паблик свойство
this.a = 4;
var pa = this;//ссылка
//приват метод изменяте паблик свойство
function pMetA(){pa.a=10;}

//паблик методы
function pmet1(){pMetA();}
function pmet2(){trace("do pmet2");}
this.met1=pmet1;//паблик метод
this.met2=pmet2; //паблик метод

}
////////////////////////////////////////
var obj = new Class1();
var obj1 = new Class1();

trace(obj.a);//4
obj.met1();
trace(obj.a);//10
trace(obj1.a);//4
obj1.met1();
trace(obj1.a);//10
2 __etc:
Цитата:
Вы создали свойство в анонимной области видимости, после этого приплетаете объект активации (arguments.caller, вы знаете, что это такое?), который вообще отношения к ней не имеет.
Нет, это вы Гурского не понимаете.
argumetns.callee - возвращает не объект активации, а определение функции, короче ссылается на саму функцию. А объект активации, как я уже писал - это объект который вызывает функцию. Код функции, например выполняется при использовании оператора new Func, при создании экземпляра класса(функции).
Вот так будет правильно:
Код:
function Class1(a){
this.a=a;
	trace (this); //[object Object] //указатель на obj - экземпляр класса Class1
	function localFunc(){
		this.b=2;
		trace(this); //[type Object]
		trace(this.arguments);//аргумент функции внешней
					//это подтверждает что объект активации - внешняя функция (Class1)
		trace(this.a); //undefined
		trace(this.b); //2
	}
	localFunc(); // вызов локальной функции, иначе this ничего не будет возвращать
	//this.met = localFunc;
}
//Class1();
var obj = new Class1("аргумент функции внешней");
//c.met();
/*Выводит:
[object Object] //this
[type Object] //this
undefined
аргумент функции внешней //this.arguments
2 //this.b
*/
Ну и также такой пример можно привести:
Код:
function func(){
	trace(this);
}
func();//_level0
obj = new func();//[object Object]
2 wvxvw:
Цитата:
Что касается нашего спора: я могу согласится называть локальную функцию методом, но я всего 1 человек имеющий мало веса в огромнейшем программерском сообществе...
Никто не называет локальную функцию - методом, хватит извращатся wvxvw.
Я называю локальную функцию в prototype-based OOP AS1 - приватным методом. Разницу чувствуете?
__________________
видеоигры - высший вид искусства


Последний раз редактировалось riden; 30.06.2008 в 21:17.
Старый 30.06.2008, 21:24
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 9  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
>> Вы хотите вызвать приватный метод вне тела класса? Помилуйте, но это не возможно. Ни вне тела класса, ни на этапе исполнения...

Да, я хочу вызвать приватный метод и увидеть как компайлер, ну или на худой конец дебаггер расскажет мне об ошибке =)
Это логичное и ожидаемое поведение приватного метода. Т.е. метод есть? - да есть. Вызвать можно? - нет, нельзя.

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

От вас не требовался "prototype-based OOP AS1 - приватным метод". Нужен просто ООП приватный метод, без довесок в виде prototype-based =)

ЗЫ. на протяжении этой дискусии я не извращался (хотя, правды ради, готов признать, что иногда я это делаю ) С самого моего первого поста я последовательно, ни разу не отказываясь провожу одну и ту же мысль, просто с каждым разом освещая другие ее аспекты, которые, возможно, были упущены из виду другими дискутантами.
Мое убеждение остается таким же, каким и было: в АС1 приватных методов не существует, но существуют определенные воркараунды позволяющие добиться сходной функциональности, вместе с тем, каждый воркараунд имеет свои недостатки, справится с которыми не представляется возможным в силу отсутствия необходимого инструментария.

Да, и еще, вы путаете arguments.callee и arguments.caller. Но эти ссылки могут указывать на один и тот же объект только в случае рекурсивного вызова функции. Во всех остальных случаях callee (дословно "вызываемый") указывает на текущую функцию, а caller (дословно "вызывающий") указывает на функцию, которая текущую функцию вызвала. И обе эти ссылки только случайно могут совпасть с this текущей функции т.как прямо с этим не связаны.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 30.06.2008 в 21:46.
Старый 30.06.2008, 22:04
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 10  
Ответить с цитированием
riden
 
Аватар для riden

Регистрация: Jun 2005
Сообщений: 147
Цитата:
в АС1 приватных методов не существуют, но существуют определенные воркараунды позволяющие добиться сходной функциональности, вместе с тем, каждый воркараунд имеет свои недостатки, справится с которыми не представляется возможным в силу отсутствия необходимого инструментария.
Спор не о чем... Я говорю о реализации приват и паблик, так как здесь в начале утверждали, что в AS1 - все паблик, нет инкапсуляции, что локальные функции по функциональности в ас1 чем-то отличаются: не могут обращатся к свойствам класса или изменять их, или еще - сама локальная функция не может использоватся в методах... - все это я опроверг.
К тому же представления о ООП в AS1 здесь оказались не четкими... Ведь Функция AS1 - играет роль класса, и тела класса.
Вы же по прежнему сравниваете два ООП, я этого не делал. Пост - #333

Цитата:
Да, и еще, вы путаете ...
Ничего не путаю, я пишу о том что такое объект активации функции, и что к нему не имеет отношение arguments.callee (ну и caller).

Цитата:
Да, я хочу вызвать приватный метод и увидеть как компайлер ...
Это то же можно реализовать, только это будет делать не компилятор, а вы, или сам класс, можно создать специальный метод.
Цитата:
А то получается, я взял ваш класс, а то, как вы форматируете код противоречит моим религиозным принципам и смотреть в него я не хочу . АПИ к вашим классам нету... и вот мне приходит в голову...
Тоже не вопос для AS1.

Заметьте принципиальную разницу, я говорю только об AS1, не сравниваю языки. Свою позицию относительно AS3 я уже выразил в посте #333. То есть вы мне пытаететсь доказать то, что я и так знаю. Все это не ко мне...
При попытках сравнивать языки, ООП, вопросов типо "AS3 оопэшнее, лчше, правильней...", и пр. возвращайтесь к посту 333 и читайте, читайте, читайте...
__________________
видеоигры - высший вид искусства


Последний раз редактировалось riden; 30.06.2008 в 22:06.
Создать новую тему Ответ Часовой пояс GMT +4, время: 11:16.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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