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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.04.2009, 13:19
IDimitry вне форума Посмотреть профиль Найти все сообщения от IDimitry
  № 11  
Ответить с цитированием
IDimitry
Banned
[+5 23.05.09]
[+1 23.05.09]

Регистрация: Mar 2009
Сообщений: 93
Насколько понял, речь идет не о породившем и порожденном классах, а о классах в иерархии флеш-документа и их взаимотношении.

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от IDimitry Посмотреть сообщение
Насколько понял, речь идет не о породившем и порожденном классах, а о классах в иерархии флеш-документа и их взаимотношении.
А какая разница?

Старый 22.04.2009, 16:09
IDimitry вне форума Посмотреть профиль Найти все сообщения от IDimitry
  № 13  
Ответить с цитированием
IDimitry
Banned
[+5 23.05.09]
[+1 23.05.09]

Регистрация: Mar 2009
Сообщений: 93
В первом случае создаем класс-прототип, от которого порождены другие классы - к примеру, однотипные элементы для сцены. Класс-родитель предоставляет какие-то общие для потомков свойства и методы. Связь родитель-потомок есть, но смысла обращаться к родителю ну никакого нет - что мы там забыли?

Второй случай лучше всего видно в ситуации, которая возникает буквально у каждого: есть главный паблиш класс, без которого не обойтись, и классы элементов, расположенные на сцене. При обращении из класса элемента к главному классу (если они MovieClip или Sprite) происходит через parent. Но с точки зрения ООП какой же он парент? - Он овнер. И избежать взаимодействия между такими зависимыми классами невозможно (не представляю ситуацию, когда можно было работать только с "черными ящиками").

А если зависимый класс не от Sprite (MovieClip)? - Прямой связи нет. Как уже писали, для обращения из "потомка" к "родителю" приходится передавать экземпляр последнего. Конечно, для архитектуры ущербно, но иногда без этого никак ...

Старый 22.04.2009, 17:53
Smrad вне форума Посмотреть профиль Отправить личное сообщение для Smrad Найти все сообщения от Smrad
  № 14  
Ответить с цитированием
Smrad

Регистрация: Nov 2008
Сообщений: 205
Отправить сообщение для Smrad с помощью ICQ
Цитата:
Сообщение от IDimitry Посмотреть сообщение
А если зависимый класс не от Sprite (MovieClip)? - Прямой связи нет. Как уже писали, для обращения из "потомка" к "родителю" приходится передавать экземпляр последнего. Конечно, для архитектуры ущербно, но иногда без этого никак ...
Для нотификации лучше использовать сообщения.

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

Регистрация: Sep 2002
Сообщений: 30,787
IDimitry, я во всём нашем проекте (1300+ классов) нашёл единственное место, было обращение к родителю. И то, просто лишь потому что было лень и некогда сделать нормально.

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

Старый 22.04.2009, 19:53
xpymbl4 вне форума Посмотреть профиль Отправить личное сообщение для xpymbl4 Найти все сообщения от xpymbl4
  № 16  
Ответить с цитированием
xpymbl4
 
Аватар для xpymbl4

Регистрация: Jul 2008
Адрес: Smolensk
Сообщений: 124
Отправить сообщение для xpymbl4 с помощью ICQ Отправить сообщение для xpymbl4 с помощью Skype™
Хорошо. Т.е., напимер, способ описанный ниже, для вызова метода myFunction() из одного дочернего класса и вругом в таком виде не допустим?
Код AS3:
package main{
	import flash.display.MovieClip;
 
	public class MainClass extends MovieClip {		
		private var theElseClass1:ElseClass1 = new ElseClass1();
		public var theElseClass2:ElseClass2 = new ElseClass2();
 
		public function MainClass() {
			addChild(theElseClass1);
			addChild(theElseClass2);
			theElseClass1.myConstructor();
		}		
	}
}
Код AS3:
package main{
	import flash.display.MovieClip;
 
	public class ElseClass1 extends MovieClip {	
 
		public function ElseClass1() {				
		}	
		public function myConstructor() {
			(parent as MainClass).theElseClass2.myFunction();
		}
	}
}
Код AS3:
package main{
	import flash.display.MovieClip;	
 
	public class ElseClass2 extends MovieClip {
 
		public function ElseClass2() {				
		}
		public function myFunction() {
			trace("trace it");
		}
	}
}
__________________
круглое тащим, квадратное катим

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

Регистрация: Sep 2002
Сообщений: 30,787
xpymbl4, ну, в общем, большие дяди так не делают.

Старый 22.04.2009, 20:37
IDimitry вне форума Посмотреть профиль Найти все сообщения от IDimitry
  № 18  
Ответить с цитированием
IDimitry
Banned
[+5 23.05.09]
[+1 23.05.09]

Регистрация: Mar 2009
Сообщений: 93
Если можно, то побуду в роли просящего, чтобы не подумали, что я спорю. Просто очень хочу разобраться для себя.

Есть такая иерархия: главный паблиш-класс, динамик-класс элемента на сцене, класс сокета и, к примеру, вспомагательный класс с константами и припертями (набор статических переменных для констант и сеттеров/геттеров для пропертей).
- сокет создается из главного класса;
- класс препертей и констант создается в конструкторе главного класса;
- мувик создается в произвольное время (т.е. можно положить на сцену, а можно динамически создать).

1. Если необходимо в зависимости от действий динамического мувика отослать данные через сокет, как с точки зрения правильной архитектуры это логичнее сделать? - Первое, что приходит в голову, - передать мувику ссылку на сокет. Второе - прописать сокет в проперти-объект, созданный в главном классе, и вызывать из дочернего родительский объект проперти, в котором есть свойство сокет. Я так понимаю, согласно подходам по принципу "черных ящиков", эти варианты неправильны? - Надо инициировать/делегировать события главному классу, который сам работает с сокетом?
2. В главном классе создаем экземпляр класса пропертей, в котором удобно держать "глобальные" переменные и константы. Понятно, что с созданием в другом классе нового экземпляра класса пропертей, данные в последнем будут не уникальны. Поэтому напрашиваются 3 решения: передача ссылки на созданный экземплят, создания синглтона или обращение к главному классу, в котором создан этот экземпляр. Опять же, согласно расхожему мнению, синглтон - это плохо, а два других способа противоречат "черному ящику". Но тут событие не пошлешь ... как правильно?

Если честно, читать книги время не позволяет, до всего приходится доходить тернистой дорогой. Вот и хотелось бы для себя поставить жирную точку - как же действительно наиболее правильнее осуществить взаимодействие между классами при разных способах создания, наследования, общения и т.д. Спасибо.

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Синглтон - это не плохо, просто надо правильно использовать.
Обычно дети (не путать с наследниками) шлют события родителю, а родитель сам решает что и с кем делать.

в частности ElseClass1 должен был крикнуть папе MainClass "Пусть ElseClass2 помоет пол" и папа услышав, решит ага пусть. А в примере ElseClass1 говорит ElseClass2у - папа сказал тебе помыть пол :о)
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

Регистрация: Sep 2002
Сообщений: 30,787
IDimitry,

1) Этим должен заниматься контроллер, получающий события от вьюверов. Типичный MVC.

2. Опять же, вы мыслите на уровне, что какой-то экземпляр должен сам доставать необходимые данные. Почему нельзя заранее дать необходимые данные экземпляру?

В общем и целом, познакомтесь с идеологией MVC и тогда проблемы с обращением к родителям отпадут сами с собой.

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

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

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


 


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


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