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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.07.2008, 13:16
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 401  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от riden Посмотреть сообщение
Это значит, что все переменные (свойства) во внешней функции (классе) видны.
Но не экземпляра. А нужно экземпляра, последний раз об этом говорю (я даже нужный код уже привел фиг знает, когда, а вы все не унимаетесь), так что лично я закончил тему по поводу объектов активации. Я уже три десятка постов назад продолжил тему объектно-ориентированности AS1, а вы всё тянете свои чертовы объекты активации, хотя речь шла вообще о реализации приватов в AS1 и они реализованы уже. Сейчас речь идет о реализации всех трех принципов ООП одновременно, на основе AS3-варианта. Если вы не хотите в этом участвовать — пожалуйста, не мешайте другим, в особенности товарищу индейцу.

Цитата:
Сообщение от riden Посмотреть сообщение
P.S: нет, похоже, это у вас все таки каша в голове
Я, в отличие от вас, не редактирую по 10 раз посты после того, как на первоначальные редакции уже были даны ответы. Если вы будете продолжать сначала писать одно, потом редактировать и писать другое через полчаса, тогда мне не о чем с вами разговаривать. После этого вы начинаете утверждать, что, якобы, у меня каша в голове.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
...инициализируется объектом
Код:
function a () {
	trace (this); 
}
function b(){
	trace (this);
	a()
}
new b()
setInterval(a, 1000);
[object Object]
_level0
undefined

Ну вот откуда тут _level0?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 01.07.2008, 13:47
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 403  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
Яски, а где в ООП написано, что должны быть inline методы? Вы кажется путаете тёплое с мягким
А кто вдруг решил, что в ООП обязательно должен быть this, что должны быть классы, множественное наследование. Например, в Си++ есть перегрузка операторов, но это дополнительная возможность, которой нет в истинном определении ООП.

Цитата:
Сообщение от __etc Посмотреть сообщение
А посему, AS1 — псевдо-ООП язык, не является истинно объектно-ориентированным, как и JavaScript.
Может на эту тему тоже поспорим?

Цитата:
Сообщение от __etc Посмотреть сообщение
Кстати, наследование реализуется не так, как вы написали, ... Для наследования у вас есть скрытые костыли языка в виде __proto__ и __constructor__.
Спасибо, я и не знал.

Цитата:
Сообщение от __etc Посмотреть сообщение
Яски, я прошу написать не по отдельности все принципы ООП, а все вместе, пример на AS3 я привел. Истинно объектно-ориентированным языком можно назвать тот язык, который позволяет на уровне языка реализовать три принципа ООП сразу вместе на парочке классов, а не по отдельности, причем, реализованных средствами самого языка, а не руками, как тут уже всю тему пытаются сделать.
Да, пожалуйста:

Код:
function IMyClass(){
	this.getRotation = function(){
		return 'abstract method'
	};
};

function MyClass() {
	this.__proto__ = IMyClass;
	
	this.angle = 0;
	
	var calculateValue = function () {
		this.angle = 2*Math.PI*Math.random();
	};
	this.getRotation = function() {
		calculateValue.call(this);
		return this.angle/Math.PI*180;
	};
};

function AnotherMyClass() {
	this.__proto__ = MyClass;

	this.getRotation = function() {
		var	rotation = this.__proto__.getRotation();
		return rotation/2;
	};
	this.getRadians = function() {
		return this.angle/2;
	}
};

var iMyClass = new IMyClass();
var myClass = new myClass();
var aMyClass = new AnotherMyClass();

trace(iMyClass.calculateValue()) // "undefined"
trace(iMyClass.getRadians()) // "undefined"
trace(iMyClass.getRotation()) // "abstract method"
trace(iMyClass.angle) // "undefined"

trace(myClass.calculateValue()) // "undefined"
trace(myClass.getRadians()) // "undefined"
trace(myClass.getRotation()) // "152.942357249558"
trace(myClass.angle) // "2.66934769976621"

trace(aMyClass.calculateValue()) // "undefined"
trace(aMyClass.getRadians()) // "1.3346738498831"
trace(aMyClass.getRotation()) // "102.746495101601"
trace(aMyClass.angle) // "3.58652926881432"
Даже немного компактнее получилось.

Как я уже говорил АС1 и JavaScript являются прототипными ООП. Что свойственно для языков программирования без жесткой типизации, в которых нельзя ввести определение класса. Если ,etcs, хочет называть все прототипные языки программирования "неистенными" это его право, но только вместе с приставкой ООП.


Последний раз редактировалось Яски; 01.07.2008 в 13:59.
Старый 01.07.2008, 14:21
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 404  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от Яски Посмотреть сообщение
Может на эту тему тоже поспорим?
JavaScript такой же псевдо-ООП, как и AS1, нет разницы. Ещё раз говорю, что язык вам позволяет реализовывать ООП, куцое, правда. Но у него нет средств для обеспечения той же приватности или полиморфизма, эти вещи разработчик просто в голове держит и все.

Цитата:
Сообщение от Яски Посмотреть сообщение
Да, пожалуйста:

Код:
function IMyClass(){
	this.getRotation = function(){
		return 'abstract method'
	};
};

function MyClass() {
	this.__proto__ = IMyClass;
	
	this.angle = 0;
	
	var calculateValue = function () {
		this.angle = 2*Math.PI*Math.random();
	};
	this.getRotation = function() {
		calculateValue.call(this);
		return this.angle/Math.PI*180;
	};
};

function AnotherMyClass() {
	this.__proto__ = MyClass;

	this.getRotation = function() {
		var	rotation = this.__proto__.getRotation();
		return rotation/2;
	};
	this.getRadians = function() {
		return this.angle/2;
	}
};

var iMyClass = new IMyClass();
var myClass = new myClass();
var aMyClass = new AnotherMyClass();

trace(iMyClass.calculateValue()) // "undefined"
trace(iMyClass.getRadians()) // "undefined"
trace(iMyClass.getRotation()) // "abstract method"
trace(iMyClass.angle) // "undefined"

trace(myClass.calculateValue()) // "undefined"
trace(myClass.getRadians()) // "undefined"
trace(myClass.getRotation()) // "152.942357249558"
trace(myClass.angle) // "2.66934769976621"

trace(aMyClass.calculateValue()) // "undefined"
trace(aMyClass.getRadians()) // "1.3346738498831"
trace(aMyClass.getRotation()) // "102.746495101601"
trace(aMyClass.angle) // "3.58652926881432"
Даже немного компактнее получилось.
Мой трейс:

Цитата:
Сообщение от Flash CS3
undefined
undefined
abstract method
undefined
undefined
undefined
undefined
undefined
undefined
NaN
NaN
undefined
Не работает, вы не находите?

Цитата:
Сообщение от Яски Посмотреть сообщение
Как я уже говорил АС1 и JavaScript являются прототипными ООП. Что свойственно для языков программирования без жесткой типизации, в которых нельзя ввести определение класса.
Если рассматривать понятие ООП как более абстрактное, программирование с использованием понятия объектов, то тогда большинство языков объектно-ориентированные.


Цитата:
Сообщение от Яски Посмотреть сообщение
Если ,etcs, хочет называть все прототипные языки программирования "неистенными" это его право, но только вместе с приставкой ООП.
Я уже говорил, что я согласен на формулировку, что AS1 — ООП язык, но только с приставкой «псевдо». Class-based языки — ООП языки без приставок.

p.S. В моем нике всего три буквы и два подчеркивания, но почему в нём постоянно делают ошибки? То буквы местами перепутают, то «c» с «s», то одно подчеркивания вместо двух (хотя подчеркивания можно и опустить совсем).

Старый 01.07.2008, 14:24
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 405  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Яски, есть ООП, а есть возможности языка с вашей логикой Вы мне можите доказывать, что Джава не язык программирования вовсе, так как там нету класса MovieClip что за бред Вы несёте про this, про inline-методы, перегрузка операторов? какое отношение к ООП они имеют? миксинг классов вообще фактически с точки зрения ООП, противопоказан.


Последний раз редактировалось BlooDHounD; 01.07.2008 в 15:07.
Старый 01.07.2008, 15:33
Ромастый вне форума Посмотреть профиль Отправить личное сообщение для Ромастый Найти все сообщения от Ромастый
  № 406  
Ответить с цитированием
Ромастый
 
Аватар для Ромастый

Регистрация: Jan 2004
Адрес: На чердаке.
Сообщений: 1,112
Цитата:
Сообщение от riden Посмотреть сообщение
Ложь. prototype нужен только лишь для организации наследования, как
Код:
Class.prototype = new SuperClass();
В остальном prototype может использоватся как ссылка, для того что бы НА ЭТАПЕ ИСПОЛНЕНИЯ СОЗДАТЬ НОВОЕ СВОЙСТВО (так и делает wvxvw)
Не вижу ни какой сязи с prototype и созданием свойств (методов) вне конструктора (тела класса).
Ну здрасте-приехали. Еще и во лжи объявили...
Если уж на то пошло, то и as1 класс создается НА ЭТАПЕ ИСПОЛНЕНИЯ кода в кадре, так что нет существенной разницы - добавили вы метод в конструкторе (так уж и быть, "теле" класса), или через prototype. Куда важнее, что а) - сохраняется область видимости; б) - все методы и свойства, добавленные в прототип, распространяются на ВСЕ экземпляры класса, а не создаются каждый заново при создании экземпляра. По мне, это куда ближе к концепции ООП.
А создавать локальную функцию (по большому счету - независимый объект), делегировать ему функционал основного класса с помощью ссылки или apply/call - куда больший изврат.
P.S. Задержался с ответом, но все же.
__________________
...Тебе страшно? Мне - нет.

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

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от Ромастый Посмотреть сообщение
А создавать локальную функцию (по большому счету - независимый объект), делегировать ему функционал основного класса с помощью ссылки или apply/call - куда больший изврат.
Ну так мы же обеспечивали инкапсуляцию на уровне языка
Понятное дело, что проще инкапсулировать методы в собственной голове и закрыть глаза на то, что приваты торчат наружу.

Старый 01.07.2008, 16:00
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 408  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от __etc Посмотреть сообщение
Я буду скучен и повторю ответ BlooDHounD: Ну вы же знаете ООП? Тогда откуда такие вопросы?
Я буду еще скучнее и тоже повторюсь: мне понятно ваше желание не отвечать на этот вопрос.
Ведь как только такой ответ будет дан, сразу будет видно, что чему отвечает и соответствует.

Цитата:
Сообщение от wvxvw
курим мануал. ответ простой: нет. указатель на объект активации - argumetns.caller
Народ, ну вы даете. Надо же так не знать, что такое объект активации
argumetns.caller - указатель на объект функции, но не на объект активации. Это разные вещи.
this - тоже не указатель на объект активации. Это свойство объекта активации, показывающее, чьим методом является функция.

Код:
function A(){
	function B(){
		trace(this)
	}
	B()
}
A() // [type Object] - это объект активации функции A, но не функции B!
Объект активации во ФП6 можно просмотреть for in с помощью ASSetPropFlags(), будет видно что все локальные свойства (var) внутренние (вложенные) функции, массив arguments, свойство this - все это содержиться в объекте активации.

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

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от chingachgoog Посмотреть сообщение
Я буду еще скучнее и тоже повторюсь: мне понятно ваше желание не отвечать на этот вопрос.
Ведь как только такой ответ будет дан, сразу будет видно, что чему отвечает и соответствует.
Я ответил на ваш вопрос вопросом, вы знаете ООП? Вы знаете, что такое инкапсуляция? Если знаете, то к чему вопрос, для какой цели созданы приваты? А созданы они для реализации инкапсуляции (одного из принципов ООП, это важно) на уровне языка. В AS1 также нет никакого полиморфизма на уровне языка, нет никакого контроля за сигнатурой в переопределенном методе, соответственно нет и интерфейсов.

Цитата:
Сообщение от chingachgoog Посмотреть сообщение
Объект активации во ФП6 можно просмотреть for in с помощью ASSetPropFlags(), будет видно что все локальные свойства (var) внутренние (вложенные) функции, массив arguments, свойство this - все это содержиться в объекте активации.
iNils привел код, в котором нет объекта активации и код, в котором он является рутом. Ваш этот объект активации можно достать лишь во вложенной функции и является недо-объектом (он даже в toString выводится как [type Object], а не [object Object], как другие объекты) и одновременно ссылкой на локальную область видимости родительской функции. Это не arguments.caller и не arguments.callee, да. Но особой пользы этот недо-объект не несет (его свойства в семерке скрыли от перечисления совсем, чтобы вопросов лишних не возникало), потому как локальная область видимости родительской функции доступна и без this, так как является внешней по отношению к вложенной функции.

Посему, this в моем коде был изменен на более полезную и логичную область видимости экземпляра класса (ссылка на экземпляр). Это несколько лучше костыля с внешней ссылкой, но других способов сделать функцию приватной в AS1 лично я больше не вижу.

И вообще, товарищ Гурский под объектом активации подразумевает как раз этот самый полуобъект-ссылку на локалку родительской функции, а вот большинство программистов, не знакомых с творчеством Гурского, под объектом активации понимают arguments.caller, т. е. метод/функция, вызвавший (активировавший) данный.


Последний раз редактировалось etc; 01.07.2008 в 16:35.
Старый 01.07.2008, 17:13
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 410  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от __etc Посмотреть сообщение
Я ответил на ваш вопрос вопросом, вы знаете ООП? Вы знаете, что такое инкапсуляция? Если знаете, то к чему вопрос, для какой цели созданы приваты? А созданы они для реализации инкапсуляции (одного из принципов ООП, это важно) на уровне языка.
Вы не ответили на вопрос. Инкапсуляция не имеет ничего общего с private. Приват может усилить инкапсуляцию, но не более.
Цитата:
Сообщение от __etc Посмотреть сообщение
В AS1 также нет никакого полиморфизма на уровне языка, нет никакого контроля за сигнатурой в переопределенном методе, соответственно нет и интерфейсов.
Да, в языке AS1 нет слов интерфейс, приват и даже (о ужас!) класс. Тем не менее это язык ООП. Ибо нигде не сказано, что ООП язык ДОЛЖЕН иметь такие слова. Зато инкапсуляция, наследование и полиморфизм легко достижимы на AS1, пусть даже без специально зарезервированных слов. У прототипных языков есть свои преимущества и надо их использовать, а не ворчать по поводу отсутствия интерфейсов.

Цитата:
Сообщение от __etc Посмотреть сообщение
iNils привел код, в котором нет объекта активации и код, в котором он является рутом.
Ничего подобного. Вы невнимательно прочитали мой предыдущий пост и все еще не в введении, что такое объект активации.
iNils привел код, где трассируется указатель this. А this указывает на объект активации только в том случае, если функция вложена (тогда this из вложенной функции указывает на объект активации функции-оболочки)

Цитата:
Сообщение от __etc Посмотреть сообщение
И вообще, товарищ Гурский под объектом активации подразумевает как раз этот самый полуобъект-ссылку на локалку родительской функции, а вот большинство программистов, не знакомых с творчеством Гурского, под объектом активации понимают arguments.caller, т. е. метод/функция, вызвавший (активировавший) данный.
Тогда жаль, что "большинство программистов" не хотят знать как на самом деле работает код.

PS Кстати не __constructor__ а просто constructor

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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