![]() |
ООП. Интерфейсы
Если класс Figure реализовывает несколько интерфейсов: IMoveable, IDragable, ICleanable
то при вот таком объявлении перемнной Код:
IMoveable fig1 = new Figure(); |
у объекта будут. У переменной fig1 – нет. Надо создать переменные типа IDragable, ICleanable, либо кастовать fig1 к этим типам данных.
Код AS3:
|
спасибо, все понятно
|
Цитата:
Код AS3:
|
Цитата:
|
Если есть несколько объектов, которые надо обрабатывать одновременно и как IMoveable и как IDragable и как ICleanable, то лучше для них еще один интерфейс сделать и заставить его реализовывать
Код AS3:
Код AS3:
а если для разных функций нужны произвольные комбинации интерфейсов - на комбинаторный взрыв числа отнаследованных интерфейсов можно напороться. |
Вообще для случая, когда "класс Figure реализовывает несколько интерфейсов: IMoveable, IDragable, ICleanable " напрашивается композиция.
|
Цитата:
Код:
Figure fig1 = new Figure() |
Почему же, будут. Только зачем тогда вообще интерфейсы, если нет полиморфизма и класс один-одинешенек?))
|
Цитата:
Код AS3:
Ты вроде спрашивал будут ли они доступны в виде: Код AS3:
Но только тогда непонятно зачем это нужно вообще? Если все три интерфейса будут использоваться в одном месте то смысла объявлять переменную с типом одного из интерфейсов смысла нет, проще сделать эту переменную сразу с типом класса реализовываюющим эти интерфейсы. Интерфейсы нужны там где в определенном месте тебе нужны только методы из этого интерфейса. Например функция драга, в каком-то глобальном классе, ей пофигу что драгать, и в качестве параметра она принимает IDragable. В таком случае ты используешь класс как тебе надо, а в функцию его передаешь как кучу других. Яркий пример это BitmapData#draw (и еще много других, это просто на языке крутится) - он принимает IBitmapDrawable и ему глубоко пофигу может ли принятый им объект что-то кроме того что описано в интерфейсе. Ну т.е. если такого разделения не нужно то собственно и смысл интерйесов слегка нивелируется. Делай обычный класс и не парь никому моск. Если же у тебя есть отдельный модель который работает с драгами, отдельный с клинами, отдельный с мувами - то да, делай интерфейсы но тогда и вопросы отпадают на тему доступа к остальному функционалу класса не описанному в каждом конкретном интерфейсе. Как еще один метод использования интерфейсов это просто к примеру большая команда, есть совсем зеленые, и вот чтоб совсем зеленые или же просто новый человек не напихал отсебятины пишутся интерфейсы. Мол пиши внутри что хочешь, но вот этот набор методов должен быть и быть должен в таком вот виде. Но такой подход я лично встречал не так часто. Команда у нас небольшая и надобности не возникало. Добавлено через 3 минуты Цитата:
Получи ТС два ответа по цене одного ;) |
| Часовой пояс GMT +4, время: 11:29. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.