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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.01.2011, 21:00
Weax вне форума Посмотреть профиль Отправить личное сообщение для Weax Посетить домашнюю страницу Weax Найти все сообщения от Weax
  № 1  
Ответить с цитированием
Weax
 
Аватар для Weax

Регистрация: 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

Старый 20.01.2011, 21:11
vinch вне форума Посмотреть профиль Отправить личное сообщение для vinch Найти все сообщения от vinch
  № 2  
Ответить с цитированием
vinch

Регистрация: Feb 2010
Сообщений: 95
А как бы ты это написал?
Код AS3:
public function Supervisor(worker:IWork)
Да и Supervisor должен же как-то знать о наличии метода work.

Старый 20.01.2011, 21:21
Division вне форума Посмотреть профиль Отправить личное сообщение для Division Найти все сообщения от Division
  № 3  
Ответить с цитированием
Division
 
Аватар для Division

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Интерфейсы хороши для уменьшения связности. Иногда лучше написать немного больше чтоб получить в итоге более чистый код.
__________________
while(1) {}

Старый 20.01.2011, 21:22
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Постоянно использую. Ну не часто, но не бывает проекта где без них никак.
Давно-давно спрашивал. И пришел мне на помощь dimarik, который накидал мне пример GoF Factory. Что это была фабрика я не знал и не понял, зачем она вообще там нужна. Но сам пример понял отлично.
А вот и оригинальная темка.

Старый 20.01.2011, 21:28
JackFromChaos вне форума Посмотреть профиль Отправить личное сообщение для JackFromChaos Найти все сообщения от JackFromChaos
  № 5  
Ответить с цитированием
JackFromChaos
 
Аватар для JackFromChaos

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Что-то, как то меня вопрос в тупик поставил... В начале надо определится с пониманием наследования(я не знаю, освоились ли вы с этим, из вопроса не ясно).
Потом через какой то время можно приступить к интерфейсам. Тема не то, что бы сильно сложная... Но придумать сходу достаточно простой, но реальный пример, где нужны интерфейсы как то сложно...
Ну, в частности они используются в тех случаях, когда нам надо иметь некий общий функционал в двух классах, при этом у нас нет возможности унаследовать их от одного базового класса(например, потому что они уже от кого то унаследованы).
Довольно много примеров есть в потернах программирования...
В общем я интерфейсами пользуюсь, но не так часто, как просто наследованием... Чаще всего это довольно сложные примеры, которые не возьмусь сейчас тут описывать...
__________________
Искренне Ваш, Джек.

Старый 20.01.2011, 21:28
Weax вне форума Посмотреть профиль Отправить личное сообщение для Weax Посетить домашнюю страницу Weax Найти все сообщения от Weax
  № 6  
Ответить с цитированием
Weax
 
Аватар для Weax

Регистрация: Mar 2004
Адрес: Vilnius
Сообщений: 102
Цитата:
Сообщение от vinch Посмотреть сообщение
А как бы ты это написал?
Teacher.as

Код AS3:
package com.adobe.ooas3 {
   public class Teacher extends Sprite {
     public function Teacher():void {
       trace("I am teaching");
     }
   }
}
Student.as

Код AS3:
package com.adobe.ooas3 {
   public class Student extends Sprite {
     public function Student():void {
       trace("I am studying");
     }
   }
}
Код AS3:
var teacher:Sprite = new Teacher();
var student:Sprite = new Student();
Чем так плохо?
__________________
WD Solutions

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Код AS3:
package {
 
	public class Rabbit extends Sprite implements IAnimal {
 
		public function Rabbit() {
			super();
		}
 
		public function run():void {
			// тут мы прыгаем
			// и нас видно, т.к. мы Sprite
		}
	}
}
Код AS3:
package {
 
	public class Cat extends EventDispatcher implements IAnimal {
 
		public function Cat() {
			super();
		}
 
		public function run():void {
			// тут мы тихо шебуршим
			// и нас не видно, т.к. мы EventDispatcher
		}
	}
}
При этом можно создать массив объектов IAnimal и для каждого вызвать метод run. + так мы сможем добавлять новых животных любых форм и размеров, наследуемых от любых классов, гдавное - мы можем бегать (каждый по своему)

Цитата:
встречали ли вы реальные АС3 аппликации, где использовалась бы такая штука как Interfaces
Да, и часто их использую. Например, паттерн стратегия без них незнаю как =)
__________________
...вселенская грусть

Старый 20.01.2011, 21:30
Weax вне форума Посмотреть профиль Отправить личное сообщение для Weax Посетить домашнюю страницу Weax Найти все сообщения от Weax
  № 8  
Ответить с цитированием
Weax
 
Аватар для Weax

Регистрация: Mar 2004
Адрес: Vilnius
Сообщений: 102
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Постоянно использую. Ну не часто, но не бывает проекта где без них никак.
Давно-давно спрашивал. И пришел мне на помощь dimarik, который накидал мне пример GoF Factory. Что это была фабрика я не знал и не понял, зачем она вообще там нужна. Но сам пример понял отлично.
А вот и оригинальная темка.
спасибо, почитаю!
__________________
WD Solutions

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Конечно пример максимально упрощен, не содержит ничего "лишнего". Не надо искать в нем какой-то конкретный практический смысл "as is". А так я могу Вам тысячу примеров привести, только зачем? Когда будет нужно, Вы сами мимо не пройдете.
Навскидку 3 примера.
1) Инструмент в рисовалке. Карандаш, кисточка, резинка - по сути действие одно, хотя результат и настройки разные. Абстрактному классу "Инструмент" передаете конкретный - карандаш, кисточка и т.д., и Инструмент заставляет его "работать" с холстом по действиям пользователя. Суть "работы" не волнует Инструмент - что именно делать, решает Карандаш или Резинка или Аэрограф.
2) Пункты в выпадающем меню. Каждый объект списка может быть как просто кнопочкой, так и другим выпадающим Меню и даже неактивным Разделителем. Но для конкретного списка все они - просто MenuItem, объекты, составляющие список, которые нужно отобразить. Как они будут реагировать на поведение пользователя - их личное дело.
3) Юниты армии Двемеров. Тяжелые лучники, кавалерия, алебардисты и бронзовые големы - все они разных классов, но должны слушаться одних и тех же "приказов".
Конечно, многие задачи позволяет решить наследование, но далеко не все.
__________________
Reality.getBounds(this);

Старый 20.01.2011, 21:43
Weax вне форума Посмотреть профиль Отправить личное сообщение для Weax Посетить домашнюю страницу Weax Найти все сообщения от Weax
  № 10  
Ответить с цитированием
Weax
 
Аватар для Weax

Регистрация: Mar 2004
Адрес: Vilnius
Сообщений: 102
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Конечно пример максимально упрощен, не содержит ничего "лишнего". Не надо искать в нем какой-то конкретный практический смысл "as is". А так я могу Вам тысячу примеров привести, только зачем? Когда будет нужно, Вы сами мимо не пройдете.
Навскидку 3 примера.
1) Инструмент в рисовалке. Карандаш, кисточка, резинка - по сути действие одно, хотя результат и настройки разные. Абстрактному классу "Инструмент" передаете конкретный - карандаш, кисточка и т.д., и Инструмент заставляет его "работать" с холстом по действиям пользователя. Суть "работы" не волнует Инструмент - что именно делать, решает Карандаш или Резинка или Аэрограф.
2) Пункты в выпадающем меню. Каждый объект списка может быть как просто кнопочкой, так и другим выпадающим Меню и даже неактивным Разделителем. Но для конкретного списка все они - просто MenuItem, объекты, составляющие список, которые нужно отобразить. Как они будут реагировать на поведение пользователя - их личное дело.
3) Юниты армии Двемеров. Тяжелые лучники, кавалерия, алебардисты и бронзовые големы - все они разных классов, но должны слушаться одних и тех же "приказов".
Конечно, многие задачи позволяет решить наследование, но далеко не все.
вот как раз наследование мне в основном всё и решало раньше
__________________
WD Solutions

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

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

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


 


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


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