Цитата:
Сообщение от 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;
}
}
ЗЫ: Если Вы охарактеризовали мой прежний пост, как ношение нижнего белья поверх брюк, то либо ничерта не поняли, либо огрызаетесь праведным идеологическим гневом вместо тог, чтобы аргументировано отстоять свою позицию. Я не предлагаю вам делать ничего противоестественного. Более того, я предлагаю не делать ничего неуместного. Приведу свою аналогию. Вы выставляете на показ яйцо Фаберже. Вы знаете, что посмотреть на него прийдут всякие сомнительные личности и пытаетесь защитить свое богатство охранной системой. Но вместо того, чтобы накрыть яйцо стеклянной витриной с сигнализацией, Вы подсоединяете напряжение к подставке для яйца. Я Вам говорю, что такой подход не страхует Вас от кражы яйца, а Вы мне заявляете, что нельзя же без охранной системы.
