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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.11.2012, 14:02
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 1  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
По умолчанию Организация классов в проекте

Доброго времени суток.
У меня появилась проблема - есть 2 проекта, один подгружается в другой, общаются друг с другом через интерфейсы. Дело в том, что некоторые функции интерфейсов возвращают объекты классов которые есть в одном проекте, но нет в другом, а интерфейсы общие:

Код:
Interfaces
-INterface1
-INterface2
Project1
-Class1
-Class2  = Main Class
Project2
-Class3
-Class4  = Main Class
И в INterface1 есть такое :
Код AS3:
public interface INterface1 {
    function get someComponent():Class1;
}
Class2 имплементит Interface1, и в Project2 , через интерфейс вызывается его геттер someComponent().
При компиляции Project2, мне естественно выдаёт
Код:
Type was not found or was not a compile-time constant: Class1
Я нашёл пока 2 выхода, и оба мне не нравятся - указать по всему проекту Class Path (как к папке с интерфейсами), но т.к. таких вот прожектов у меня очень много, придётся проекты зафлудить Class Path'ами, я не знаю хорошо это или нет?
Или чтобы метод в интерфейсе возвращал '*' . В принципе сейчас таки делаю, но по идее если кто после меня будет дописывать что-то, через довольно короткое время он захочет меня найти и придушить , т.к. автокомплита нет, и все ошибки в рантайме будут выскакивать.
Может есть другой выход?


Последний раз редактировалось AlexLucas; 21.11.2012 в 14:43.
Старый 21.11.2012, 14:19
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 2  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Заведите абстрактный класс, от которого будет происходить ваш Class1 и возвращайте его в геттере.
Или я не понял сути проблемы?

Старый 21.11.2012, 14:39
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 3  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Суть в том что классы Class1 и Class2 не видны в Project2, но они используются в интерфейсах. И когда я использую интерфейсы в Project2, мне выдаёт ошибку что нет таких классов - Class1 и Class2.
А чем поможет завести абстрактный класс для Class1?
Скорее всего придётся для Class1 делать отдельный интерфейс.


Последний раз редактировалось AlexLucas; 21.11.2012 в 14:52.
Старый 21.11.2012, 15:16
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 4  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Цитата:
ошибку что нет таких классов - Class1 и Class2.
Ну это вполне нормальное поведение. Собственно, что ещё компилятор должен сказать увидев класс о котором он не слухом - не духом. Поэтому вам либо импортировать в ваш второй проект эти классы, либо завести абстрактный класс, котрый и будет возвращать ваш геттер. Естественно, о нем должен знать каждый проект, в котором используются его дети...

Старый 21.11.2012, 15:35
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 5  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Я понимаю что это естественное поведение, и я ищу самое простое решение. А почему абстрактные классы а не интерфейсы?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Одно непонятно, что Вы собираетесь делать с компонентом неизвестного класса?
По-идее, если Вам действительно не нужно знать класс1 во втором проекте, то и общий Интерфейс просто не должен содержать методы, возвращающие этот тип. Можно завести метод, возвращающий тот же объект-компонент как понятный (и удобный) второму проекту тип, например DisplayObject, а неподходящий (не общий) метод не включать. Если этот метод нужен в Интерфейсе для первого проекта, то сделать второй, не общий, интерфейс, расширяющий первый этим "неудобным" методом.
А лучше вообще возвращать из методов интерфейсы, а не классы, раз уж такое разделение))

Добавлено через 52 секунды
Ну вот, пока писал, сами всё сообразили)))
__________________
Reality.getBounds(this);

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
А почему абстрактные классы а не интерфейсы?
хм.. интересный вопрос. Учитывая что в ас3 вообще нет абстракции.
http://joshblog.net/2007/08/19/enfor...ctionscript-3/
По мне так лучше все-таки интерфейс создать.

П.с. пока читал тему, хотел ответить почти то же самое, что написал Wolsh )

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

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Цитата:
ас3 вообще нет абстракции
я имел ввиду абстрактную абстракцию)

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если суть задачи в том, чтобы не дублировать класс в каждой флешке, т.как известно, что в рантайме кто-то только один его должен загрузить, то есть смысл подумать об RSL. Оно для того и предназначено, вобщем. Т.е. скомпилировать класс не использующийся в проекте в библиотеку swc, библиотеку добавить в проект как external-library. Но нужно не забыть, что класс из этой библиотеки кто-то должен загрузить, и, по возможности, раньше, чем он потребуется где-то в другом месте.
__________________
Hell is the possibility of sanity

Старый 22.11.2012, 10:10
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 10  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
http://www.flasher.ru/forum/blog.php?b=317

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

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

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


 


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


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