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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.12.2007, 15:23
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 1  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
По умолчанию Что значит если тип объекта определяют как интерфейс: Obj:ISomthable

Не могу разобраться с примером применения шаблона фабрика.
В файле IProduct.as определен интерфейс:
Код:
package example {
    
    public interface IProduct {
        function manipulate():void;
    }
}
Ухожу в ступор при виде таких строчек:
Код:
var product:IProduct = this.factoryMethod();
...
protected function factoryMethod():IProduct { 
...
Моя фантазия и F1 не могут представить имя интерфейса в коде,
кроме двух случаев:
Код:
interface IName //1
class ClassName implements IName //2
работающий пример в аттаче
Вложения
Тип файла: zip app02_01_minimalist.zip (20.1 Кб, 96 просмотров)

Старый 07.12.2007, 15:36
VovkaMorkovka вне форума Посмотреть профиль Отправить личное сообщение для VovkaMorkovka Найти все сообщения от VovkaMorkovka
  № 2  
Ответить с цитированием
VovkaMorkovka
[+3 13.02.08]

Регистрация: Apr 2006
Сообщений: 421
Что именно Вы не можете понять, зачем в природе существуют интерфейсы? Или зачем нужна фабрика?
То, что несколько классов соответствуют один и тот - же интерфейс значит то, что они соответствуют определенному типу данных. А тип - же данных, в свою очередь, является спецификаций того, какие операции можно производить над объектом данного типа. Т.е если у вас два объекта разных классов, но эти самые классы соответствуют одному интерфейсу, то над данными объектами можно производить те операции, которые указаны в интерфейсе причем над тем какой класс имеет данный объект Вы не задумываетесь.

Пример, немного надуманный, но отражает суть: у вас есть два класса, часы и робот, оба не имеют предков, но соответствуют интерфейсу "Ходящие". У вас есть массив для всех элементов находящихся в приложении, и по всему массиву вы идете циклом и вызываете их операцию "идти". Т.е. у вас нет необходимости использовать абстрактный класс "ходящие", а это важно потому, что робот может еще и стрелять.

p.s. Почитайте банду четырех лучше, или "Thinking java in pattern" Брюса Эккеля, там все примеры жизненные


Последний раз редактировалось VovkaMorkovka; 07.12.2007 в 15:47.
Старый 07.12.2007, 15:42
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 3  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
ВладимирМорковь, большое спасибо за проявленное участие и внимание к моему вопросу!

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

Старый 07.12.2007, 18:37
VovkaMorkovka вне форума Посмотреть профиль Отправить личное сообщение для VovkaMorkovka Найти все сообщения от VovkaMorkovka
  № 4  
Ответить с цитированием
VovkaMorkovka
[+3 13.02.08]

Регистрация: Apr 2006
Сообщений: 421
Еще раз, что конкретно не понятно?

Старый 10.12.2007, 09:41
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 5  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Цитата:
Сообщение от VovkaMorkovka
Еще раз, что конкретно не понятно?
Интерфейс это не класс, это не шаблон по образу которого можно создать объект.
Не понятно как объект может иметь тип интерфеса.
Код:
obj1: SomeClass //понятно
obj2: ISomeClassInterface //  не понятно. Какие у объекта методы? свойства?

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

Регистрация: Sep 2002
Сообщений: 30,787
Может иметь такой тип.
Существущие методы должны быть описаны в интерфейсе, чтобы с ними можно было работать.

Старый 10.12.2007, 14:14
VovkaMorkovka вне форума Посмотреть профиль Отправить личное сообщение для VovkaMorkovka Найти все сообщения от VovkaMorkovka
  № 7  
Ответить с цитированием
VovkaMorkovka
[+3 13.02.08]

Регистрация: Apr 2006
Сообщений: 421
Цитата:
Сообщение от terbooter
Код:
obj1: SomeClass //понятно
obj2: ISomeClassInterface //  не понятно. Какие у объекта методы? свойства?
Смотрите, интерфейс ОПИСЫВАЕТ некоторый тип данных.
Это означает, что методы интерфейса должны быть реализованы в класе который имплементит данный интерфейс.
Т.е. если есть два класса A и B которые имплементят интерфейс IThomething
то можно написать так
Код:
    var a:IThomething=new A();
    var b:IThomething=new B();
И в дальнейшем использовать описанные в интерфейсе методы объектов a и b не заморачиваясь тем, что эти объекты принадлежат к разным классам.

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

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Спасибо, более менее понятно.

Такой вот дополнительный вопрос: когда мы объявляем переменную,
какие действия выполняет компилятор (выделяет память еще что-то) при создании переменной в зависимости от ее типа.

Вот, например, если:
Код:
 var variable:Number // выделяется ячейка памяти фиксированного размера, по коду идет проверка на соответствие типа

var variable:int // то же что и выше но фиксированная ячейка системной памяти меньше

var obj:ClassA // ?

var obj:Interface //?
Есть у меня подозрение что когда в роли типа выступает интерфейс, то компилятор просто проверяет наличие у объекта этих методов, те типизация интерфейсом применяется только для удобства программиста, как дополнительная защита от ошибок.
А когда в роли типа выступает класс то еще происходит выделение памяти.

Старый 11.12.2007, 13:13
VovkaMorkovka вне форума Посмотреть профиль Отправить личное сообщение для VovkaMorkovka Найти все сообщения от VovkaMorkovka
  № 9  
Ответить с цитированием
VovkaMorkovka
[+3 13.02.08]

Регистрация: Apr 2006
Сообщений: 421
Компилятор выделяет память когда вы СОЗДАЕТЕ переменную, а не при объявлении. Не путайте объявление переменной и создание.

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

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
То есть, в любом случае, указание типа это только для удобства программиста?
Для компилятора и плеера все равно напишу я так
Код:
var o:MyClass = new MyClass();
или так
Код:
var o:* = new MyClass();
?

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

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

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


 


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


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