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

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

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
По умолчанию А в чем смысл final?

Ну не смогу я унаследовать этот класс, тем самым завязываю себе или тем кто будет моим кодом пользоваться руки, чтобы класс допилить нужной функциональностью. Зачем?

Старый 15.03.2010, 17:32
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Ну, по идее, побыстрее должно работать с final, хотя за АС3 точно сказать не возьмусь. А так, в том и смысл, чтобы завязать руки. Если имеются на то основания.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Смысл примерно такой же как const vs var.
__________________
Hell is the possibility of sanity

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Типа, класс написан что чуть изменив что нибудь и апокалипсис? Дак ненужно таких классов писать =\

Старый 15.03.2010, 19:42
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 5  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Иногда может быть полезным финализировать метод, чтобы не столько не изменить логику, сколько ускорить какие-то участки кода.

Абстрактная ситуация, программируется черный_ящик-база для групп юнитов в классе определен метод:
Код AS3:
public function hasUnit(unit:IUnit):Boolean {
	//search unit
}
Этот метод часто употребляется в некоем другом методе этого же класса:
Код AS3:
private function _doSomeThing():void {
	...
	if (this.hasUnit(tank)) ...;
	...
}
Такая запись гипотетически может вызвать конфликт, если тот, кто будет отнаследовываться от вашего класса переопределит метод hasUnit.

Что можно сделать:
1) можно создать код вида:
Код AS3:
public function hasUnit(unit:IUnit):Boolean {
	this._hasUnit(unit);
}
 
private function _hasUnit(unit:IUnit):Boolean {
	//search unit
}
 
private function _doSomeThing():void {
	...
	if (this._hasUnit(tank)) ...;
	...
}
2) Можно пометить публичный метод hasUnit как final и получить удвоенную скорость выполнения hasUnit за счет НЕ вызова приватного метода (если метод вызывается извне). В ущерб полиморфизму.

Старый 15.03.2010, 22:41
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Бытуют мнения. Первое не разделяю без тестов. Второе не нашло пока применение в моей практике.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 15.03.2010, 23:01
ERrorMAKros вне форума Посмотреть профиль Отправить личное сообщение для ERrorMAKros Посетить домашнюю страницу ERrorMAKros Найти все сообщения от ERrorMAKros
  № 7  
Ответить с цитированием
ERrorMAKros
 
Аватар для ERrorMAKros

Регистрация: May 2008
Адрес: Земля.Украина.Одесса
Сообщений: 219
Отправить сообщение для ERrorMAKros с помощью ICQ Отправить сообщение для ERrorMAKros с помощью Skype™
final

Применение
final function methodName()
{
// ваши инструкции здесь
}
final class className {}

Показывает, что метод невозможно переопределить или что класс невозможно расширить. При попытке переопределить метод или расширить класс, отмеченный как final, возникнет ошибка.


Параметры
methodName:Function — Имя метода, который невозможно переопределить.
className:Class — Имя класса, который невозможно расширить.

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
Такая запись гипотетически может вызвать конфликт, если тот, кто будет отнаследовываться от вашего класса переопределит метод hasUnit.
Для базового класса он и останется this.hasUnit. А для потомка - super.hasUnit. Не понял суть проблемы.
Цитата:
Можно пометить публичный метод hasUnit как final и получить удвоенную скорость выполнения hasUnit за счет НЕ вызова приватного метода (если метод вызывается извне). В ущерб полиморфизму.
То есть вызовы методов вкомпилятся инлайново?

ERrorMAKros, я знаю что такое final и как его применять. Я спрашиваю в чем его практический смысл.

Старый 15.03.2010, 23:37
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 9  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Почему же апокалипсис? Просто финал. Приплыли. Дальше некуда. Ибо нету смысла, и не надо, запрещено, не трогай. О чем, собственно, и уведомляет final. Наряду со строгой типизацией final призван защитить код от всяких неожиданностей. Понятно, что ставить его, где и как попало нормальному человеку в голову не придет. Хороша ложка к обеду, словом.

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Ну, это то понятно - однако всё равно я слабо могу представить ситуацию, в которой он вообще действительно нужен. Я не один такого мнения, значит всё нормально, всем спасибо.

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

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

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


 


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


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