|
|
|||||
Регистрация: Mar 2004
Адрес: Vilnius
Сообщений: 102
|
OOP дизайн с Interfaces. Зачем?
Здрасте,
хочу поинтересоваться у бывалых программеров, встречали ли вы реальные АС3 аппликации, где использовалась бы такая штука как Interfaces (Polymorphism)? Хочу обсудить данный пример: Object-oriented programming with ActionScript 3.0 Я новичок в объектном программировании и не очень понимаю, зачем нужно(точнее можно) определять отдельный interface, если всё равно в каждом классе описывается функция work(); (см. пример) То же самое можно сделать проще и без интерфейсов. Расскажите, какой должна быть реальная ситуация, чтобы Supervisor имел хоть какой-то смысл? var supervisor1:Supervisor = new Supervisor(new Teacher()); var supervisor2:Supervisor = new Supervisor(new Student());
__________________
WD Solutions |
|
|||||
Регистрация: Feb 2010
Сообщений: 95
|
А как бы ты это написал?
Да и Supervisor должен же как-то знать о наличии метода work. |
|
|||||
Интерфейсы хороши для уменьшения связности. Иногда лучше написать немного больше чтоб получить в итоге более чистый код.
__________________
while(1) {} |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Постоянно использую. Ну не часто, но не бывает проекта где без них никак.
Давно-давно спрашивал. И пришел мне на помощь dimarik, который накидал мне пример GoF Factory. Что это была фабрика я не знал и не понял, зачем она вообще там нужна. Но сам пример понял отлично. А вот и оригинальная темка.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Что-то, как то меня вопрос в тупик поставил... В начале надо определится с пониманием наследования(я не знаю, освоились ли вы с этим, из вопроса не ясно).
Потом через какой то время можно приступить к интерфейсам. Тема не то, что бы сильно сложная... Но придумать сходу достаточно простой, но реальный пример, где нужны интерфейсы как то сложно... Ну, в частности они используются в тех случаях, когда нам надо иметь некий общий функционал в двух классах, при этом у нас нет возможности унаследовать их от одного базового класса(например, потому что они уже от кого то унаследованы). Довольно много примеров есть в потернах программирования... В общем я интерфейсами пользуюсь, но не так часто, как просто наследованием... Чаще всего это довольно сложные примеры, которые не возьмусь сейчас тут описывать...
__________________
Искренне Ваш, Джек. |
|
|||||
Регистрация: Mar 2004
Адрес: Vilnius
Сообщений: 102
|
Teacher.as
package com.adobe.ooas3 { public class Teacher extends Sprite { public function Teacher():void { trace("I am teaching"); } } } package com.adobe.ooas3 { public class Student extends Sprite { public function Student():void { trace("I am studying"); } } }
__________________
WD Solutions |
|
|||||
package { public class Rabbit extends Sprite implements IAnimal { public function Rabbit() { super(); } public function run():void { // тут мы прыгаем // и нас видно, т.к. мы Sprite } } } package { public class Cat extends EventDispatcher implements IAnimal { public function Cat() { super(); } public function run():void { // тут мы тихо шебуршим // и нас не видно, т.к. мы EventDispatcher } } } Цитата:
__________________
...вселенская грусть |
|
|||||
Регистрация: Mar 2004
Адрес: Vilnius
Сообщений: 102
|
Цитата:
__________________
WD Solutions |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Конечно пример максимально упрощен, не содержит ничего "лишнего". Не надо искать в нем какой-то конкретный практический смысл "as is". А так я могу Вам тысячу примеров привести, только зачем? Когда будет нужно, Вы сами мимо не пройдете.
Навскидку 3 примера. 1) Инструмент в рисовалке. Карандаш, кисточка, резинка - по сути действие одно, хотя результат и настройки разные. Абстрактному классу "Инструмент" передаете конкретный - карандаш, кисточка и т.д., и Инструмент заставляет его "работать" с холстом по действиям пользователя. Суть "работы" не волнует Инструмент - что именно делать, решает Карандаш или Резинка или Аэрограф. 2) Пункты в выпадающем меню. Каждый объект списка может быть как просто кнопочкой, так и другим выпадающим Меню и даже неактивным Разделителем. Но для конкретного списка все они - просто MenuItem, объекты, составляющие список, которые нужно отобразить. Как они будут реагировать на поведение пользователя - их личное дело. 3) Юниты армии Двемеров. Тяжелые лучники, кавалерия, алебардисты и бронзовые големы - все они разных классов, но должны слушаться одних и тех же "приказов". Конечно, многие задачи позволяет решить наследование, но далеко не все.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Mar 2004
Адрес: Vilnius
Сообщений: 102
|
Цитата:
__________________
WD Solutions |
Часовой пояс GMT +4, время: 14:31. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|