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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.10.2014, 20:39
Wormhole вне форума Посмотреть профиль Отправить личное сообщение для Wormhole Найти все сообщения от Wormhole
  № 11  
Ответить с цитированием
Wormhole
 
Аватар для Wormhole

Регистрация: Jun 2014
Адрес: Санкт-Петербург
Сообщений: 185
Цитата:
Сообщение от Gerbert Посмотреть сообщение
elder_Nosferatu, в одном маленьком-маленьком городе,
живет один человечек, который носит трусы поверх брюк. И вот этот человечек встречает Вас
и спрашивает - "а почему ты не носишь трусы по верх брюк? Ответы, что это не правильно, не по дрескоду,
и прочие, я слушать НЕ ХОЧУ!".

Вот что Вы этому нехочухе ответите?
При чем тут это? То, что предложил элдер, не мешает коду, наоборот, делает его быстрее и лаконичнее.

Почему писать код в кадрах - это неправильно. Просто почему. Мне интересно знать, так как писать в кадрах я привык и это для меня кажется удобным. На крайняк могу сделать парочку простых классов.

Старый 24.10.2014, 21:16
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 12  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Цитата:
При чем тут это?
При том, что есть правило ооп, которое гласит, что обращаться к свойству можно только через аксессор.
Можно и без, но это не ооп. Но я запомню Ваше пожелания и буду показывать так, как неправильно,
но быстрее.
Цитата:
Почему писать код в кадрах - это неправильно. Просто почему.
Я посоветовал, но дело Ваше. Как хотите так и делайте, я не собираюсь Вам что-то доказывать, мне безразлична Ваша судьба и предпочтения.

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

Регистрация: Jan 2013
Сообщений: 322
Цитата:
Почему писать код в кадрах - это неправильно. Просто почему. Мне интересно знать, так как писать в кадрах я привык и это для меня кажется удобным.
я тебе честно скажу, все что ты сейчас делаешь, пока учишься программировать, пойдет в мусорку. и не потому что "код - испражнения, все переписать", а потому что вещи элементарные. то есть разницы особой нет, тебе главное мозг качать.
выучить ооп - в крайнем случае полгода, учиться программировать в целом - несколько лет.

Цитата:
есть правило ооп, которое гласит, что обращаться к свойству можно только через аксессор.
вспомним java

Старый 25.10.2014, 10:54
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 14  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Цитата:
Сообщение от Gerbert Посмотреть сообщение
При том, что есть правило ооп, которое гласит, что обращаться к свойству можно только через аксессор.
Ну раз так, то как Вы оправдаете это:
Код AS3:
private var _keyboardFlags: Object = {};
...
... _keyboardFlags.LEFT ...
... _keyboardFlags.RIGHT ...
... _keyboardFlags.STOP ...
...
Мало того, что свойства LEFT, RIGHT и STOP экземпляра класса Object ничем не прикрыты, так Вы еще и ссылку на этот экзепляр передаете наружу ПРАВОСЛАВНЫМ ГЕТ-АКСЕССОРОМ...
Если уж так приспичило ООПрограммировать, то делайте все правильно.
Пример 1: Геттер возвращает копию _keyboardFlags, тем самым не даем возможности изменить извне значения флагов. [Encapsulation completed ]
Код AS3:
public class KeyBoardController {
	private var _keyboardFlags:Object = {};
	public function get keyboardFlags( ):Object {
		var hash:Object = {};
		for (var key:String in _keyboardFlags) {
			hash[ key ] = _keyboardFlags[ key ];
		}
		return hash;
	}
}
Пример 2: Возвращаем значение флага по его имени (без прямого доступа к незащищенному хранилищу флагов - _keyboardFlags). [Encapsulation completed ]
Код AS3:
public class KeyBoardController {
	private var _keyboardFlags:Object = {};
	public function getKeyboardFlagByName( name:String ):Object {
		return _keyboardFlags[ name ];
	}
}
Пример 3: То же, что и Пример 2, но доступ по имени заменяем на геттеры отдельных флагов. [Encapsulation completed ]
Код AS3:
public class KeyBoardController {
	private var _keyboardFlags:Object = {};
	public function get flagLEFT( ):Object {
		return _keyboardFlags[ "LEFT" ];
	}
	public function get flagRIGHT( ):Object {
		return _keyboardFlags[ "RIGHT" ];
	}
	public function get flagSTOP( ):Object {
		return _keyboardFlags[ "STOP" ];
	}
}
Пример 4: То же, что и пример 3, но хранилище флагов заменяем на соответствующие нужным флагам свойства. [Encapsulation completed ]
Код AS3:
public class KeyBoardController {
	private var _flagLEFT:Object;
	private var _flagRIGHT:Object;
	private var _flagSTOP:Object;
	public function get flagLEFT( ):Object {
		return _flagLEFT;
	}
	public function get flagRIGHT( ):Object {
		return _flagRIGHT;
	}
	public function get flagSTOP( ):Object {
		return _flagSTOP;
	}
}
ЗЫ: Если Вы охарактеризовали мой прежний пост, как ношение нижнего белья поверх брюк, то либо ничерта не поняли, либо огрызаетесь праведным идеологическим гневом вместо тог, чтобы аргументировано отстоять свою позицию. Я не предлагаю вам делать ничего противоестественного. Более того, я предлагаю не делать ничего неуместного. Приведу свою аналогию. Вы выставляете на показ яйцо Фаберже. Вы знаете, что посмотреть на него прийдут всякие сомнительные личности и пытаетесь защитить свое богатство охранной системой. Но вместо того, чтобы накрыть яйцо стеклянной витриной с сигнализацией, Вы подсоединяете напряжение к подставке для яйца. Я Вам говорю, что такой подход не страхует Вас от кражы яйца, а Вы мне заявляете, что нельзя же без охранной системы.

Старый 25.10.2014, 13:47
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 15  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Сорри, я не понял с первого раза о чем Вы.
Да Вы правы! Getter на _keyboardFlags в данной ситуации действительно не нужен.

И я даже больше скажу, своё мнение я пытался обосновать мыслями, которые феерически, как фейверк, промчались
по моему мозгу и точно так же растворились в потоке информации полученной из гугла. И после этого наступило
настоящие просветление в отношении set-get. Спасибо! До этого я не в полной картине понимал и аксессоры и даже типы
и даже само проектирование.

Добавлено через 30 минут
Но вот небольшой вопрос - SimpleButton от adobe имеет
Код AS3:
public function get upState():DisplayObject
public function set upState(value:DisplayObject):void
и для себя я объяснил это так - передаю Shape и SimpleButton не может изменить нарисованное,
так DO это не позволит. Но! Ведь я могу взять у кнопки этот стайт и поменять его координаты, ширину или даже
перерисовать прикастовав его к Shape, это ведь тоже не защищает объект. И если следовать этому пути,
то на DO вообще нельзя делать set-get... Что Вы по этому поводу можете сказать?

Старый 25.10.2014, 15:04
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 16  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Во первых, кнопке (экземпляру SimpleButton) плевать чем Вы ее напичкаете, главное, чтобы это были экранные объекты. А будут они прямоугольные, красные, большие или даже пустые внутри - дело Ваше.
Во вторых, как кнопка сможет сходу поменять разместить в себе Ваш апСтейт-объект, если бы у нее было просто публичное свойство upState без аксессоров? Можно, конечно прикрутить ей некий публичный метод refresh() и дергать его самостоятельно, после изменения значения одного из состояний, но зачем тогда аксессоры? Короче, предположу, что:
Код AS3:
private var _upState:DisplayObject;
public function get upState():DisplayObject {
	return _upState;
}
public function set upState(value:DisplayObject):void {
	if (_upState) {
		// remove old state
	}
	_upState = value;
	if (_upState) {
		// place new state
	}
}

Старый 25.10.2014, 15:14
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 17  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
То есть, Вы считаете adobe таким примитивным, что у них состояния в сеттере меняются?)

Повторю вопрос в догонку - по Вашему мнению на DO вообще не нужно делать аксессоры,
если конечно, что-то да не меняется, как в примере выше?

Добавлено через 1 минуту
И не подумайте, что я пытаюсь придраться, я уточняю, так как Вы обосновали свое мнение
и я вижу в нем долю истины.

Старый 25.10.2014, 17:48
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 18  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Цитата:
Сообщение от Gerbert Посмотреть сообщение
То есть, Вы считаете adobe таким примитивным, что у них состояния в сеттере меняются?)
Если установка нового значения должна сопровождаться изменением состояния, то сеттер как раз и берет на себя эту функцию. И не важно будет это сделано непосредственно в сеттере или он просто вызовет специальный метод, который отвечает за применение нового состояния или даже новое состояние сохранится в промежуточном свойстве, а из сеттера отправится запрос инвалидатции.
Например кнопка находится в состоянии "UP" и Вы заганяете новое значение для upState. Вы считаете adobe таким примитивным, что на enterFrame-обработчике висит проверка "а не изменилось ли какое нибудь состояние"? По моему им хватило ума из сеттера инициировать замену. А как она производится мне уже не так интересно. В своем же примере я показал только общую идею, а не конкретную реализацию.

Цитата:
Сообщение от Gerbert Посмотреть сообщение
Повторю вопрос в догонку - по Вашему мнению на DO вообще не нужно делать аксессоры,
если конечно, что-то да не меняется, как в примере выше?
Нет никакой разници какого типа значение должно хранить свойство. Необходимость в защите свойства через методы-аксессоры определяется архитектурой. В большинстве случаев есть смысл использовать аксессоры, но только потому, что в этом же большинстве случаев установка нового значения должна вызвать ответную реакцию. А если я вижу такое:
Код AS3:
private var _param:int;
public function get param():int { return _param; }
public function set param(value:int):void { _param = value; }
то это уже бред... Спросим у Википедии на счет инкапсуляции:
Цитата:
Сообщение от Википедия
Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя.
Пример выше ничего от пользователя не скрывает, но в то же время усложняет класс. Работа с таким "защищенным" свойством не отличается от обычного публичного свойства, зато чтение и запись сопровождаэтся вызовом ненужных функций.

Цитата:
Сообщение от Gerbert Посмотреть сообщение
И не подумайте, что я пытаюсь придраться, я уточняю, так как Вы обосновали свое мнение и я вижу в нем долю истины.
Ну что Вы, придирайтесь на здоровье! Но только если по существу. Ато плодотворная дискуссия (в которлй между прочим может родится истина ) превратится в банальный срач.

Старый 25.10.2014, 18:18
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 19  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Думал, что можно ответить, но пришел к обычному - Спасибо!

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

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

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


 


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


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